1. 程式人生 > >在linux下配置tomcat的虛擬路徑

在linux下配置tomcat的虛擬路徑

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="demo-mvc"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>

遇到的問題,上面的配置會讓定時器執行兩次,其實是Host這個配置載入了webapps下所有的目錄  而Contextpath又載入了demo-mvc
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false">
        <Context path="" docBase="demo-mvc"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>

上面這個配置會在啟動的時候解壓demo-mvc.war包,但是第二次啟動的時候依然會出現執行demo-mvc兩次的問題。

如果刪除demo-mvc保留demo-mvc.war的話會啟動的時候虛擬路徑無效,遠端釋出正常

如果刪除demo-mvc.war保留demo-mvc的話會啟動的時候啟動兩個demo-mvc的例項,遠端釋出會覆蓋/demo-mvc而不會覆蓋/

因為提倡tomcat只作為app容器且只有一個app例項 因此最後使用nginx來做這個事兒

最後的折中方法
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="/Users/bao/data/workspace/mvc-demo/target/mvc-demo"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>

每次mvn clean package後 重啟Tomcat

2016年4月25日21:35:49

linux上的例子

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false">
            <Context path="" docBase="haizhan"/>

</Host>

這樣的話,webapps就是部署路徑,而haizhan就是裡邊的一個工程,是指向

注意不能寫成appBase="webapps/haizhan"而docBase不寫 那樣應該應該在webapps下有個ROOT才可以 訪問

我喜歡將war檔案放在tomcat下的webapps路徑下然後,配置成自動部署和虛擬路徑

虛擬路徑在linux下的例子

 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="xianjian"/>
        <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve" directory="logs"  
               prefix="access." suffix=".log" pattern="common" resolveHosts="false"/>

在tomcat的webapps檔名下,放入xianjian.war會總動解壓成xianjian工程,而且這樣就可以直接訪問ip:埠/   而不用再字尾工程名了

虛擬路徑在window下 的例子和詳細解釋

      </Host>
      <Host name="www.bao.cn"  appBase="c:\deng"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
            <Context path="" docBase="c:\deng"/>
      </Host>

解釋:

      </Host>
      <Host name="www.deng.cn"  ------------------虛擬主機名
        appBase="c:\deng"------------------------虛擬主機的目錄這裡,這個資料夾裡有web應用程式。
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
            <Context path=""    -----------------------配web應用,由於什麼也沒寫,所以是預設的web應用
             docBase="c:\deng"/>-----------------指向
      </Host>