我在Tomcat 7中运行了一个Web应用程序。
当我在我的应用程序/ WebContent / WEB-INF / lib中放置tomcat默认库(jsp-api.jar,servlet-api.jar等)时,会引发异常:java.lang.IllegalStateException: No org.apache.tomcat.InstanceManager set in ServletContext
当我从lib中删除这些jar并在build.xml中设置tomcat lib时,它可以正常工作。任何人都可以向我解释为什么会这样吗? 为什么我不能在我的lib文件夹中使用tomcat库?
答案 0 :(得分:9)
您基本上不希望将Servlet,JSP,EL或任何与容器相关的jar添加到您的应用程序WEB-INF / lib文件夹中。
这些库由容器提供。如果明确添加它们,则部署的应用程序将出现问题(即两个相同的jar进入同一个类路径)。
编辑:如果您需要这些jar来编译代码,那么您可以将它们添加到类路径中 - 它们不需要驻留在应用程序的WEB-INF / lib中。
即。如果您正在使用Eclipse,则可以添加“用户库”:Properties -> Java Build Path -> Libraries -> Add Library
,它将定义所有与容器相关的库;您也可以Add External JARs
并从tomcat7目录中选择那些。
编辑2 :正如BalusC所指出的那样:“你可以将它作为目标运行时引用,然后Eclipse就会发挥魔力。另请参阅我在这个问题上评论的相关链接。无需小提琴用户库。“
答案 1 :(得分:1)
您不应在应用程序中捆绑j2ee stand jars。它们由应用程序服务器提供。如果您希望jar可用于编译,请在构建应用程序时将其放入编译路径中。但是不要将它们捆绑在应用程序中。
所有IDE都提供了在捆绑应用程序时驱逐jar的操作。