我在jar文件中有一个servlet,我想将其部署到我的Tomcat 6实例。我做了以下事情:
当我指向我的servlet时,我收到以下错误
javax.servlet.ServletException: Wrapper cannot find servlet class com.mypackage.myServlet or a class it depends on
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Unknown Source)
root cause
java.lang.ClassNotFoundException: com.mypackage.myServlet
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Unknown Source)
这告诉我我的web.xml配置正确,并且我成功地点击了正确的URL模式。所以问题是......我在哪里将一个servlet jar文件放在Tomcat 6中,以便在CLASSPATH中获取它?
TIA
答案 0 :(得分:3)
您的servlet JAR文件位于WAR的lib
目录中,而不是位于顶级Tomcat lib
目录中,即
<war-root>
/WEB-INF
web.xml
/lib
myservlet.jar
答案 1 :(得分:1)
虽然这不是正常做法,但它应该可以正常工作。因为它应该在理论上工作,我已经在本地测试它并且它工作正常(Tomcat 6.0.20和7.0.5)。你可能在<servlet-class>
中输错了。 servlet的类名称以小写字母开头,完全违反Java naming conventions。尝试
<servlet-class>com.mypackage.MyServlet</servlet-class>
代替。
如果这不能解决问题,请使用一些ZIP / RAR工具解压缩JAR并验证com/mypackage/MyServlet.class
文件是否存在。
如果文件实际存在,那么您可能正在使用某个IDE,该IDE在Tomcat的副本中只有Tomcat/lib
的特定子集,该副本由IDE控制/管理。尝试在命令控制台中以难的方式部署和运行Tomcat。