在WAR-File中定义Servlet上下文
如何在给出我的WAR-File时告诉Tomcat使用特定的上下文路径?
示例:我有一个由maven build创建的war文件,结果文件的名称相当长。 所以我不希望tomcat管理器应用程序使用war的文件名作为上下文。
在META-INF中提供context.xml不会产生所需的结果
我还在Context
的path
属性的文档中找到了这个:
除非在server.xml中静态定义Context,否则不得设置此字段的值,因为它将从用于.xml上下文文件或docBase的文件名中推断出来。
所以它似乎不是告诉应用程序服务器应该是什么路径的正确方法。
还有什么提示吗?
Context Container的文档中有两个重点:
- 在
$CATALINA_BASE/conf/[enginename]/[hostname]/
目录中的单个文件(扩展名为“.xml”)中。 文件名 (减去.xml扩展名) 将用作上下文路径 。 可以使用#来定义多级上下文路径,例如foo#bar.xml,用于/ foo / bar的上下文路径。 可以使用名为ROOT.xml的文件来定义默认Web应用程序。- 仅当
$CATALINA_BASE/conf/[enginename]/[hostname]/
的应用程序不存在上下文文件时,才在应用程序文件内的/META-INF/context.xml
中的单个文件中。 如果Web应用程序打包为WAR,则/META-INF/context.xml
将复制到$CATALINA_BASE/conf/[enginename]/[hostname]/
命名以匹配应用程序的上下文路径 。 一旦该文件存在,如果在主机的appBase中放置了带有较新的/META-INF/context.xml
的新WAR,则不会替换它。
因此,当您捆绑META-INF/context.xml
,文件将重命名为WAR的名称,并且此名称将成为上下文路径,而不管Context
元素中定义的任何path
。
我在这看到两个选项:
-
将生成的war的名称设置为较短的名称(我建议使用
over
,不推荐使用AFAIK):... mycontext ... -
或者使用
maven-tomcat-plugin
进行部署,并在插件配置中设置上下文路径:... ... ...... ...org.codehaus.mojo tomcat-maven-plugin 1.0-SNAPSHOT /mycontext
我找到了一个简单的解决方案来保存war文件名并选择context-path。
你只需要在Host的appBase
之外部署你的战争,并在appBase
目录中创建一个链接。
防爆。 :
ln -sf ${CATALINA_HOME}/wars/myapp-0.0.8-SNAPSHOT.war ${CATALINA_HOME}/webapps/myapp.war
埃克尔
您可以设置META-INF/context.xml
的
元素的path
属性。
或者,您可以配置maven以使用自定义名称创建war工件:
maven-war-plugin 2.0 yourCustomWarName ........
在您的项目中有一个文件夹META-INF,在该文件夹中有一个context.xml文件。