我已将源代码编译到类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
更新:添加<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)
答案 0 :(得分:3)
您还需要定义
<servlet-mapping>
<servlet-name>Files</servlet-name>
<url-pattern>/Files</url-pattern>
</servlet-mapping>
将url模式与servlet匹配
答案 1 :(得分:3)
您还需要servlet-mapping:
<servlet-mapping>
<servlet-name>Files</servlet-name>
<url-pattern>/Files</url-pattern>
</servlet-mapping>
答案 2 :(得分:3)
root cause java.lang.NoClassDefFoundError: IllegalName: /Files
这意味着无法找到给定的类定义,因为它具有非法名称/Files
。这反过来意味着您已将<servlet-class>
更改为/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();
<servlet-class>
应表示完全限定的类名,包括任何包。 <servlet-name>
应表示唯一实例名称。 <url-pattern>
应表示servletcontainer应调用此servlet的 URL模式。
答案 3 :(得分:0)
此外,在WEB-INF下的类类文件夹中,请确保创建一个名称与类的包名称相同的文件夹,并将所有类放在该文件夹中。在web.xml中,使用
<servlet>
<servlet-name>File</servlet-name>
<servlet-class>package.File</servlet-class>
</servlet>
引用类文件夹中的servlet