java HttpServlet 的 Tomcat ClassNotFoundException

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15803082/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 20:54:53  来源:igfitidea点击:

Tomcat ClassNotFoundException for HttpServlet

javaservlets

提问by Steve Robinson

We are getting a java.lang.ClassNotFoundException: HttpServletwith a JSP project running on the Apache Tomcat server (v5.5) in Eclipse. The lib folder under Web-inf does have the servelt-api jar. And furthermore we have imported the javax.servlet.http.* library. But still we are getting this exception.

我们正在java.lang.ClassNotFoundException: HttpServletEclipse中获得一个在 Apache Tomcat 服务器 (v5.5) 上运行的 JSP 项目。Web-inf 下的 lib 文件夹确实有 servelt-api jar。此外,我们还导入了 javax.servlet.http.* 库。但是我们仍然收到此异常。

package com.bean;

import java.io.*;
import java.util.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class AdminLogin extends HttpServlet{
    ArrayList list=new ArrayList();

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{     

        try{
        response.setContentType("text/html");       
        PrintWriter out=response.getWriter();    
        String id=request.getParameter("user");
        String pass=request.getParameter("pass");
        System.out.println("ID==================>>"+id+"PASS========>>"+pass);
        if(id.equalsIgnoreCase("admin")&&pass.equalsIgnoreCase("admin"))
                {
                    response.sendRedirect("AdminPage.jsp");                 
                }
                else
                {
                    response.sendRedirect("Failure.html");        
                }           
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        }
}

Error Stack Trace:

错误堆栈跟踪:

java.lang.NoClassDefFoundError: HttpServlet
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClassCond(Unknown Source)
    java.lang.ClassLoader.defineClass(Unknown Source)
    java.security.SecureClassLoader.defineClass(Unknown Source)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:873)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1326)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
    org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
    java.lang.Thread.run(Unknown Source)
root cause

java.lang.ClassNotFoundException: HttpServlet
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1359)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClassCond(Unknown Source)
    java.lang.ClassLoader.defineClass(Unknown Source)
    java.security.SecureClassLoader.defineClass(Unknown Source)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:873)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1326)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
    org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
    java.lang.Thread.run(Unknown Source)

Web.xml:

网页.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">
    <display-name>CarPooling</display-name>
    <servlet>
        <description>
        </description>
        <display-name>AdminLogin</display-name>
        <servlet-name>AdminLogin</servlet-name>
        <servlet-class>com.bean.AdminLogin</servlet-class>
        </servlet>
        <servlet>
 <servlet-name>employee</servlet-name>
 <servlet-class>com.bean.UserLogin</servlet-class>
 </servlet>
    <servlet-mapping>
        <servlet-name>AdminLogin</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>  
  <servlet-mapping>   
  <servlet-name>employee</servlet-name>
 <url-pattern>/login</url-pattern>                             
 </servlet-mapping>  
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>      
    </welcome-file-list>
</web-app>

project folder structure: enter image description here

项目文件夹结构: 在此处输入图片说明

回答by Hardik Mishra

The lib folder under Web-inf does have the servelt-api jar.

Web-inf 下的 lib 文件夹确实有 servelt-api jar。

There is no need to add servlet-api.jar to Classpath. IDE takes care of that.

不需要将 servlet-api.jar 添加到 Classpath。IDE 负责解决这个问题。

Check whether you Build Path contains Tomcat libraries.

检查您的构建路径是否包含 Tomcat 库。

Right click on Project --> Properties.

右键单击项目 --> 属性。

Sample Screen

示例屏幕

enter image description here

在此处输入图片说明

回答by Bhanu Hoysala

1: Right Click on your Project -> 2: Build path -> 3: Add Libraries -> 4: User Libraries -> 5: click on user libraries -> 6: click on new -> 7: Give an library name you like -> 8: click on "Add External Jars" -> 9: browse and select any of the jar file you need.

1:右键单击您的项目-> 2:构建路径-> 3:添加库-> 4:用户库-> 5:单击用户库-> 6:单击新建-> 7:给出您喜欢的库名称-> 8:单击“添加外部罐子”-> 9:浏览并选择您需要的任何 jar 文件。

but in your case if you need servlet-api.jarit is located at TomcatX.X/lib/*.jar

但在你的情况下,如果你需要servlet-api.jar它位于 TomcatX.X/lib/*.jar

Consider this solution if you are missing only that .jar file. It is not a best practice at all for the core libraries.

如果您只缺少该 .jar 文件,请考虑使用此解决方案。对于核心库来说,这根本不是最佳实践。

If your PC is properly configured these library files are automatically loaded to your project by eclipse.

如果您的 PC 配置正确,这些库文件会通过 eclipse 自动加载到您的项目中。