我在哪里将一个servlet jar文件放在Tomcat 6中?

时间:2011-03-01 20:44:07

标签: tomcat servlets classpath tomcat6

我在jar文件中有一个servlet,我想将其部署到我的Tomcat 6实例。我做了以下事情:

  1. 在我的root web.xml中添加了一个servlet声明
  2. 在根web.xml
  3. 中添加了servlet-mapping
  4. 将我的jar文件放在/ tomcat / lib
  5. 重新启动了我的服务器
  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

2 个答案:

答案 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。