[英]context root configuration within WAR file in Tomcat 7
如何配置Tomcat 7以允许WAR文件指定其自己的上下文根,而不是基于WAR文件名? 示例:我有A-1.0.0.war和B-1.0.0.war,并且我想将它们都部署到同一个Tomcat实例。 部署完成后,我想将浏览器指向localhost:8080 / portal并查看A-1.0.0.war中的内容,并且我想将一个REST请求卷曲到实现了它的localhost:8080 / rest / v1 / helloworld上来自B-1.0.0.war。
我四处寻找并尝试配置不同的方法,但是这些都没有产生我上面想要的方案。 另外,我发现Tomcat文档太稀疏,无法完全理解。 我读了:
消化完这些之后,在%CATALINA_HOME%/ conf / server.xml中,我有以下单个Host条目:
<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文件”按钮,但是我没有指定“位于服务器上的Deploy目录或WAR文件”下的任何字段(因为我希望这些字段可以从WAR本身,而不是让别人指定它)。 当我打开webapps目录时,会看到此清单。 我希望看到的是portal/
而不是A-1.0.0/
目录:
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的人员可以清楚地知道他们正在部署什么。 在每个构建/发布周期中,我希望他们取消部署旧战争并部署新战争。 附带说明-这是我第一次尝试将应用程序部署为战争,并且我可能错过了一些最佳实践,因此,如果这不是一个好方法,请务必纠正我。
我个人不使用manager
应用程序来安装应用程序,而是手动配置Tomcat,因此无法说出如何使用manager
应用程序进行操作,但是这是您可以独立于war文件名控制应用程序上下文路径的方法。
首先, 不建议将<Context>
放在server.xml
(请参阅Tomcat文档 )。 您应该在.../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
。
如果您的Web应用程序使用Servlet初始化参数(通过使用<Parameter>
<Context>
<Parameter>
元素内的<Parameter>
元素进行配置),则您甚至可以在单个Tomcat实例中,在不同的上下文路径下,多次安装同一个webapp(war文件),每个上下文路径的配置都不同,只需在.../conf/Catalina/localhost
文件夹中创建多个XML文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.