在tomcat 5.5之前
Context體現在/conf/server.xml中的Host里的<Context>元素,它由Context接口定義。每個<Context元素代表了運行在虛擬主機上的單個Web應用
在tomcat 5.5之后
不推薦在server.xml中進行配置,而是在/conf/context.xml中進行獨立的配置。因為server.xml是不可動態重加載的資源,服務器一旦啟動了以后,要修改這個文件,就得重啟服務器才能重新加載。而context.xml文件則不然,tomcat服務器會定時去掃描這個文件。一旦發現文件被修改(時間戳改變了),就會自動重新加載這個文件,而不需要重啟服務器。
context.xml
<?xml version='1.0' encoding='utf-8'?> <Context> <!-- 監控資源文件,如果web.xml改變了,則自動重新加載應用 --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!--本地測試項目--> <!-- name,指定JNDI名稱 --> <!-- auth,表示認證方式,一般為Container --> <!-- maxActive,連接池支持的最大連接數 --> <!-- maxIdle,連接池中最多可空閑連接數 --> <!-- maxWait,連接池中連接用完時,新的請求等待時間,單位毫秒 --> <!-- username,password,數據庫用戶名/密碼 --> <!-- driverClassName,jdbc驅動 --> <!-- url,數據庫url地址 --> <Resource name="jdbc/opslocal" auth="Container" type="javax.sql.DataSource" username="scott" password="admin" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:orcl" maxActive="100000" maxIdle="4"/> <Resource name="jdbc/inslocal" auth="Container" type="javax.sql.DataSource" username="ins" password="ayw_ins1" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@132.228.213.137:1521:ossmob" maxActive="100000" maxIdle="4"/> <!--生產項目--> <Resource name="jdbc/cpflocal" auth="Container" type="javax.sql.DataSource" username="cpf_dispatch" password="cpf_dispatch" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@132.232.7.51:15211:orcl" maxActive="100000" maxIdle="4"/> </Context>
server.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- port:指定一個端口,負責監聽關閉tomcat的請求,shutdown:指定向端口發送的命令字符串--> <Server port="8005" shutdown="SHUTDOWN"> <!-- 監聽器:通常實現tomcat內部進行通信的,可在各組件之間完成通信--> <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/> <Listener className="org.apache.catalina.core.JasperListener"/> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/> <!-- 全局命名資源:方便全局引用,所以為其起完名稱后可以隨便調用的--> <GlobalNamingResources> <!-- pathname:即調用tomcat-user.xml配置文件進行用戶認證--> <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/> </GlobalNamingResources> <!-- 服務:一個服務組件通常包含一個引擎和此引擎相關聯的一個或多個鏈接服務器--> <Service name="Catalina"> <!-- 連接服務器:表示客戶端和service之間的連接,一個引擎能配置多個連接器 但是每個連接器的端口不能沖突;負責接收客戶請求,以及向客戶返回響應結果--> <!-- port:所在監聽端口,protocol:協議版本號,connectionTimeout:連接超時時間,單位毫秒--> <!-- maxThreads設定在監聽端口的線程的最大數目,這個值也決定了服務器可以同時響應客戶請求的最大數目.默認值為200 --> <!-- connectionTimeout定義建立客戶連接超時的時間.如果為-1,表示不限制建立客戶連接的時間 --> <Connector port="8080" maxThreads="1500" maxProcessors="450" connectionTimeout="20000" protocol="HTTP/1.1" redirectPort="8443"/> <!-- redirectPort指定轉發端口.如果當前端口只支持non-SSL請求,在需要安全通信的場命,將把客戶請求轉發至SSL的redirectPort端口--> <!-- enableLookups如果設為true,表示支持域名解析,可以把IP地址解析為主機名.WEB應用中調用request.getRemoteHost方法返回客戶機主機名.默認值為true --> <Connector port="8009" enableLookups ="false" protocol="AJP/1.3" redirectPort="8443"/> <!--maxThreads:最大線程,scheme:協議版本,secure:安全的--> <!--clientAuth:不驗證客戶端,sslProtocol:協議用的是tls--> <!-- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="700" scheme="https" secure="true" maxProcessors="300" clientAuth="false" sslProtocol="TLS" /> --> <!--引擎:表示指定service中的請求處理機,接收和處理來自Connector的請求.可以接收用戶的http請求,並構建響應報文,而且可以在內部處理java程序的整個套間--> <!-- defaultHost 指定缺省的處理請求的主機名,它至少與其中的一個host元素的name屬性值是一樣的 --> <Engine defaultHost="localhost" name="Catalina"> <!-- Realm 表示存放用戶名,密碼及role的數據庫 --> <!-- className 指定Realm使用的類名,此類必須實現org.apache.catalina.Realm接口 --> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <!-- appBase 應用程序基本目錄,即存放應用程序的目錄--> <!-- unpackWARs:如果此項設置為true,表示把WEB應用的WAR文件先展開為開放目錄結構后再運行.如果設為false將直接運行為WAR文件,--> <!-- autoDeploy:如果此項設為true,表示Tomcat服務處於運行狀態時,能夠監測appBase下的文件,如果有新有web應用加入進來,會自運發布這個WEB應用--> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <!-- ValveclassName:定義閥門,java中類的記錄方式,當前所處域名反過來寫的記錄方式--> <!-- prefix,suffix:日志的命名--> <!-- pattern:訪問日志的格式--> <!-- directory 指定log文件存放的位置 --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/> <!-- Context 表示運行在虛擬主機上的一個web應用程序,通常為WAR文件 --> <!-- 一個<Host>可以包含多個<Context>元素.每個web應用有唯一的一個相對應的Context代表web應用自身.servlet容器為第一個web應用創建一個ServletContext對象. --> <!-- docBase 應用程序的路徑或者是WAR文件存放的路徑 --> <!-- path 表示此web應用程序的url的前綴,這樣請求的url為http://localhost:8080/**** --> <!-- reloadable 這個屬性非常重要,如果為true,則tomcat會自動檢測應用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載應用程序,我們可以在不重起tomcat的情況下改變應用程序 --> <Context docBase="sample-demo" path="/sample-demo" reloadable="true" source="org.eclipse.jst.jee.server:sample-demo"/> </Host> </Engine> </Service> </Server>