Получаю java.lang.Исключение ClassNotFoundException при запуске сервлета java

#java #xml #servlets

Вопрос:

Я пытаюсь создать простое веб-приложение с использованием servelt, которое принимает два числа в качестве входных данных пользователя и выводит их сумму. Однако, когда я отправляю пользовательский ввод, я начинаю получать ошибку ClassNotFoundException. Я не могу понять, почему я получаю такую ошибку

В настоящее время я использую сервер Tomcat 10 и сервлет 5. Ниже приведены подробные сведения о моем классе сервлетов, веб-xml и структуре папок.

Ниже приведены подробные сведения

Журнал исключений

 java.lang.ClassNotFoundException: demo.app.AddServlet
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1444)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1252)
    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:1071)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:789)
    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:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353)
    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:872)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1695)
    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:834)

 

web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://Java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
    <servlet-name>abc</servlet-name>
    <servlet-class>demo.app.AddServlet</servlet-class>
    
    </servlet>
    
    <servlet-mapping>
    <servlet-name>abc</servlet-name>
    <url-pattern>/add</url-pattern>
    </servlet-mapping>
</web-app>

 

класс сервлета

 package demo.app;

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

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

public class AddServlet extends HttpServlet{
    
    public void service(HttpServletRequest req, HttpServletResponse res) throws IOException {
        
        int i= Integer.parseInt(req.getParameter("num1"));
        
        int j= Integer.parseInt(req.getParameter("num2"));
        
        int k= i j;
        
        PrintWriter out= res.getWriter();
        out.println("The result is"  k);

    }
}
 

структура папок

 └───src
    ├───demo
    │    └───app
    |          |__AddServlet.java
    └───main
        └───webapp
            ├───META-INF
            └───WEB-INF
            |    |__lib
            |    |__web.xml
            |___demo.html

 

Может ли кто-нибудь, пожалуйста, объяснить мне, почему у меня возникает такая проблема и как ее решить?

Комментарии:

1. Проверьте, развернут ли ваш класс в контейнере сервлетов.

2. Просмотрите папку web-inf и проверьте, есть ли папка классов и находится ли в ней ваш класс сервлета или нет. Если да, то перезапустите ide или сервер. Если нет, то проверьте путь сборки.