tomcat配置

首先說說tomcat的幾種部署方法:

1.將應用文件夾或war文件塞到tomcat安裝目錄下的webapps子目錄下,這樣tomcat啓動的時候會將webapps目錄下的文件夾或war內容當成應用部署。這種方式最簡單且無須書寫任何配置文件。

2.在tomcat安裝目錄下的conf子目錄下的server.xml配置文件中的Host節點下添加Context字節點:<Context path="/name" docBase="..." />,其中path屬性是url後面的訪問目錄名,這個例子中項目在本機的訪問url爲http://localhost:8080/name,docBase爲應用的所在路徑可以爲系統的任意位置。

3.$CATALINA_HOME/conf/[enginename]/[hostname]/ 目錄下新建一個xml文件,文件的根節點爲Context節點,屬性配置與第二種方式一樣,只是無須配置path屬性,path屬性爲xml文件的名稱

4.登錄http://localhost:8080/manager頁面,利用tomcat的manager管理功能管理與動態部署應用。

tomcat的Context節點配置與web.xml類似,但是應用於兩個不同的方面。Context元素代表一個web應用,運行在某個特定的虛擬主機上。每個web應用基於一個Web Application Archive(WAR)文件,或者是一個目錄,包含WAR文件解壓後的內容Context是站在tomcat的角度來描述一個應用的部署,Context節點是從tomcat容器的角度來描述一個部署在容器內的web應用。而web.xml文件是描述應用的內容,是對應用本身而言的。通過將請求URI的最長可能前綴與每個Context的context路徑進行匹配,Catalina(引擎)選擇相應的web 應用處理HTTP請求。一旦選定,根據web application deployment descriptor 文件中定義的servlet映射,Context會選擇一個正確的servlet來處理進來的請求。servlet映射必須定義在該web應用目錄層次結 構中的/WEB-INF/web.xml中。
你可以在一個Host元素中嵌套任意多的Context元素。每個Context的路徑必須 是惟一的,由path屬性定義。另外,你必須定義一個context路徑長度爲0的Context,這個Context稱爲該虛擬主機的缺省web應用, 用來處理那些不能匹配任何Context的Context路徑的請求。

