Java 如何告诉tomcat在eclipse中运行时使用外部库
如何在tomcat中添加定制的jar,以便servlet可以使用其功能 澄清一下:我创建了一个单独的java项目,名为kos.lib.jar,作为一个jar导出,有一个类TimeUtil,public方法now()返回一个字符串。作为一个独立的组件正常工作。现在我想使用servlet的强大功能。因此: EclipseIndigo>New>Project>DynamicWebProject>ApacheTomcatV6.0,动态Web版本2.5,ApacheTomcatV6.0的默认配置; 从(从第5节开始)复制Filecounter,然后rmb>servlet1.java>run>onserver>tomcat正确显示servlet 现在,我添加了servlet1.java,在public void init()下添加了简单的行Java 如何告诉tomcat在eclipse中运行时使用外部库,java,eclipse,tomcat,servlets,Java,Eclipse,Tomcat,Servlets,如何在tomcat中添加定制的jar,以便servlet可以使用其功能 澄清一下:我创建了一个单独的java项目,名为kos.lib.jar,作为一个jar导出,有一个类TimeUtil,public方法now()返回一个字符串。作为一个独立的组件正常工作。现在我想使用servlet的强大功能。因此: EclipseIndigo>New>Project>DynamicWebProject>ApacheTomcatV6.0,动态Web版本2.5,ApacheTomcatV6.0的默认配置; 从(从
TimeUtil.Now()代码>,所以只是一个表达式。当我使用TimeUtil.n时,Eclipse会自动完成,就类路径而言,Eclipse很高兴
但是,运行servlet(runas>runonserver)会得到一个Tomcat500:
java.lang.NoClassDefFoundError: kos/lib/time/TimeUtil
kos.servlets.servlet1.init(servlet1.java:28)
是的,这个表达式确实在源代码的第28行。但如何修复呢?
在何处添加我的库,以便tomcat从eclipse运行时接受TimeUtil.now()
?我尝试了很多,将它添加到调试配置类路径源代码中,在WEB-INF内部,在WebContent/WEB-INF内部,始终是相同的500。然后我对表达式进行了注释,tomcat再次很好地运行了页面。然后添加了TimeUtil.now()
到FileDao getcount()方法,相同
有一些相关的问题,但都是关于分离的eclipse和tomcat(通过用户代理端口),我只想从eclipse中使用它。在eclipse和tomcat分离的情况下,我只想将jar放在tomcats LIB的旁边,如“ServletAPI.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
在JavaWeb应用程序中,第三方库必须位于web-INF/lib目录中。如果没有这样的目录,只需创建它,Tomcat(或另一个Java应用服务器)将自动处理它,以使用其中的JAR作为应用程序构建路径的一部分
简而言之,在WEB-INF中创建一个文件夹库,并将外部jar放在那里。将jar放进去
WebContent/WEB-INF/lib
文件夹而不是
WebContent/WEB-INF
正如tomcat文档所说:
/WEB-INF/lib/-此目录包含包含Java的JAR文件
应用程序所需的类文件(和相关资源),
例如第三方类库或JDBC驱动程序
阅读以下内容了解更多信息:我解决了它。
在我的例子中,eclipse下的tomcat指向一个特定的tomcat
C:\dev\webserver\tomcat\6.0.32\lib
唯一需要做的就是把自定义库放在那里。
(如果我停止服务器,重命名jar,然后从servlet重新启动,我将获得noclassdeffound运行时)
可以在运行时配置>类路径中检查web服务器的确切路径。
要获得更多乐趣,请在“source”中设置自定义库的源代码
(好处:现在,即使代码到达自定义源代码,也可以设置断点!)
这与web inf答案完全无关
无论如何,感谢大家的尝试。我只想知道,这并不影响Tomcat,这是所有应用程序服务器的一条通用规则。@Luiggmendoza是的,但这个问题与Tomcat有关,所以我已经讨论过了,并相应地添加了参考资料。谢谢你的建议。另外,请注意Tomcat是第7版(第4版已经快10年了)。同时更新您的资源。我在WebContent/WEB-INF下创建了一个文件夹lib,这样lib就位于文件夹类和文件WEB.xml的旁边,然后我将kos.lib.jar复制到C:\dev\Java\eclipse\workspace\WEB examples tomcat 6\WebContent\WEB-INF\lib,同样的错误。我误解你的建议了吗?请帮忙。eclipse中的运行时配置现在需要一些设置吗?您需要将jar文件放在tomcat/webapp/yourapplication/WEB-INF/lib文件夹中。我这样做了,请参见下面。严重:在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)为servlet servlet1 java.lang.ClassNotFoundException:kos.lib.time.TimeUtil分配异常还需要什么?@KosPetoussis清理应用程序,重建并重新部署它。它应该会起作用。如果没有,请编辑您的问题,并张贴错误的堆栈跟踪。我已清理。Stacktrace现在有问题了。@KosPetoussis这个错误非常具有描述性。您放置了jar,但看起来您的TimeUtil
类不在包kos.lib.time
中。确保您的类在那里,或者从代码中的正确包导入它。顺便说一下,如果您从Tomcat中删除web应用程序和临时文件,重新启动Tomcat,然后重新部署您的应用程序,这将是一件好事。如果timeutil不在包中,eclipse将给出编译器错误,更不用说自动完成了。这是一个运行时错误。我从eclipse启动tomcat,那么它的临时文件在哪里?