【问题标题】:Why shouldn't we place tomcat library in our appln libraries为什么我们不应该将tomcat库放在我们的appln库中
【发布时间】:2011-11-09 11:02:08
【问题描述】:

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

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

【问题讨论】:

标签: java jsp tomcat servlets tomcat7


【解决方案1】:

您基本上不想将 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 将发挥作用。另请参阅我对问题发表评论的相关链接。无需摆弄与用户库。”

【讨论】:

  • 感谢您的回复。出于编译目的,我不得不添加它们。没有这些 jar,我无法编译。
  • 您可以添加与 WEB-INF/lib 不同位置的 jars。 IE。如果您使用的是 Eclipse,您可以添加定义所有与容器相关的库的“用户库”,或者您可以添加“外部 jars”并从您的 tomcat7 目录中选择它们。
  • 或者只是将它作为目标运行时引用,那么 Eclipse 就会发挥作用。另请参阅我对该问题发表评论的相关链接。无需摆弄用户库。
  • @freepublicview 如果您对任何答案感到满意,请随时接受,因此问题可以标记为已回答。
【解决方案2】:

你不应该在你的应用程序中捆绑 j2ee stand jars。它们由应用程序服务器提供。如果您希望 jar 可用于编译,请在构建应用程序时将 then 放入您的编译路径中。但不要将它们捆绑在应用程序中。

所有 IDE 都提供在捆绑应用程序时排除 jar 的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多