如何在 tomcat 中添加定制的 jar,以便 servlet 可以使用它的功能。
澄清一下:我创建了一个名为 kos.lib.jar 的单独 Java 项目,导出为一个 jar,有一个 TimeUtil 类,公共方法 now() 返回一个字符串。作为一个独立的工作正常。现在我想从一个 servlet 中使用它的力量。所以:
eclipse indigo > New > Project > Dynamic Web Project > Apache tomcat v6.0,dynamic web version 2.5,默认配置为apache tomcat v6.0;从http://www.vogella.com/articles/EclipseWTP/article.html (从第 5 节开始)复制 Filecounter,然后 rmb > servlet1.java > run> on server> tomcat 正确显示 servlet。
现在我在 servlet1.java 的 public void init() 下添加简单的一行TimeUtil.now();
,所以只是一个表达式。当我使用 TimeUtil.n 时,Eclipse 会自动完成,就类路径而言,Eclipse 很高兴。
运行 servlet(运行方式 > 在服务器上运行)但是会给出一个 tomcat 500:
java.lang.NoClassDefFoundError: kos/lib/time/TimeUtil
kos.servlets.servlet1.init(servlet1.java:28)
是的,确实表达式在第 28 行的源代码中。但是如何修复它呢?在哪里添加我的 lib 以便 tomcat-run-from-eclipse 接受TimeUtil.now()
?我尝试了很多,将它添加到调试配置类路径源中,在WEB-INF里面,在WebContent/WEB-INF里面,总是一样的500。然后我评论了这个表达式,tomcat再次运行页面正常。然后添加TimeUtil.now();
到 FileDao 的 getcount() 方法中,同样是 500。
有相关的问题,但那些是关于分离的 eclipse 和 tomcat(通过用户代理端口),我只想从 eclipse 中使用它。随着 eclipse 和 tomcat 的分离,我只是将 jar 放在 tomcats libs 旁边,例如“servlet-api.jar”,但这在这种情况下没有效果。
我明白了
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet.init() for servlet servlet1 threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
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.NoClassDefFoundError: kos/lib/time/TimeUtil
kos.servlets.servlet1.init(servlet1.java:28)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
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: kos.lib.time.TimeUtil
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
kos.servlets.servlet1.init(servlet1.java:28)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
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)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
--------------------------------------------------------------------------------
Apache Tomcat/6.0.26