Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何告诉tomcat在eclipse中运行时使用外部库_Java_Eclipse_Tomcat_Servlets - Fatal编程技术网

Java 如何告诉tomcat在eclipse中运行时使用外部库

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的默认配置; 从(从

如何在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()下添加了简单的行
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,那么它的临时文件在哪里?