我有一个在 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/