我在webapps/hello/WEB-INF/class/HelloServlet.class
中有一个Hello World servlet,我在web.xml
中将其注册如下:
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
但是,Tomcat未能从以下异常开始:
Apr 30, 2012 1:50:10 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet HelloServlet as unavailable
Apr 30, 2012 1:50:10 PM org.apache.catalina.core.ApplicationContext log
java.lang.ClassNotFoundException: HelloServlet
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:102)
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.Http11AprProcessor.process(Http11AprProcessor.java:877)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process
(Http11AprProtocol.java:594)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)
at java.lang.Thread.run(Unknown Source)
Apr 30, 2012 1:50:10 PM org.apache.catalina.core.StandardWrapperValve invoke
这是如何引起的?如何解决?
答案 0 :(得分:6)
主要问题是你的servlet类没有包。宣布一个。
package com.example;
public class HelloServlet extends HttpServlet {
在web.xml
注册时,请确保包含该软件包:
<servlet-class>com.example.HelloServlet</servlet-class>
此外,您的类文件应位于/WEB-INF/classes
目录中,而不是/WEB-INF/class
。
webapps/hello/WEB-INF/classes/com/example/HelloServlet.class
答案 1 :(得分:3)
尝试将HelloServlet类保留在某个包中(不在默认包中)。
答案 2 :(得分:1)
现在你可以使用注释,它会更容易:
package com.yourpackage;
import java.io.IOException;
import java.util.ResourceBundle;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class HelloWorldServlet
*/
@WebServlet("/HelloWorldServlet")
public class HelloWorldServlet extends HttpServlet {
请参阅WebServlet
干杯!!
答案 3 :(得分:0)
我遇到了同样的问题(我正在使用旧时尚servlet进行“学习”),我通过重建maven项目(在eclipse maven - &gt; Update Project中)并在eclipse和tomcat中清理项目来解决。我假设错误被抛出,因为该类不是由maven编译的,因此不包含在tomcat的编译包中。