java - 为什么我们不应该将 tomcat 库放在我们的 appln 库中

标签 java jsp tomcat servlets tomcat7

我有一个在 Tomcat 7 中运行的 Web 应用程序。 当我将 tomcat 默认库(jsp-api.jar、servlet-api.jar 等)放在我的应用程序/WebContent/WEB-INF/lib 中时,它会抛出异常:java.lang.IllegalStateException: No org ServletContext 中设置的.apache.tomcat.InstanceManager

当我从我的库中删除这些 jar 并在 build.xml 中设置 tomcat 库时,它工作正常。谁能向我解释为什么会这样? 为什么我不能在我的 lib 文件夹中使用 tomcat 库?

最佳答案

您基本上不想将 Servlet、JSP、EL 或任何与容器相关的 jar 添加到您的应用程序 WEB-INF/lib 文件夹中。

这些库将由容器提供。如果您显式添加它们,部署的应用程序将出现问题(即两个相同的 jar 到相同的类路径)。

编辑:如果您需要这些 jar 来编译代码,那么您可以将它们添加到您的类路径中 - 它们不需要驻留在您的应用程序的 WEB-INF/lib 中。

即如果您使用的是 Eclipse,则可以添加“用户库”:Properties -> Java Build Path -> Libraries -> Add Library 这将定义所有与容器相关的库;您还可以添加外部 JAR 并从您的 tomcat7 目录中选择它们。

编辑 2:正如 BalusC 所指出的:“您可以将其作为目标运行时进行引用,然后 Eclipse 将发挥作用。另请参阅我对问题发表评论的相关链接。无需摆弄与用户库。”

关于java - 为什么我们不应该将 tomcat 库放在我们的 appln 库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064039/

相关文章:

java - 为了在 Wicket 网页中正确调用 getString(String key) 函数,需要满足哪些要求?

eclipse - Eclipse 中的部署目录在哪里?

java - 如果需要更多时间,则终止 threadexecutor 中的任务

java - 等待来自 swing 组件的输入

java - 将 var javascript 转换为 java 变量

java - 在 Spring 表单中显示 ArrayList

spring-boot - 在 tomcat 上部署 spring boot 应用程序,我应该替换我所有应用程序的 url

tomcat - 如何更改 Apache Tomcat Web 服务器端口号

tomcat - tomcat 中的 HttpSession

java - 配置类 - Guice 的最佳实践