繁体   English   中英

Tomcat 7中WAR文件中的上下文根配置

[英]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文档太稀疏,无法完全理解。 我读了:

  1. Tomcat 7 HTML管理器Howto
  2. Tomcat主机配置
  3. 部署战争文件到Tomcat的与-A-不同路径

消化完这些之后,在%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 &quot;%r&quot; %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文件。

因此,步骤如下:

  1. 将您的war文件复制到系统上的任何位置,但要复制到Tomcat文件夹之外的位置,例如/mywars/A-1.0.0.war

  2. 创建文件.../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

  3. 如果需要,请重新启动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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM