【问题标题】:SEVERE: Allocate exception for servlet <myservlet-name> java.lang.ClassNotFoundException: <myservlet> exception [duplicate]严重:为 servlet <myservlet-name> java.lang.ClassNotFoundException 分配异常:<myservlet> 异常 [重复]
【发布时间】:2014-09-16 12:09:48
【问题描述】:

当我使用以下web.xml 时,我的项目运行良好,我可以看到“Hello World”通过 index.jsp 页面显示。我正在使用 Netbeans 7.4Apache tomcat 6.0.41

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
 </web-app>

但是,当我创建自己的 servlet 并使用以下 web.xml,=

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>

 <servlet>
    <servlet-name>TEST_Authenticate</servlet-name>
    <servlet-class>restapi.TEST_Authenticate</servlet-class>
</servlet>  
<servlet-mapping>
    <servlet-name>TEST_Authenticate</servlet-name>
    <url-pattern>/TEST_Authenticate</url-pattern>
</servlet-mapping>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>


    <scope>provided</scope>
</dependency>

我最终在 Apache Tomcat 日志中收到以下错误:

Jul 24, 2014 9:36:14 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet TEST_Authenticate
java.lang.ClassNotFoundException: TEST_Authenticate
    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:103)
    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.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:744)

我检查了以下post,但仍然收到错误。

项目结构:

【问题讨论】:

  • 这是什么---> &lt;servlet-class&gt;restapi.TEST_Authenticate&lt;/servlet-class&gt;?我的意思是问为什么要restapi.TEST_Authenticate???
  • @shekharsuman 这不是声明类的正确方法吗?我也尝试过&lt;servlet-class&gt;TEST_Authenticate&lt;/servlet-class&gt;,但它不起作用。 restapi 是包的名称。
  • 如果restapi是包名,那就没问题了!我想我发现了错误,请检查我的答案!
  • 能把项目结构贴一下吗
  • @M.Sharma 添加了结构图片

标签: java servlets netbeans


【解决方案1】:

首先删除

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

如果是 Maven 项目,则从 web.xml 并将其放入您的 pom.xml

其次,当在指定位置找不到类时,会抛出ClassNotFoundException。在你的情况下,就像你一样

<servlet-class>restapi.TEST_Authenticate</servlet-class>

所以,我假设你有一个名为 restapi 的包,并且在它下面有一个类 TEST_Authenticate

所以,如果它是一个 Maven 项目 你应该有scr/main/java/yourpackagename/yourClass,如果它是一个简单的网络项目,那么它应该像src/yourpackagename/yourClass

【讨论】:

  • 是的,完全删除了&lt;dependency&gt; 标签,它删除了web.xml 上的红十字标记。是的,restapi 是一个包,如我的问题中的结构图像所示。这是一个网络项目,那么src/yourpackagename/yourClass 是什么意思?
  • 您是如何尝试访问 servlet 的?参考 this example 运行一个 servlet,您将了解您缺少什么
  • 我认为你是对的。我以不同的方式访问 servlet。当我在创建新的 Web 项目后执行链接中提到的操作时,虽然我在 Apache Tomcat 日志java.io.IOException: Server returned HTTP response code: 500 for URL: http://myurl.com 中遇到错误,但 URL 是我的TEST_Authenticate servlet 的内容。所以,它现在正在访问我的 servlet。弄清楚这个问题应该是我现在的下一步。谢谢!
【解决方案2】:

您还没有在最后使用/web-api&gt; 关闭web.xml 中的&lt;web-api&gt;。所以,它可能会出错。此外,最好在servlet-mapping 参数之后保留&lt;session-config&gt;

只需尝试web.xml中的以下代码(将我的代码复制粘贴到您的 web.xml 中):-

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

<welcome-file-list>
<welcome-file>restapi/TEST_Authenticate.java</welcome-file>   
</welcome-file-list>

<servlet>
<servlet-name>TEST_Authenticate</servlet-name>
<servlet-class>restapi.TEST_Authenticate</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>TEST_Authenticate</servlet-name>
<url-pattern>/TEST_Authenticate</url-pattern>
</servlet-mapping>

<session-config>
<session-timeout>30</session-timeout>
</session-config>

</web-app>

编辑--->

默认情况下,欢迎页面在 NetBeans IDE 的 Web 应用程序项目中设置为 index.jsp。因此,即使您没有指定任何内容,它也会仅搜索该文件并打开它。如果要打开特定页面,请编辑

<welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list>

并用 your_required_jsp_page 替换 login.jsp

我希望它能回答你的问题。如果没有帮助,请随时发表评论。

【讨论】:

  • 谢谢谢卡尔。我已经有了web.xml 的结束标签,但我忘了在我的问题中包含它。现在我不知道为什么,我在浏览器上被定向到http://localhost:8080/testapi/ URL,它正在执行index.jsp 页面并在浏览器上显示Hello World。总的来说,我的 servlet 没有执行。你知道为什么吗?
  • @John-我要求您使用 netbeans 中提供的选项在 netbeans 中重新清理和构建项目!请在执行此操作并执行项目后发表评论。
  • 现在网络浏览器没有打开,但是构建成功。不知道为什么,但我的web.xml上仍然有红十字标记
  • 我的意思是说,当我部署项目时,我在 Web 浏览器中得到了 Hello World,现在没有发生。是的,它与你提到的完全一样。
  • 当我将鼠标悬停在 web.xml 上时,我看到一条错误消息 Invalid content was found starting with element dependency and some file path
猜你喜欢
  • 2012-09-04
  • 2021-04-08
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多