2010-07-07 64 views
3

我編譯源到類Files,然後在該文件夾的推杆:的Tomcat 5.5沒有找到我的servlet

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

注意,在默認包把Servlet類是不鼓勵的servlet。 Tomcat在這方面很寬鬆,但是在某些Tomcat配置和其他servlet容器中,您有可能無法定位/加載servlet。總是將其他類加載/導入的類放入包中。 – BalusC 2010-07-07 23:53:29

+0

我知道,但這只是一個簡單的測試。然後我沒有使用這些軟件包。 – 2010-07-07 23:54:48

+0

這可能是此問題的根源。在'/ logs'中讀取服務器的啓動日誌。 – BalusC 2010-07-08 00:27:27

回答

3
root cause 
java.lang.NoClassDefFoundError: IllegalName: /Files 

這意味着無法找到給定的類定義,因爲它具有非法名稱/Files。這又意味着您已將<servlet-class>更改爲/Files。這是錯誤的。您基本上指示servlet容器聲明和實例化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>應表示URL模式,servlet容器應該調用此servlet。

3

您還需要定義一個

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

到URL模式匹配到servlet

+0

我仍然收到相同的錯誤。 **:(** – 2010-07-08 00:00:19

+0

)您可能需要重新啓動Tomcat,或至少重新加載應用程序。您是否嘗試過? – 2010-07-08 00:04:41

+0

當然,我已經嘗試了所有,重新編譯並重新啓動服務器。 – 2010-07-08 00:09:43

3

您還需要servlet映射:

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

我仍然收到相同的錯誤**:(** – 2010-07-08 00:01:15

0

此外,在WEB-INF下的classes文件夾中,請確保您創建一個名稱與該類的包名稱相同的文件夾,並將該文件夾中的所有類都放入該文件夾中。在web.xml中,使用

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

引用您的類文件夾