为什么我们不应该将 tomcat 库放在我们的 appln 库中
我有一个在 Tomcat 7 中运行的 Web 应用程序。 当我将 tomcat 默认库(jsp-api.jar、servlet-api.jar 等)放在 application/WebContent/WEB-INF/lib 中时,它会抛出异常: java.lang.IllegalStateException: No org ServletContext 中设置的 .apache.tomcat.InstanceManager
当我从 lib 中删除这些 jar 并在 build.xml 中设置 tomcat lib 时,它工作正常。谁能向我解释为什么会发生这种情况? 为什么我不能使用 lib 文件夹中的 tomcat 库?
I have a web application running in Tomcat 7.
When I place the tomcat default libraries (jsp-api.jar,servlet-api.jar etc.) in my application/WebContent/WEB-INF/lib, it throws an exception : java.lang.IllegalStateException: No org.apache.tomcat.InstanceManager set in ServletContext
When I delete these jars from my lib and and set tomcat lib in build.xml, it works fine. Can anyone explain to me why this happens?
Why can't I use tomcat libraries in my lib folder?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您基本上不想将Servlet、JSP、EL 或任何与容器相关的jar 添加到应用程序的WEB-INF/lib 文件夹中。
这些库由容器提供。如果显式添加它们,部署的应用程序将会出现问题(即两个相同的 jar 放入同一类路径中)。
编辑:如果您需要这些 jar 来编译代码,则可以将它们添加到类路径中 - 它们不需要驻留在应用程序的 WEB-INF/lib 中。
即,如果您使用 Eclipse,您可以添加“用户库”:
Properties -> Java 构建路径 ->图书馆 ->添加库
,它将定义所有与容器相关的库;您还可以添加外部 JAR
,然后从 tomcat7 目录中选择它们。编辑2:正如 BalusC 指出的那样:“您可以将其引用为目标运行时,然后 Eclipse 就会发挥作用。另请参阅我对问题评论的相关链接。无需摆弄用户库”。
You basically don't want to add Servlet, JSP, EL or any container-related jars into your application WEB-INF/lib folder.
These libraries are to be provided by the container. If you add them explicitly, the deployed application will have a problem (i.e. two same jars into the same classpath).
EDIT: If you need these jars in order for the code to compile than you can add them to your classpath - they don't need to reside in your application's WEB-INF/lib.
I.e. if you're using Eclipse you can add 'user library':
Properties -> Java Build Path -> Libraries -> Add Library
which will define all container-related libs; you can alsoAdd External JARs
and just select those from your tomcat7 directory.EDIT 2: As BalusC pointed: "you can just reference it as target runtime, then Eclipse will do the magic. See also the related link which I commented on the question. No need to fiddle with user libraries."
您不应该在您的应用程序中捆绑 j2eestand jar。它们由应用程序服务器提供。如果您希望 jar 可用于编译,请在构建应用程序时将其放入编译路径中。但不要将它们捆绑在应用程序中。
所有 IDE 都提供在捆绑应用程序时排除 jar 的选项。
You should not bundle j2ee stand jars in your application. They are provided by the application server. In case you want the jars to be available for compilation, put then in your compilation path while building the application. But do not bundle them in the application.
All IDE's provide opation to exculde jars while bundling the application.