如何在tomcat中添加自定义jar,以便servlet可以使用其功能。
澄清一下:我创建了一个名为kos.lib.jar的独立java项目,导出为jar,具有类TimeUtil,public方法now()返回一个String。作为独立工作正常。现在我想从servlet中使用它的强大功能。所以:
eclipse indigo>新>项目>动态Web项目> Apache tomcat v6.0,动态网络版2.5,默认配置为apache tomcat v6.0; 复制了Filecounter,来自http://www.vogella.com/articles/EclipseWTP/article.html(从第5节开始),然后是rmb> servlet1.java>运行>在服务器上> tomcat正确显示了servlet。
现在我在public void init()下添加servlet1.java简单行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放在像'servlet-api.jar'这样的tomcats libs旁边,但是在这种情况下没有效果。
我明白了
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
答案 0 :(得分:1)
在Java Web应用程序中,第三方库必须进入 WEB-INF / lib 目录。如果没有这样的目录,只需创建它,Tomcat(或其他Java Application Server)将自动处理它以使用其中的jar作为应用程序构建路径的一部分。
简而言之,在 WEB-INF 中创建一个文件夹 lib ,然后将外部jar放在那里。
答案 1 :(得分:0)
把你的罐子放进去
的WebContent / WEB-INF / lib中
文件夹而不是
的WebContent / WEB-INF
正如tomcat文档所说:
/ WEB-INF / lib / - 此目录包含包含Java的JAR文件 应用程序所需的类文件(和相关资源), 例如第三方类库或JDBC驱动程序。
请阅读以下内容:http://tomcat.apache.org/tomcat-4.1-doc/appdev/deployment.html
答案 2 :(得分:0)
我解决了。 事实证明,在我的情况下,tomcat-under-eclipse指向一个特定的tomcat C:\ dev的\ Web服务器\ tomcat的\ 6.0.32 \ lib中 并且唯一需要的是将自定义lib放在那里。 (如果我停止服务器,重命名jar,并从servlet重新启动,我得到noclassdeffound运行时) 可以在运行时配置中检查Web服务器的确切路径>类路径。 为了更多的乐趣,在'source'中设置自定义lib的源代码 (奖励:现在即使代码到达您的自定义源,您也可以设置断点!)
它与web-inf答案完全无关。
无论如何,谢谢你们的尝试。