基於以下說法的領悟:
若只配appBase,不配Context 的docBase(appBase和docBase二選一就可以了),則appBase的每個文件夾里都代表一個應用,每個應用都必須放ROOT文件夾,ROOT里則包含web所有文件,如圖:

<host appBase="d:/aaa">
<Context path="/smswap" reloadable="true" docBase="D:\workspace\smswap\WebRoot"></Context>
</host>
我們先看appBase,這個目錄表示:
1 這個目錄下面的子目錄將自動被部署為應用。
2 這個目錄下面的.war文件將被自動解壓縮並部署為應用
而docBase只是指向了你某個應用的目錄,這個可以和appBase沒有任何關系。
總結:
如果你想自己指定路徑,那么應該在docBase里面
如果你想簡單,那么直接把他們復制到appBase下面就行了
如果你把他們弄重復了,也就是2個指向了一個目錄,看上去也能運行,但你的應用下面的每個子目錄,其實是被部署為單獨的應用的。
比如你的應用為
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 也一樣的后果
---------------------------------------------------------分割線--------------------------------------------------------
轉自:http://www.cnblogs.com/gentoo/archive/2012/10/13/2722463.html
4、認識 Tomcat 的主配置文件 server.xml
這個文件位於 tomcat 6 安裝目錄之下的 conf 目錄之內,實際內容位於 /etc/tomcat6/server.xml。
正如該文件的擴展名所示,這是一個 xml 格式的文件,打開之后將會看到如下的結構:
- <Server port="8005" shutdown="SHUTDOWN">
- <Service name="Catalina">
- <Executor ...... />
- <Connector ...... />
- <Connector ...... />
- <Engine name="Catalina" ... >
- <Host name="localhost" ... >
- <Context ... />
- </Host>
- </Engine>
- </Service>
- </Server>
即一個由 Server->Service->Engine->Host->Context 組成的四層結構,從里層向外層分別是:
- Context: 即 Web 應用程序,一個 Context 即對於一個 Web 應用程序。
- Host:即虛擬主機,比如 www.dog.com 對應一個虛擬主機,api.dog.com 對於另一個虛擬主機。一個 Host 用於定義一個虛擬主機。(所謂的”一個虛擬主機”可簡單理解為”一個網站”)
- Engine:一組虛擬主機的集合。比如www.dog.com 和 api.dog.com 可以組成一組虛擬主機集合。
- Service:一組 Engine 的集合,包括線程池 Executor 和連接器 Connector 的定義。
CONNECTOR 的配置
一個 Connector 即一個對外界開放的端口,簡單理解就是大部分網絡服務程序都會遇到的 IpAddress:Port 的組合,比如 192.168.0.10:8080 就是一個端口,當然在 Connector 里可以定義的內容要豐富得多,即 Connector 這個 XML 節點里可以加上許多屬性。下面列舉一下常用的:
- enableLookups:(default=true) 是否允許反向解析訪客的IP地址,當你的應用程序使用 request.getRemoteHost() 時如果只需要IP地址,建議禁用此項,這樣能節省反向域名解析的時間。
- maxPostSize:(default=2097152 即2MB) 最大允許 POST 上傳的數據大小(單位為:字節),對於一般網站來說,比如有寫評論寫文章的網站,默認的2MB已經足夠,不過如果網站帶有圖片甚至文件上傳功能,則需要根據具體情況來定。
- protocol:連接器的類型,tomcat 6 有如下幾種選擇
- org.apache.coyote.http11.Http11Protocol:簡寫為 “HTTP/1.1″,這是默認的連接器,一個訪客網絡連接需要一個線程,並發性能比較低。
- org.apache.coyote.http11.Http11NioProtocol:NIO連接器,一個由非阻塞的socket工作模式構成的連接器,並發性能良好,純Java實現。
- org.apache.coyote.http11.Http11AprProtocol:APR連接器,所謂 APR 就是網絡上最多服務器使用的 Web 服務程序 Apache Http Server 所使用的庫,Tomcat 建議在生產環境使用,具體方法下面會介紹。
- redirectPort:當用戶訪問非https的資源而該資源又需要https方式訪問時,tomcat會自動重定向到https端口,一般https使用 TCP 443端口,所以一般取值”443″。
- SSLEnabled:(default=false),設置當前連接器是否使用安全SSL傳輸,如果設置為”true”,則應該同時設置下面兩個屬性: scheme=”https” (default=http) 可以設置為 http 或者 https。 secure=”true” (default=false)。
- adress:連接器所綁定的IP地址,當一台服務器存在多個ip地址時可以指定其中的需要綁定的一個,默認不設置該屬性的值表示綁定當前服務器的所有ip地址。
- compressableMimeType:(default=”text/html,text/xml,text/plain”) 指定需要GZIP壓縮的資源的類型。
- compression:(default=off) 是否啟用GZIP壓縮,可以取值 on/off/force,設置為on之后會對 compressableMimeType 屬性指定的資源類型啟用GZIP壓縮。
- connectionTimeout:(default=”60000″) 當訪客網絡連接后,服務器等待第一行Request頭出現的時間。單位是毫秒。
- executor:指定當前連接器使用的線程池的名稱,如果指定,則忽略其他針對線程數量的設置,比如 maxThreads。
- maxThreads:(default=200) 最多可創建線程的數量。
- port=”80″:綁定端口。
- keepAliveTimeout:(default=connectionTimeout),訪客完成一次請求后維持網絡連接的時間。
一個簡單的 Connector 定義如下:
- <Connector port="80" protocol="HTTP/1.1"
- connectionTimeout="60000"
- redirectPort="443" />
EXECUTOR 的配置
Executor 用於定義共享的線程池。默認情況下每個 Connector 都會產生自己的一個線程池,如果你想多個 Connector 共享一個線程池,則可以先定義一個線程池,如:
- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
- maxThreads="150" minSpareThreads="4"/>
- 然后修改上述的 Connector 配置,增加 executor 屬性,修改后的配置如下:
- <Connector executor="tomcatThreadPool"
- port="80" protocol="HTTP/1.1"
- connectionTimeout="60000"
- redirectPort="443" />
HOST 的配置
一個 Host 配置即為一個虛擬主機,例如下面是一個簡單的 Host 配置:
- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true">
- <Alias>dog.com</Alias>
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
- prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
- </Host>
Host 配置節點各個屬性的作用:
- name:設置虛擬主機的域名,比如 localhost 表示本機名稱,實際應用時應該填寫具體域名,比如 www.dog.com 或者 dog.com,當然如果該虛擬主機是給內部人員訪問的,也可以直接填寫服務器的 ip 地址,比如 192.168.1.10。
- autoDeploy:是否允許自動部署,默認值是 true,即表示 Tomcat 會自動檢測 appBase 目錄下面的文件變化從而自動應用到正在運行的 Web 應用程序。
- unpackWARs:設置是否自動展開 war 壓縮包再運行 Web 應用程序,默認值是 true。
- appBase:設置 Web 應用程序組的路徑。前面說過一個虛擬主機可以由多個 Web 應用程序構成,所以這里的 appBase 所指向的目錄應該是准備用於存放這一組 Web 應用程序的目錄,而不是具體某個 Web 應用程序的目錄本身(即使該虛擬主機只由一個 Web 應用程序組成)。appBase 屬性的值可以是相對於 Tomcat 安裝目錄的相對路徑,也可以是絕對路徑,需要注意的是該路徑必須是 Tomcat 有權限訪問的,通過 Arch Linux 源安裝的 Tomcat 是通過 tomcat 用戶運行的,因此創建一個新的 appBase 目錄之后可以使用 chown 命令更改目錄的所有者。
下面舉例說明如何創建一個新的虛擬主機 www.dog.com:
在目錄 /var/lib/tomcat6 下面可以看到安裝 Tomcat 時默認創建的 webapps 目錄,為了方便管理我們即將創建的虛擬主機的文檔也在 /var/lib/tomcat6 里創建:
$ sudo mkdir dog
然后在 dog 目錄里面創建目錄 ROOT,再在 ROOT 里面創建文件 index.html(內容隨便)。
現在將目錄的所有者和所有組都更改為 tomcat:
$ sudo chown -R tomcat:tomcat dog
然后在 server.xml 的 Host 節點下增加如下 Host 節點:
- <Host name="www.dog.com" appBase="/var/lib/tomcat6/dog">
- </Host>
重啟 Tomcat 服務就可以在瀏覽器里通過地址 http://www.dog.com 訪問這個新創建的虛擬主機了,當然你必須要先在 /etc/hosts 文件里增加 www.dog.com 到 127.0.0.1 的解析記錄,如下:
127.0.0.1 www.dog.com
有時一個虛擬主機可能會同時綁定多個域名,比如 www.dog.com 和 dog.com,這時可以通過在 Host 配置節點里增加 Alias 實現,比如:
- <span style="margin:0px;padding:0px;"><span style="margin:0px;padding:0px;"><Alias<span style="margin:0px;padding:0px;">></span></span></span>dog.com<span style="margin:0px;padding:0px;"><span style="margin:0px;padding:0px;"></Alias<span style="margin:0px;padding:0px;">></span></span></span>
另外上面示例當中的 <Valve className=… /> 配置了訪客的訪問日志的儲存位置以及文件名。
ENGINE 的配置
默認的 Engine 節點如下:
- <Engine name="Catalina" defaultHost="localhost">
- </Engine>
這個應該不用展開敘述了,其中 defaultHost 用於指定訪客在沒有相應的虛擬主機時,Tomcat 默認選擇的虛擬主機的名稱。考慮如下的情形:
假如有3個域名都 DNS 解析到你的服務器,比如 dog.com, www.dog.com, api.dog.com,當前你只配置了虛擬主機 dog.com 和 www.dog.com,那么當有個訪客通過 api.dog.com 訪問你的服務器時,Tomcat 就會依據 defaultHost 的設置返回其中一個虛擬主機運行的結果。實際應用中 defaultHost 應該設置為你的主力域名,比如 www.dog.com。
5、多站點的配置:設置多個HOST節點
有時我們需要在一台服務器上跑多個站點,通過 Tomcat 很容易實現這點,下面假設我們要搭建 www.dog.com 和 www.cat.com 這兩個站點。
首先要確定你的兩個域名的 DNS 已經能正確解析到你的服務器,因為這里我們是做實驗,所以可以在本機添加域名解析。修改 /etc/hosts 文件,加入如下兩行:
127.0.0.1 www.cat.com 127.0.0.1 www.dog.com
然后在 /var/lib/tomcat6 目錄里分別創建名字為 cat 和 dog 的兩個目錄,然后在每個目錄里都創建名字為 ROOT 的目錄,並在 ROOT 里面創建名字為 index.html 文件(內容隨便)。然后將目錄 cat 和 dog 的所有者和所有組都更改為 tomcat,方法參考上一節,這里不再贅述。
現在編輯 Tomcat 的主配置文件 server.xml,在默認的 Host 節點下面再加入如下兩個新的 Host 節點:
- <Host name="www.dog.com" appBase="/var/lib/tomcat6/dog" autoDeploy="true" unpackWARs="true">
- </Host>
- <Host name="www.cat.com" appBase="/var/lib/tomcat6/cat" autoDeploy="true" unpackWARs="true">
- </Host>
在 Host 節點里面可以根據上一節的說明加入自己需要的屬性或者 Alias 和 Value 子節點。重啟 Tomcat 服務,現在應該可以在瀏覽器里分別通過 http://www.dog.com 和 http://www.cat.com 瀏覽這兩個站點了。
