I have a Hello World servlet in webapps/hello/WEB-INF/class/HelloServlet.class and I registered it as below in web.xml:
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
However, Tomcat failed to start with the below exception:
Apr 30, 2012 1:50:10 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet HelloServlet as unavailable
Apr 30, 2012 1:50:10 PM org.apache.catalina.core.ApplicationContext log
java.lang.ClassNotFoundException: HelloServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1128)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process
(Http11AprProtocol.java:594)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)
at java.lang.Thread.run(Unknown Source)
Apr 30, 2012 1:50:10 PM org.apache.catalina.core.StandardWrapperValve invoke
How is this caused and how can I solve it?
The main problem is that your servlet class doesn't have a package. Declare one.
package com.example;
public class HelloServlet extends HttpServlet {
And when registering in web.xml, make sure you include the package:
<servlet-class>com.example.HelloServlet</servlet-class>
Also, your class file should be inside the /WEB-INF/classes directory, not /WEB-INF/class.
webapps/hello/WEB-INF/classes/com/example/HelloServlet.class
Try to keep HelloServlet class in some package(not in default package).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With