【问题标题】:Tomcat 5.5 Don't Find My ServletTomcat 5.5 找不到我的 Servlet
【发布时间】:2010-07-07 23:45:58
【问题描述】:

我已经把源码编译成Files类,然后放到文件夹里:

Tomcat 5.5\WEB-INF\ROOT\classes\Files.class

并将其添加到web.xml 文件中:

<servlet>
    <servlet-name>Files</servlet-name>
    <servlet-class>Files</servlet-class>
</servlet>

但是当我尝试访问 URL http://localhost:8080/Files 时,我从 Tomcat 收到了这个错误: Tomcat 5.5 404 Error http://img251.imageshack.us/img251/5042/tomcat404.png


更新:添加 &lt;servlet-mapping&gt; 后,我现在收到以下错误:

exception

javax.servlet.ServletException: Error allocating a servlet instance
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:837)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1287)
java.lang.Thread.run(Unknown Source)

root cause

java.lang.NoClassDefFoundError: IllegalName: /Files
java.lang.ClassLoader.preDefineClass(Unknown Source)
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:1960)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:931)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1405)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1284)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:837)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1287)
java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 请注意,不鼓励将 Servlet 类放在默认包中。 Tomcat 在这方面是宽松的,但在某些 Tomcat 配置和其他 servlet 容器中,您可能会面临无法定位/加载 servlet 的风险。始终将要由其他类加载/导入的类放在包中。
  • 我知道,但这只是一个简单的测试。那我就没用过包了。
  • 这可能是这个问题的根本原因。在/logs中读取服务器的启动日志。
  • @BalusC:为了确定,文件是这样的:freetexthost.com/ys4x6i116n

标签: java tomcat servlets


【解决方案1】:
root cause
java.lang.NoClassDefFoundError: IllegalName: /Files

这意味着找不到给定的类定义,因为它具有非法名称/Files。这反过来意味着您已将&lt;servlet-class&gt; 更改为/Files。这是错误的。您基本上是在指示 servletcontainer 声明和实例化 servlet,如下所示:

/Files Files = new /Files();

这还不能编译。完整的映射应如下所示:

<servlet>
    <servlet-name>instanceName</servlet-name>
    <servlet-class>com.example.ServletClass</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>instanceName</servlet-name>
    <url-pattern>/urlPattern</url-pattern>
</servlet-mapping>

在原始 Java 代码中的解释如下:

com.example.ServletClass instanceName = new com.example.ServletClass();

&lt;servlet-class&gt; 应表示完全限定类名,包括任何包。 &lt;servlet-name&gt; 应该表示唯一的实例名称&lt;url-pattern&gt; 应该表示 URL 模式,servletcontainer 应该为其调用这个 servlet。

【讨论】:

    【解决方案2】:

    你还需要定义一个

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

    将 url 模式与 servlet 匹配

    【讨论】:

    • 您可能需要重新启动 Tomcat,或者至少重新加载应用程序。你试过了吗?
    • 当然,我都试过了,重新编译重启服务器。
    • 你确定你只在 url-pattern 中放了“/Files”,没有别的地方吗?
    • @fd:只是为了确保文件是这样的:freetexthost.com/ys4x6i116n
    • 这是不正确的:/Files 你需要:Files
    【解决方案3】:

    您还需要 servlet 映射:

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

    【讨论】:

      【解决方案4】:

      另外,在 WEB-INF 下的 classes 文件夹中,确保创建一个名称与 classes 的包名称相同的文件夹,并将所有类放在该文件夹中。在 web.xml 中,使用

      <servlet> <servlet-name>File</servlet-name> <servlet-class>package.File</servlet-class> </servlet>

      在类文件夹中引用您的 servlet

      【讨论】:

        猜你喜欢
        • 2014-07-18
        • 1970-01-01
        • 2015-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多