【幾個Note】
1,Tomcat配置文件server.xml區分大小寫,例如docbase不會當初docBase,寫錯了容器會默認docBase與path的值相同,而不是docbase的值。
2,在server.xml中定義Context節點,可以覆蓋webapps中的與path相同的文件夾。
3,嘗試定義相同的Context的pathName會導致Tomcat無法啓動
4,幾個Context可以指向同一個docBase
【Context】
功能:
WebApplicationArchive描述符
存在位置:
$CATALINA_HOME/conf/context.xml:這是所有應用的Context節點公共配置文件,對所以的應用都起作用
$CATALINA_HOME/conf/[enginename]/[hostname]/context.xml.default
$CATALINA_HOME/conf/[enginename]/[hostname]/*.xml:*爲應用名稱
$CATALINA_HOME/webbase/appDirName/META-INF/context.xml
Server.xml中的Host節點內
屬性:
backgroundProcessorDelay
className 實現org.apache.catalina.Context接口
cookies 是否允許cookie
crossContext 是否允許應用程序交互調用ServletContext.getContext()
docBase Context根目錄。
override 是否覆蓋host的默認context配置
path 應用程序的url路徑。每個host的所有app的path必須不同。注意,這個只有在server.xml中定義context時才使用,一般通過文件名或目錄名自動推斷。
privileged 是否允許使用container servlets, 就像manager servlet
reloadable 是否監測和加載/WEB-INF/classes/和/WEB-INF/lib中的類文件的更新。
wrapperClass 實現org.apache.catalina.Wrapper接口的類。
allowLinking,antiJARLocking,antiResourceLocking,cacheMaxSize,cacheTTL,cachingAllowed,caseSensitive,processTlds,swallowOutput,tldNamespaceAware,tldValidation,unloadDelay,unpackWAR,useNaming,workDir
子節點:
Loader 類加載器。最多一個,配置該web應用用來加載servlet和javabean的類加載器。正常情況下,使用缺省的類加載器就足夠了

Logger - 配置用來接收和處理所有日誌消息的logger,包括調用ServletContext.log()函數記錄的所有消息

Manager http會話的創建、銷燬和保持的管理類。最多一個,正常情況下,使用缺省的session manager配置就足夠了
Realm 授權管理。最多一個,配置Realm,該Realm的用戶數據庫以及相關的角色僅用於這個特定的web應用中。如果沒有指定,該web應用使用所屬的Host或Engine的Realm
Resources 資源管理類。最多一個,配置用於訪問與這個web應用相關聯的靜態資源。正常情況下,使用缺省的resource manager就足夠了
WatchedResource 監控資源,字符串。自動加載器會隨時更新這個資源。


【Loader】
說明:
放在Context節點內
屬性:
className    實現接口org.apache.catalina.Loader的類加載器,默認org.apache.catalina.loader.WebappClassLoader
delegate true表示加載前先問上級loader,同java一般模式;false,先從本loader開始嘗試加載
reloadable 是否監控類文件變化,實時更新加載。

【Manager】
說明:
放在Context內,管理每個webapp的http會話的創建和維持。

Context的自動配置 
如果使用標準的Context實現,當Catalina啓動,或者重載web應用的時候,如下的配置步驟會自動發生,不需要特殊的配置來使能這個特徵。

如果沒有定義自己的Loader元素,將會配置一個標準的web應用class loader; 
如果沒有定義自己的Manager元素,會配置一個標準的session manager; 
如果沒有定義自己的Resources元素,使用標準的resource manager。 
在conf/web.xml中列出的web應用的屬性會當做該web應用的缺省的屬性。這被用於建立缺省的映射(比如將.jsp映射成對應的JSP servlet),以及其他的標準屬性。 
列舉在/WEB-INF/web.xml資源中的屬性被處理(如果資源存在); 
如果web應用指定了安全限制,並且可能需要對用戶進行認證,Catalina會配置選定的Authenticator,該Authenticator實現了login方法。 

Context參數 
可以在Context中元素中嵌套<Parameter>元素,配置帶有名稱的值,這些值作爲servletcontext初始化參數,對整個web應用可見。比如,你可以像這樣創建初始化參數:
<Context ...>
...
<Parameter name="companyName" value="My Company, Incorporated"
override="false"/>
...
</Context>
這與在/WEB-INF/web.xml中包含如下元素相等:
<context-param>
<param-name>companyName</param-name>
<param-value>My Company, Incorporated</param-value>
</context-param>

區別是,前者不需要修改deployment descriptor來定製這個值。
<Parameter>元素的有效屬性值如下:

屬性 描述 
description 關於該context初始化參數的文字描述(可選)

name 
要創建的context初始化參數的名稱
override 如果不希望/WEB-INF/web.xml中具有相同參數名稱的<context-param>覆蓋這裏指定的值,設爲false。缺省值爲true。
value 調用ServletContext.getInitParameter()時,返回給應用的參數值。
環境條目 
可以在Context中嵌套<Environment>元素,配置命名的值,這些值作爲環境條目資源(Environment Entry Resource),對整個web應用可見。比如,可以按照如下方法創建一個環境條目:
<Context ...>
...
<Environment name="maxExemptions" value="10"
type="java.lang.Integer" override="false"/>
...
</Context>
這與在/WEB-INF/web.xml中包含如下元素是等價的:
<env-entry>
<env-entry-name>maxExemptions</param-name>
<env-entry-value>10</env-entry-value>
<env-entry-type>java.lang.Integer</env-entry-type>
</env-entry>
區別是,前者不需要修改deployment descriptor來定製這個值。
<Environment>元素的有效屬性所如下:
屬性 描述 
description 環境條目的文字描述(可選)
name 環境條目的名稱,相對於java:comp/env context。
override 如果不希望/WEB-INF/web.xml中具有相同名稱的<env-entry>覆蓋這裏指定的值,設爲false。缺省值爲true。
type 環境條目的Java類名的全稱.在/WEB-INF/web.xml中,<env-entry-type>必須是如下的 值:java.lang.Boolean, java.lang.Byte, java.lang.Character, java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short, or java.lang.String.
value 通過JNDI context請求時,返回給應用的參數值。這個值必須轉換成type屬性定義的Java類型
生命期Listeners 
如 果一個Java對象需要知道Context什麼時候啓動,什麼時候停止,可以在這個對象中嵌套一個Listener元素。該Listener元素必須實現 了org.apache.catalina.LifecycleListener接口,在發生對應的生命期事件的時候,通知該Listener。可以按照 如下的格式配置這樣的Listener:
<Context path="/examples" ...>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Context>
注意,一個listener可以具有任意多的附加屬性。屬性名與JavaBean的屬性名相對應,使用標準的屬性命名方法。
請求過濾器(Request Filters) 
對 每個發送到Engine,Host或者Context的請求,可以要求Catalina檢查IP地址或主機名稱。Catalina使用一系列配置好的“接 受”或者“拒絕”過濾器對客戶端的地址或者主機名進行檢查,過濾器是按照正則表達式語法定義的,由Jakarta Regexp正則表達式庫支持。不被接受的請求會返回一個HTTP“Forbidden”錯誤。下面是過濾器的定義。
<Context path="/examples" ...>
...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.mycompany.com,
www.yourcompany.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192.168.1.*"/>
...
</Context>

資源定義(Resource Definitions) 
可 以在/WEB-INF/web.xml中定義資源的特性。使用JNDI查找<resource-ref>和<resource- env-ref>元素時,這些特性被返回。對同一資源名稱,還必須定義資源參數(見下面“資源參數”小節),這些參數用來配置對象工廠 (object factory)以及對象工廠的屬性。
比如,你可以按照如下方式創建資源定義:
<Context ...>
...
<Resource name="jdbc/EmployeeDB" auth="Container"
type="javax.sql.DataSource"
description="Employees Database for HR Applications"/>
...
</Context>

這等價於在/WEB-INF/web.xml中包含如下元素:
<resource-ref>
<description>Employees Database for HR Applications</description>
<res-ref-name>jdbc/EmployeeDB</res-ref-name>
<res-ref-type>javax.sql.DataSource</res-ref-type>
<res-auth>Container</res-auth>
</resource-ref>

區別是,前者不需要修改deployment descriptor來定製這個值。

<Resource>元素的有效屬性如下:
屬性 描述 
auth 指定時web應用代碼本身sign on到對應的resource mananger,還是由container代表web應用sign on到resource manager。該屬性的值必須是Application或者Container。如果在web application deployment descriptor中使用<resource-ref>,這個屬性是必需的,如果使用<resource-env-ref>, 這個屬性是可選的。

description 資源的文字描述(可選)

name 資源的名稱,相對於java:comp/env context

scope 指定通過這個resource manager得到的連接是否共享。該屬性的值必須是Shareable或者Unshareable。缺省情況下,假定連接是共享的。 
type 當web應用查找該資源的時候,返回的Java類名的全稱。

資源參數 
資 源參數用來配置資源管理器(resource manager,或對象工廠,object factory)。在做JNDI查找時,資源管理器返回查找的對象。在資源可以被訪問之前,對<Context> 或<DefaultContext>元素的每個<Resource>元素,或者/WEB-INF/web.xml中定義的每 個<resource-ref>或<resource-env-ref>元素,都必須定義資源參數。

資源參數是 用名稱定義的,使用的資源管理器(或者object factory)不同,參數名稱的集合也不一樣。這些參數名和工廠類的JavaBeans屬性相對應。JNDI實現通過調用對應的JavaBeans屬性 設置函數來配置特定的工廠類,然後通過lookup()調用使得該實例可見。

一個JDBC數據源的資源參數可以按照如下方式定義:
<Context ...>
...
<ResourceParams name="jdbc/EmployeeDB">
<parameter>
<name>driverClassName</name>
<value>org.hsql.jdbcDriver</value>
</parameter>
<parameter>
<name>url</name>
</value>jdbc:HypersonicSQL:database</value>
</parameter>
<parameter>
<name>user</name>
<value>dbusername</value>
</parameter>
<parameter>
<name>password</name>
<value>dbpassword</value>
</parameter>
</ResourceParams>
...
</Context>

如果你需要爲某個特定的資源類型指定工廠內的Java類名,在<ResourceParams>元素中嵌套一個叫做factory的<parameter>條目。

<Resourceparams>元素的有效屬性如下:
屬性 描述 
name 配置的資源名稱,相對於java:comp/env context。這個名稱必須與$CATALINA_HOME/conf/server.xml中某個<Resource>元素定義的資源名 稱匹配,或者在/WEB-INF/web.xml中通過<resource-ref>或者<resource-env-ref> 元素應用。

資源連接(Resource Links) 
資源連接用於創建到全局JNDI資源的連接。在連接名稱上進行JNDI查詢會返回被連接的global 資源。 
比如,你可以按照如下方法創建一個資源連接:
<Context ...>
...
<ResourceLink name="linkToGlobalResource"
global="simpleValue"
type="java.lang.Integer"
...
</Context>

<ResourceLink>元素的有效屬性如下:
屬性 描述 
global 被連接的連接全局資源的名稱
name 創建的資源連接的名稱,相對於java:comp/env context
type 當web應用在該資源連接上進行查找時,返回的Java類名的全稱

--------------------------------------------------------------

部分內容來自:http://blog.csdn.net/yuanhl2007/archive/2009/08/02/4400458.aspx

http://justsee.javaeye.com/blog/523838

發佈了16 篇原創文章 · 獲贊 17 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章