0

I am a newbie in Java Server Programming. I'm struggling with a problem when running the project. When I first ran the project, I got the same error with this problem: Tomcat Server Error - Port 8080 already in use.

But when I changed the port, it became like this:

SEVERE: Allocate exception for servlet [HS]
java.lang.ClassNotFoundException: webapp.HelloServlet
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1364)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1187)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:539)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:520)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1042)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:761)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:831)

Here is my web.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://JAVA.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
    id="WebApp_ID" version="4.0">
    <display-name>Example_11</display-name>
    <description>

        Servlet Demos.
    </description>
    <servlet>
        <servlet-name>HS</servlet-name>
        <servlet-class>webapp.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HS</servlet-name>
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>
</web-app>

My java file

package webapp;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
        response.setContentType("text/html");
        java.io.PrintWriter out = response.getWriter();
        out.println("<html><head>");
        out.println("<title>Hello Servlet</title>");
        out.println("<link rel='stylesheet' type='text/css' href='styles.css' />");
        out.println("</head><body>");
        out.print("<p>Today is: " + new Date());
        out.print("</p>");
        out.print("<h1>The Hello Servlet Demo</h1>");
        out.println("<p>This is the first hello servlet</p>");
        out.println("<img src='images/Tulips.PNG' width='100' height='100' />");
        out.println("</body></html>");
    }
}

enter image description here

I am new to this subject. Can someone explain why do those errors happen? Thank you very much.

1 Answers1

0
ClassNotFoundException: webapp.HelloServlet

This means that Tomcat cannot find file HelloServlet.class. This is the file that is created when you compile your java source code.

Servlet classes, such as your HelloServlet class, must be placed in a directory named classes below the WEB-INF directory.

Since your servlet is in a package name webapp, you need to create a webapp directory below the classes directory.

Then copy file HelloServlet.class to directory WEB-INF/classes/webapp.

Refer to Java EE Tutorials

Abra
  • 19,142
  • 7
  • 29
  • 41
  • So I have to create a classes directory even when I use an IDE like I'm using Eclipse? – Howard Duong Sep 04 '21 at 22:38
  • @HowardDuong are you using [Eclipse IDE for Enterprise Java and Web Developers](https://www.eclipse.org/downloads/packages/release/2021-06/r/eclipse-ide-enterprise-java-and-web-developers)? I don't use it so I don't know but I assume it helps you to create Web applications that contain servlets. – Abra Sep 05 '21 at 04:53
  • Yes, I'm using it. – Howard Duong Sep 05 '21 at 08:30