2012-07-25

Context in Tomcat 6.0.35

Context 代表一個 Web application,必須有唯一的 path 值, path 為空字串表示 ROOT,也就是該 Host 預設的 Web application。

Tomcat 6 不建議將 context 設定在 server.xml 裡,因為 server.xml 在 Tomcat 啟動後就不能重新載入了!

Context 設定檔可以使用的位置:

  1. TOMCAT/conf/context.xml - 所有 webapp 均會使用。
  2. TOMCAT/conf/{EngineName}/{HostName}/context.xml.default - 該 Host 下所有 webapp 均會使用。
  3. TOMCAT/conf/{EngineName}/{HostName}/{ContextPath}.xml - 該 Host 下單一 webapp 專用, {ContextPath}即為 path,若為多層路徑,可以用 # 區隔,例如 tea#egg.xml,而 ROOT.xml 為該 Host 預設的 webapp。
  4. TOMCAT/webapps 裡的 War 檔或是解開的 webapp 裡若有 META-INF/context.xml,則會以該 War 檔名稱或者 webapp 名稱重新命名 context.xml 並複製到對應的 TOMCAT/conf/{EngineName}/{HostName} 下,但前提是  TOMCAT/conf/{EngineName}/{HostName} 裡無同名的 xml 存在。
    經實測發現,若 context.xml 裡有設定 path 且與 War 檔名稱相同,則啟動 Tomcat 觸發複製後,並無法連到該路徑,唯有重新啟動 Tomcat 才可以;但是若 path 與 War 檔名稱不符,即使重新啟動也無法連到該路徑;甚至當 context.xml 沒有設定 path,也要重新啟動才行。
  5. TOMCAT/conf/server.xml 裡的 Host 下。
只有在 server.xml 可以同時設定多個 context,其他方式都只能一個檔案一個 context。

Context 常用的設定值:
  • docBase - web app 所在位置,可以是目錄或者是 War 檔,一般是用絕對路徑,相對路徑只用在「相對於 Host 的 appBase 目錄」;docBase 只有在一種情況下可以不用設定,或說不應該設定,就是上面提到的 Context 使用位置的第 4 種,Tomcat 會依照 xml 名稱到 Host 設定的 appBase 裡找。
  • path - 同一個 Host 裡的 path 必須唯一,若 path 為空表示預設的 web app;path 只有在上述 Context 使用位置的第 5 種需要設定,其餘均是參考 xml 的名稱
  • reloadable - 告知 Tomcat 監測 WEB-INF/classes 與 WEB-INF/lib 是否有變動,若有則重新載入該 web app,適用於開發階段,正式環境一定要關閉。
  • cacheMaxSize - cache 靜態檔案的上限,預設為 10240(10 MB)。
  • cacheObjectMaxSize - 最大為 cacheMaxSize 的 20 分之一,預設為 512。
  • cacheTTL - cache 期限,預設是 5000(5 秒)。
  • cachingAllowed - 是否啟用 cache。
<Context 
 docBase="D:/.../springmvc312/src/main/webapp"
 reloadable="true"
 cachingAllowed="true"
 cacheMaxSize="51200"
 cacheObjectMaxSize="2560"
 cacheTTL="10000">
 <Valve className="org.apache.catalina.valves.AccessLogValve"
         prefix="springmvc312_access_log." suffix=".txt"
         pattern="common"/>
</Context>
---

沒有留言:

張貼留言