Servlet and Jsp ClassNotFoundException

Viewed 108

I have started learning servlet and JSP. I have created the dynamic web project in my eclipse and mapped my servlets and URL in the web.xml, but for some reason, the console shows the classNotFoundException even though I have given the correct filePath to it. Not only this, it ran once in the browser and when the servlet was called, the printWriter Object did print anything on the browser. However, I also tried the flush method with it. It didn't work.

What did I do wrong?

INDEX.HTML

<!DOCTYPE html>
 <html>
  <head>
   <meta charset="ISO-8859-1">
   <title>Insert title here</title>
 </head>
<body>
    
        <h2>Welcome to the number subtraction game:</h2>
        <form action="subtract">
            Enter the first number:<input type="text" name="value1" ><br>
            Enter the second number:<input type="text" name="value2"><br>
            <input type="submit">
        </form>
</body>
</html>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>DemoApp3</display-name>
  <servlet>
    <servlet-name>Abc</servlet-name>
    <servlet-class>com.telusko.SubtractServlet</servlet-class>
</servlet>
    <servlet-mapping>
        <servlet-name>Abc</servlet-name>
        <url-pattern>/subtract</url-pattern>
    </servlet-mapping>
</web-app>

SubtractServlet.java:

package com.telusko;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SubtractServlet extends HttpServlet{

    public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        int i = Integer.parseInt(req.getParameter("value1"));
        int j = Integer.parseInt(req.getParameter("value2"));
        
        int k = i+j;
        
        PrintWriter out = resp.getWriter();
        out.println(k);
          //also tried the flush method. it didnt work.. 

    }
}

console:error:

May 04, 2022 3:20:59 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/9.0.53]
May 04, 2022 3:21:00 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-9494"]
May 04, 2022 3:21:00 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in [611] milliseconds
May 04, 2022 3:21:06 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet [Abc] as unavailable
May 04, 2022 3:21:06 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet [Abc]
java.lang.ClassNotFoundException: com.telusko.SubtractServlet
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:538)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:519)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1049)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:767)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:128)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
    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:382)
    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:1726)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:833)
1 Answers

I tried your code. For me, your code works well.

I guessed two the reasons of error.

One reason is .class file.is not created. In this case,

I don't know what IDE you use. In intellij IDE, you can check target directory. You must have .class file under here. target directory image

The other reason I guess is your project structrue have something wrong.

you can check is video to create sample servlet project in Intellij. https://www.youtube.com/watch?v=w3-d65fjzMQ

Related