外部Web应用程序位置不会在Tomcat中的webapps下创建目录

时间:2013-08-12 20:40:51

标签: tomcat7

到目前为止,我们一直在使用Tomcat 6,我们在$ CATALINA_HOME / conf / Catalina / localhost下的context.xml文件中指定要部署的war作为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目录下直接使用war文件“appone.war”,即$ CATALINA_HOME / webapps,否则我的war不会被解压缩到$ 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中强制执行这种行为吗?

2 个答案:

答案 0 :(得分: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表示在查看WEB-INF目录之前,类加载器将在virtualClasspath文件夹中查找。
  • unpackWAR设置为false,因为您的war文件已经在/ target / classes文件夹中展开,因此Tomcat也不需要这样做。

希望这对你也有帮助。

答案 1 :(得分:0)

尝试<Context unpackWARs="true" ...

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