【问题标题】:External web app location does not create directory under webapps in Tomcat外部 web 应用程序位置不会在 Tomcat 中的 webapps 下创建目录
【发布时间】:2013-08-12 20:40:50
【问题描述】:

到目前为止,我们一直在使用 Tomcat 6,我们在 $CATALINA_HOME/conf/Catalina/localhost 下的 context.xml 文件中指定要部署的战争为 application1-context.xml,application2-context.xml。等等

示例 application1-context.xml

<Context path="/myapps/app1" docBase="C:\warfiles\appOne.war"
        debug="0" privileged="true">
            <Loader className="MyCustomApplicationLoader"/>
            <Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>         
</Context>

这将在 $CATALINA_HOME/webapps 文件夹下创建一个文件夹 myapps#app1。

但是自从迁移到 Tomcat7 之后,这种情况就不再发生了。 除非我在 tomcat appBase 目录下直接有战争文件“appone.war”,即 $CATALINA_HOME/webapps,否则我的战争不会被解压缩到 $CATALINA_HOME/webapps 目录下的文件夹中。

我已阅读此 apache 错误报告: https://issues.apache.org/bugzilla/show_bug.cgi?id=51294&quot%3B&gt%3B51294&lt%3B/a&gt%3B

问题: 有什么办法可以在 tomcat 7 中强制这种行为?

【问题讨论】:

  • C:\warfiles\appOne.war 是文件还是目录?
  • @PeterRader C:\warfiles\appOne.war 是一个普通的 JEE 战争文件。

标签: tomcat7


【解决方案1】:

听起来这个问题是fixed in Tomcat version 7.0.48,在撰写本文时,它仍在开发中。它也被添加到version 8

编辑:我已经设法解决了这个问题,而无需等待/使用 7.0.48。在您的 context.xml 文件中添加 unpackWAR="false" 并指定 virtualClasspath 属性,使其指向您的 target\classes 文件夹,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Context docBase="(path to .war file)">
    <Loader className="org.apache.catalina.loader.VirtualWebappLoader"
            virtualClasspath="(path to folder contain .class files, 
                              usually {project folder}\target\classes\)"
            searchExternalFirst="true"
            unpackWAR="false" />
</Context>
  • searchExternalFirst 表示类加载器会先查看您的 virtualClasspath 文件夹,然后再查看 WEB-INF 目录。
  • unpackWAR 设置为 false,因为您的 war 文件已经在 /target/classes 文件夹中展开,因此 Tomcat 也不需要这样做。

希望这对你也有帮助。

【讨论】:

  • 是的,我已经想到了这一点,但对于寻找答案的人来说,这是一个很好的回应。
【解决方案2】:

试试&lt;Context unpackWARs="true" ...

conf/catalina/... 下的文件不应手动更改。如果 webapp 首次启动时不存在,它们会自动创建。您永远不应该更改这些文件,而是删除它们并让它们从 tomcat 本身创建新的(它们由战争的 /META-INF/context.xml-File 组成,如果存在)。

【讨论】:

  • 我认为 unpackWARS 上下文属性仅适用于 webapps 文件夹下的 war 文件。如果 war 文件位于 CATALINA_HOME\webapps 文件夹之外,则该属性无效。而且我不确定不手动创建上下文文件。许多使用 tomcat 6 的应用程序都是这样做的。
  • 目录没有硬编码,应该没有区别。您可以创建 context.xml,但复制到 conf/catalina 只能由 tomcat 自己完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
相关资源
最近更新 更多