如何配置Tomcat 7以允许WAR文件指定自己的上下文根,而不是基于WAR文件名?示例:我有A-1.0.0.war和B-1.0.0.war,我想将它们都部署到同一个Tomcat实例。部署完成后,我想将浏览器指向localhost:8080 / portal并查看A-1.0.0.war中的内容,我想向localhost:8080 / rest / v1 / helloworld卷曲休息请求,其实现来自来自B-1.0.0.war。
我已经四处寻找并试图配置不同的方法,但这些都没有产生我上面所希望的场景。此外,我发现Tomcat文档有点太稀疏,无法完全理解。我读过:
在消化它们之后,在%CATALINA_HOME%/ conf / server.xml中我有这个单独的主机条目:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
deployXML="true" copyXML="true" >
<Context path="/portal" docBase="/www/" reloadable="true" swallowOutput="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Logger className="org.apache.catalina.logger.FileLogger" prefix="www-sample-com-log." suffix=".txt" timestamp="true"/>
</Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
这是来自其中一个WAR文件的A.war / META-INF / context.xml的完整内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/portal" docBase="ROOT/portal" />
当我通过管理控制台部署到Tomcat时,我使用“WAR文件部署”按钮,但我没有指定“部署目录或位于服务器上的WAR文件”下的任何字段(因为我想要这些来自WAR本身,而不是让某人指定它)。当我打开webapps目录时,我看到了这个列表。我希望看到的不是A-1.0.0/
目录,而是portal/
:
A-1.0.0/
B-1.0.0/
docs/
examples/
host-manager/
manager/
ROOT/
sample/
A-1.0.0.war
B-1.0.0.war
sample.war
如果它有帮助,这里是我的场景的一些背景故事。我的目标是将捆绑在单个.jar中的应用程序移动到两个.war文件中。目前,它是一个maven项目,它生成一个jar作为包含Spring MVC和JSP应用程序的构建工件。我的客户端正在使用java在命令行上启动应用程序。我想要的是在我们的开发服务器上安装Tomcat 7,有人可以通过Tomcat的管理控制台部署WAR文件。我还想在WAR的文件名中加上一个版本号,以便处理WAR的人员清楚他们正在部署什么。在每个构建/发布周期中,我希望它们取消部署旧战争并部署新战争。作为旁注 - 这是我第一次尝试将应用程序部署为战争,我可能已经错过了这样做的最佳实践,所以如果这不是一个好方法,请善意纠正我。
答案 0 :(得分:0)
我个人不要使用manager
应用程序来安装应用程序,我手动配置Tomcat,所以我不能说如何使用manager
应用程序来实现它,但是这就是你的方式可以独立于war文件名控制应用程序上下文路径。
首先,不建议将<Context>
置于server.xml
内(请参阅Tomcat documentation)。您应该在.../conf/Catalina/localhost
文件夹中创建一个上下文XML文件。
所以,以下是步骤:
将war文件复制到系统的任何位置,但在Tomcat文件夹之外,例如/mywars/A-1.0.0.war
。
创建文件.../conf/Catalina/localhost/portal.xml
:
<Context docBase="/mywars/A-1.0.0.war" reloadable="true" swallowOutput="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="www-sample-com-log." suffix=".txt" timestamp="true"/>
</Context>
请注意,它没有path
属性。上下文路径由文件名确定,即/portal
。
如果需要,请重新启动Tomcat。
我经常在进行更改之前关闭Tomcat,因此多次更改不会导致多次重新加载。
这样做时META-INF/context.xml
不会被使用,即使存在也是如此。
如果您的webapp使用通过<Parameter>
元素内的<Context>
元素配置的Servlet Init Parameters,您甚至可以在单个Tomcat实例中多次安装相同的webapp(war文件),通过在.../conf/Catalina/localhost
文件夹中创建多个XML文件,每个配置不同的上下文路径。