我正在运行Eclipse Indigo 3.7,Tomcat7,Spring MVC framework 2.5.6。
在我的一个应用程序项目中,我有以下错误消息:
nov. 22, 2011 9:06:30 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
Infos: validateJarFile(/home/pc/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/SpringMVC/WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
我已经读过像我这样的web应用程序项目,servlet-api.jar不应该包含在项目构建路径中;是对的吗?我应该把servlet-api.jar放在哪里,因为我的应用程序中有servlet?
我还想问:
我经常阅读将jar文件放在WEB-INF / lib文件夹中,有时我正在阅读将它们作为外部Jar包含在项目构建路径中,有时候我正在阅读同时执行这两个操作。< / p>
例如,我读过: -servlet-api.jar已经在Tomcat7 / lib目录中,但也需要包含在项目路径中; - 用于java的MySQL JDBC驱动程序必须包含在项目路径中,并且还要复制到WEB-INF / lib和Tomcat7 / lib目录中。
任何人都可以告诉我这个问题并帮助我真正了解如何在日食项目中管理«Jar Librairies»吗?
非常感谢。
答案 0 :(得分:3)
我已经读过像我这样的web应用程序项目,servlet-api.jar不应该包含在项目构建路径中;是对的吗?我应该把servlet-api.jar放在哪里,因为我的应用程序中有servlet?
Servlet容器(例如Tomcat)在类路径中具有servlet JAR。所以你的应用程序WAR应该排除它。
我经常阅读将jar文件放在WEB-INF / lib文件夹中,有时我正在阅读将它们作为外部Jar包含在项目构建路径中,有时候我正在阅读Sametime中。
您的应用程序引用的JAR通常放在
WEB-INF/lib
中。例外是像servlet.jar
这样的事情。您将在编译时时需要它们,但必须将它们从生成的WAR中排除。
我读过:-servlet-api.jar已经在Tomcat7 / lib目录中,但也需要包含在项目路径中; - 用于java的MySQL JDBC驱动程序必须包含在项目路径中,并且还要复制到WEB-INF / lib和Tomcat7 / lib目录中。
这是正确的。为了放大上一个问题的答案,你需要这些JAR是编译时间,以便你可以编译。一些JAR - 比如
servlet-api
由servlet容器提供。
有人能告诉我这个问题并帮助我真正了解如何在日食项目中管理«Jar Librairies»吗?
Maven等构建工具可以帮助管理项目的外部库依赖关系,并在需要 这些依赖项时进行细粒度控制(仅编译时,编译和测试,运行时等)。
答案 1 :(得分:2)
tomcat lib目录是tomcat内部使用的库的公共位置,可供部署在该tomcat实例上的所有应用程序使用。您可能希望在这里找到servlet-api.jar作为使tomcat成为servlet引擎的所有部分。您可以在此处找到有关tomcat类加载器内容的更详细说明:
http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html
项目的/WEB-INF/lib
文件夹包含仅对您的Web应用程序是私有的库,而对tomcat上的任何其他已部署的应用程序都不可见。在这里,您可以使用用于构建Web应用程序的技术的库,例如Spring,JUnit和Hibernate。
<强>更新强>
在使用Eclipse管理库方面,我强烈建议您使用构建系统(如果您还没有),例如ANT或Maven。
使用Maven,您可以使用web-app原型在Eclipse中设置项目,并且可以通过项目POM文件相当简单地管理项目的库依赖项。
在手动管理WEB-INF/lib
目录时,ANT可能会涉及更多“繁重”,但您也可以使用Apache Ivy来帮助解决这个问题。
快速谷歌搜索将揭示许多关于使用这些工具的教程。
希望这有帮助。