簡體   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