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 "%r" %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上,但願對在部署過程當中遇到問題的同仁們有些許幫助.
另外,以上純屬我的的理解,若有錯誤,求指導指導,哈哈~~