war包部署到tomcat的疑問

war包具體是怎樣部署到tomcat裏面的,這裏就不作詳細說明了,不少高手都有本身的"獨到"教程,哈哈.html

下面就列出如下幾個疑問,並做簡單的解釋.
web

1. war包是什麼?算法

按照個人理解,它僅僅是個壓縮包,解壓後(別告訴我你不會解壓)你就發現裏面就包含了"一個WEB項目"在發佈到web容器時所該包含的全部東西. 簡單來講你能夠理解爲是一個.zip或者是.rar的壓縮文件,只是它們的壓縮算法不同,而且.war能夠被tomcat自動解壓.
apache

2. war包怎麼來的?tomcat

目前來講,我所知道的也是我惟一知道方式是經過maven進行打包生成的. 若是還有其它方式,望大牛們告知.
app

3. war包在部署到tomcat時應該放在哪一個目錄?dom

不少教程裏面說到的是拷貝到tomcat根目錄下的webapps文件夾裏面就能夠,固然,這個是沒有錯的. 對於這個問題,咱們先看下tomcat的配置文件: ${CATALINA_HOME}/conf/server.xml , 找到這一段(這裏是默認配置):webapp

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <!-- 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>

咱們要理解的幾個節點和屬性的做用:maven

    1) <Host></Host>節點測試

        故名思意,主機的意思,Tomcat中支持配置多個虛擬主機,默認的就是這個"localhost".

    2) <Host>中的"name"屬性

        這裏就是配置多個虛擬主機時的惟一標識,填寫的是域名,表示當訪問哪一個域名時會到該虛擬主機下找web應用.

    3)<Host>中的"appBase"屬性

        這個是設置虛擬主機存放web應用的目錄,填寫的是目錄,能夠是絕對路徑也能夠是相對於tomcat根目錄的相對路徑,注意哦,這個屬性跟下面配置war路徑的時候也有必定的聯繫的.

    後面的兩個屬性從字面上也好理解了,一個是unpackWARs:解壓war文件, 一個是autoDeploy:自動發佈.

大概理解了這幾個屬性後,咱們能夠嘗試在tomcat的配置文件中本身配置一個新的"虛擬主機"(忽略默認的,嘗試點新鮮的),並將war發咱們的新建的虛擬主機的發佈目錄裏,在配置文件(${CATALINA_HOME}/conf/server.xml)中加入:

<Host name="test.yourdomain.com" appBase="D:\myWebapps" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="my-web" debug="0" privileged="true"/>
</Host>

其中<Context></Context>節點的屬性有必要說一下:

    1)屬性"docBase"

        配置某一個war包文件的路徑. 好比:

            Ⅰ) 若是個人my-web.war包在"D:\myWebapps\my-web.war, 則此時docBase只需設置爲: docBase="my-web"

            Ⅱ) 若是個人my-web.war包在"D:\myWebapps\war\my-web.war, 則此時docBase只需設置爲: docBase="/war/my-web"

            (注意:這裏只須要寫war的文件名字便可,後綴可不要,有些教程是有加後綴的,測試過也能夠)

    2) path用於配置虛擬路徑,默認是"",也就是訪問 "test.yourdomain.com" .

按照上面的配置,啓動tomcat後,打開D:\myWebapps時,你會發現已經將my-web解壓了,此時會解壓成了兩個文件夾,如圖:

看到這個圖,也就提出個人第四個疑問.

4. 爲何會一個war文件會解壓成兩個文件夾?

    打開兩個文件夾, 發現裏面的文件是同樣的.

    原來tomcat的appBase目錄裏面必需有一個默認的訪問目錄ROOT,若是沒有,tomcat會將<Context>中path=""所指向的war文件給解壓到ROOT文件夾中. 另外,tomcat還會將appBase下的demo.war文件解壓到和它同名的demo文件中,這就出現了兩個文件夾.


最後的建議:

① war文件最好不要文件<Host></Host>中appBase目錄的根目錄中.

    因此一些教程裏面說直接拷貝到默認配置中的webapps文件中,我的感受是不太好的,固然也不是不能夠,具體看怎麼配置了,哈哈.

②建議將war放到appBase的二級目錄裏,像這樣:

D:\myWebapps\wars\my-web.war

    配置的時候就變成這樣了:

<Host name="test.yourdomain.com" appBase="D:\myWebapps" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="/wars/my-web" debug="0" privileged="true"/>
</Host>

   這樣的配置,在啓動tomcat後,就只會生成ROOT文件夾,而且默認訪問的就是你的my-web.war的web應用.


寫在最後:

以上的疑問和解答也讓我本身順利的完成war部署到tomcat上,但願對在部署過程當中遇到問題的同仁們有些許幫助.

另外,以上純屬我的的理解,若有錯誤,求指導指導,哈哈~~

相關文章
相關標籤/搜索