Two common problems in compiling Servlets for use within a Tomcat container ...
PROBLEM: My Java Compile of a Servlet says "javax.servlet cannot be resolved"
For example:
[trainee@easterton sources]$ javac Smallest.java
----------
1. ERROR in Smallest.java
(at line 2)
import javax.servlet.*;
^^^^^^^^^^^^^
The import javax.servlet cannot be resolved
----------
2. ERROR in Smallest.java
(at line 3)
import javax.servlet.http.*;
^^^^^^^^^^^^^
The import javax.servlet cannot be resolved
----------
3. ERROR in Smallest.java
(at line 5)
public class Smallest extends HttpServlet {
^^^^^^^^^^^
HttpServlet cannot be resolved to a type
----------
4. ERROR in Smallest.java
(at line 9)
public void doGet(HttpServletRequest request,
^^^^^^^^^^^^^^^^^^
HttpServletRequest cannot be resolved to a type
----------
5. ERROR in Smallest.java
(at line 10)
HttpServletResponse response)
^^^^^^^^^^^^^^^^^^^
HttpServletResponse cannot be resolved to a type
----------
6. ERROR in Smallest.java
(at line 11)
throws IOException, ServletException
^^^^^^^^^^^^^^^^
ServletException cannot be resolved to a type
----------
6 problems (6 errors)[trainee@easterton sources]$
SOLUTION: Add the Servlet API to your CLASSPATH.
[trainee@easterton sources]$ export CLASSPATH=/usr/local/tomcat/common/lib/servlet-api.jar
[trainee@easterton sources]$ javac Smallest.java
[trainee@easterton sources]$
EXPLANATION:
Even if you're just compiling a Servlet to produce a class file, on a machine on which you won't actually be running it, the Java compiler insists on having the necessary classes available to check you code / to know what it is extending.
The Servelet API jar file is available from within a standard Tomcat download, and also from within a Java Enterprise download, but it is not downloaded with the standard edition!
PROBLEM: I get an error message about "does not declare serialVersionUID"
[trainee@easterton sources]$ javac Smallest.java----------
1. WARNING in Smallest.java
(at line 5)
public class Smallest extends HttpServlet {
^^^^^^^^
The serializable class Smallest does not declare a static final serialVersionUID field of type long
----------
[trainee@easterton sources]$
SOLUTION: Check that you're using the correct Java compiler!
1 problem (1 warning)[trainee@easterton sources]$ which java
/usr/bin/java
[trainee@easterton sources]$ export PATH=/usr/local/java/bin:$PATH
[trainee@easterton sources]$ javac Smallest.java
[trainee@easterton sources]$
EXPLANATION: There are various Java Compilers available, and the one that's shipped with Linux releases is highly unlikely bo be Sun's one which you'll want to use with Servlets / Tomcat's classes.
If you have Tomcat downloaded and installed already, chances are that you do have the right compiler already on your system - if not, download it from Sun - but that your PATH to executable files is currently pointing at the one shipped with the operating system.
Learn all about these on our
Deploying Apache httpd and Tomcat course!
(written 2008-11-26)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
J906 - Java - Servlets in More Detail [479] New servlet from old - (2005-10-28)
[1495] Single login and single threaded models - Java and PHP - (2008-01-04)
[1550] Java (JSP and Servlet examples) live on our server - (2008-02-23)
[2183] Servlet life cycle, and Java Servlet variable scope - (2009-05-16)
[2652] Reading and writing cookies in Java Servlets and JSPs - (2010-02-26)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[3044] Changing a Servlet - more that just editing and compiling - (2010-11-12)
[3293] Distributing the server load - yet ensuring that each user return to the same system (Apache httpd and Tomcat) - (2011-05-18)
[4431] A Java servlet that is also a stand alone program. And a server that is also a web client. - (2015-02-19)
[4432] Java web application for teaching - now with sessions and clustering / load balancing demonstrations - (2015-02-20)
J901 - Java - Servlets [3997] Servlet v JSP (Java Server Page). What is the difference? - (2013-02-06)
A653 - Web Application Deployment - Tomcat - Configuring Web Applications [465] Changing Tomcat's web.xml and reloading a web application - (2005-10-15)
[754] tar, jar, war, ear, sar files - (2006-06-10)
[1006] Apache httpd and Apache Tomcat together tips - (2006-12-24)
[1074] Java beans and classes, .war and .jar files - (2007-02-10)
[1082] Straight from the .jar - (2007-02-16)
[1192] What are WEB-INF and META-INF directories? - (2007-05-18)
[1552] Extra public classes in deploying Apache httpd and Tomcat - (2008-02-24)
[1564] Default file (MiMe types) for Apache httpd and Apache Tomcat - (2008-03-04)
[2088] Changing the 404 - file not found - page in Tomcat - (2009-03-18)
[3996] Tips on Tomcat - moving applications around - (2013-02-05)
A502 - Web Application Deployment - Java - Basic Tools [1562] Java Compiler - needs all classes, compiles them all too - (2008-03-03)
[1771] More HowTo diagrams - MySQL, Tomcat and Java - (2008-08-24)
[2153] Class Loading and Variable Conversion in Java - (2009-05-02)
[2422] Looking inside Java classes - javap and javadoc - (2009-09-25)
[2859] Using java, javac, jar, and CLASSPATH - a simple example - (2010-07-07)
[3151] Disassembling Python and Java - previously compiled code - (2011-01-29)
[3819] Packing a tar, jar or war file - best practise - (2012-07-26)
[4412] Java -making sure you have the right versions - (2015-02-02)
Some other Articles
Alastair Darling helps make paperwork and confusionBook now for 2009Remember Me - PHPJava - Genericsjavax.servlet cannot be resolved - how to solveJava CLASSPATH explainedMelksham Hotel RatesLong, Longer, Longest in JavaA Gold Star for First Great Western Customer ServiceRuby, Perl, Linux, MySQL - some training notes