如何在Tomcat的META-INF/context.xml中指定路径

Dav*_*ick 13 tomcat tomcat7

我正在使用Tomcat 7,并希望在war文件本身中设置war文件的上下文根,并让Tomcat自动部署并选择此路径.我以为我找到了通过在包含的war的META-INF目录中放置context.xml来实现它的方法.

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/somepath/myapp"/>
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用,我认为它是由http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/startup/SetContextPropertiesRule.html加载的,它声明它加载除了路径!

我知道我可以将战争命名为#myapp.war并将它取出来但我也会部署到weblogic,这对于这样的名字并不满意.

我可以使用一些设置让路径从上面的context.xml开始工作吗?

谢谢大卫

Pid*_*ter 14

path除非路径是在硬编码Context中指定的,否则将忽略Context 属性server.xml,强烈建议不要使用多级路径.

war文件的名称或Context xml文件的名称将tomcat/conf/Catalina/hostname成为path已部署应用程序的名称.

在您的情况下,上述两个中的后者是解决方案,只需确保将.war文件放在指定appBase的主机之外,或者您将部署应用程序两次.

在: conf/Catalina/localhost/myapp#path.xml

<?xml version="1.0"?>
<Context docBase="/some/path/to/myapp.war">
</Context>
Run Code Online (Sandbox Code Playgroud)

  • 我同意你@zakmck它是一个坏主意,它是由war文件名确定的上下文路径,而不是META-INF/context.xml文件中的属性"path".令人困惑的是我花了很多时间在[Tomcat文档](https://tomcat.apache.org/tomcat-8.0-doc/config/context.html#Common_Attributes)中找到这句话:"这个属性(路径)必须仅在server.xml中静态定义Context时使用..." (5认同)
  • 这对我来说也解决了同样的问题,谢谢你.但是,我认为忽略path属性是Tomcat的缺陷.文档甚至说相反.更糟糕的是,Tomcat 7.0.22似乎忽略了docBase,因此唯一的方法是对context.xml和.war使用这些愚蠢的散列名称.#叹... (2认同)
  • 我没有反对哈希,我认为我不得不通过文件名而不是参数路径和docBase来确定上下文路径.例如,这种方式在实践中我不能部署任何名为myapp-v1.2.3beta.war的文件.好的,我可以设置一个别名,但另一种方式会更好. (2认同)