代码之家  ›  专栏  ›  技术社区  ›  Nathan Campos

Tomcat5.5找不到我的Servlet

  •  4
  • Nathan Campos  · 技术社区  · 14 年前

    我已将源代码编译到类中 Files

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

    把这个加到 web.xml 文件:

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

    http://localhost:8080/Files ,我从Tomcat得到了这个错误: Tomcat 5.5 404 Error http://img251.imageshack.us/img251/5042/tomcat404.png


    更新 <servlet-mapping> 我现在得到以下错误:

    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)
    
    4 回复  |  直到 14 年前
        1
  •  3
  •   BalusC    14 年前
    root cause
    java.lang.NoClassDefFoundError: IllegalName: /Files
    

    这意味着找不到给定的类定义,因为它的名称非法 /Files <servlet-class>

    /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>
    

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

    这个 <servlet类> 应该表示 完全限定类名 ,包括任何包装。这个 <servlet-name> 应该表示 . 这个 <url-pattern> URL模式 servletcontainer应为此调用此servlet。

        2
  •  3
  •   Mike Tunnicliffe    14 年前

    您还需要定义

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

    将url模式与servlet匹配

        3
  •  3
  •   KLee1    14 年前

    您还需要servlet映射:

    <servlet-mapping>
      <servlet-name>Files</servlet-name>
      <url-pattern>/Files</url-pattern>
    </servlet-mapping>
    
        4
  •  0
  •   Andy    11 年前

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

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