java.lang.ClassNotFoundException: HelloServlet at org.apache.catalina.loader.WebappClassLoader.loadClass

classnotfoundexception, servlets, web.xml

Solution

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

Problem

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?

Original source