tomcat部署應用時設置應用上下文路徑content path


問題解決的配置定位


主要是配置/data/install/apache-tomcat-x.x.x/conf/server.xml文件里的host屬性以及content屬性

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <!-- <Context docBase="cat" path="" reloadable="false" /> -->
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <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>

 

Tomcat里appBase和docBase的區別


 

首先明確appBase和docBase都是指定tomcat要部署的應用所在的目錄;

appBase配置的目錄(是指定虛擬主機的目錄,可以指定絕對目錄,也可以指定相對於<CATALINA_HOME>的相對目錄.)表示:

  1. 這個目錄下面的子目錄將自動被部署為應用。
  2. 這個目錄下面的.war文件將被自動解壓縮並部署為應用

docBase只是指向了你某個應用的目錄(指定Web應用的文件路徑.可以給定絕對路徑,也可以給定相對於Host的appBase屬性的相對路徑)

總結

  1. 如果你想自己指定路徑,那么應該在docBase里面
  2. 如果你想簡單,那么直接把他們復制到appBase下面就行了
  3. appBase目錄只能包含應用,是應用的父級目錄,而不能是一個應用目錄;如果不配置Context指定應用docBase和path,則下屬應用的docBase就是該應用名稱,path就是   “/應用名”;
  4. docBase目錄應用所在路徑,可以是磁盤絕對路徑,也可以是相對appBase路徑,如果配置相對路徑,則應用部署兩次

示例1

比如你的應用為myApp, 放在了d:\project\myApp,里面有2個子目錄d:\project\myApp\images和d:\project\myApp\js

你可以通過

  1. 設置 appBase 指向 d:\project 來讓系統自動部署
  2. 你可以手工指定docBase到 d:\project\myApp
  3. 如果你指定了 appBase到 d:\project\myApp 那么d:\project\myApp\images這個將不再是普通的子目錄,而是一個單獨的虛擬目錄,或者叫應用了。因為其被自動部署;d:\project\myApp\js 也一樣的后果

示例2

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="ture" >
  <Context path="" docBase="aaa" debug="0" reloadable="true"/>
</Host>

結果就是項目加載部署了兩遍

第一遍:webapp下所有的文件夾部署(雖然我只有一個aaa文件夾)(訪問路徑   localhost:8080/aaa/.....)

第二遍:指定docBase為aaa文件夾又走了一遍,且path為空(l訪問路徑   localhost:8080/......)

這兩個域名都能走!!!

 

 <CATALINA_HOME>的webapps目錄下ROOT目錄和其他應用目錄


在tomcat配置文件目錄conf目錄下的server.xml中添加<Context>元素,配置如下:

<Context docBase="app" path="" reloadable="false" />

在<Context>配置中包含如下信息:

  1. 配置docBase值為:docBase="app"或者docBase="app.war",即項目war包名稱或者全名;
  2. path為空,表示app為tomcat默認應用;

同時,將app.war部署在${CATALINA_HOME}/webapps/路徑下。

實際上,tomcat部署應用程序的順序是這樣的(tomcat啟動日志):
1.最先部署${CATALINA_HOME}/webapps/路徑下的ROOT應用,該應用為tomcat的默認應用程序,訪問時不用帶應用上下文路徑,即:http://host:port/xxx。
2.然后再按照字母順序升序依次部署其他應用程序,如:appA,appB等等。

說明:

  1. 當webapps路徑下沒有ROOT目錄

    如果在部署app時刪除了${CATALINA_HOME}/webapps/路徑下的ROOT目錄(即刪除tomcat默認應用),

    那么在tomcat啟動時,會首先在CATALINA_HOME/webapps/路徑下創建名稱為ROOT的目錄,然后將文件app.war中的內容拷貝到ROOT目錄下,開始部署ROOT應用程序。

    接下來才會解壓app.war,再部署app應用。

    從tomcat的啟動日志可以很容易知道,在這種情況下app應用會被加載2次,一次是部署ROOT時加載的,另一次是部署app本身加載的。

    因此,訪問應用可以帶應用上下文路徑,也可以不用帶上下文路徑,即:http://host:port/xxx或者http://host:port/app/xxx。

  2. 當webapps路徑下存在ROOT目錄

    如果在部署app時不刪除${CATALINA_HOME}/webapps/路徑下的ROOT目錄,即已經存在默認應用程序。

    此時在tomcat啟動時,會先部署ROOT默認應用(注意:已經存在ROOT應用,不再會拷貝app.war文件內容到ROOT下)。然后解壓app.war,部署app應用。顯然,app應用只被部署一次!

    因此,在這種情況下,即便配置了<Context>元素的path為空,但是訪問app應用時還是必須攜帶應用上下文路徑,即:http://host:port/app/xxx。

 

 

多個應用,指定了多個Context,那就必須都配上path


 

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
  <Context path="aaa" docBase="testa" debug="0" reloadable="true"/>
  <Context path="bbb" docBase="testb" debug="0" reloadable="true"/>
</Host>

有多個context,就要配上多個path,這樣才能根據不同的項目走不通的路徑

也就是說

testa應用走的是localhost:8080/aaa/...

testb應用走的是localost:8080/bbb/...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM