Tomcat 下4個配置文件詳解


Tomcat 的配置文件由4個 xml 文件構成,context.xml、web.xml、server.xml、tomcat-users.xml 這4個文件。每個文件都有自己的功能與配置方法,下列將逐一介紹這幾個文件的配置:

一、context.xml 文件

Context.xml 是 Tomcat 公用的環境配置,tomcat 服務器會定時去掃描這個文件。一旦發現文件被修改(時間戳改變了),就會自動重新加載這個文件,而不需要重啟服務器。推薦在 $CATALINA_BASEconf/context.xml 中進行獨立的配置。因為 server.xml 是不可動態重加載的資源,服務器一旦啟動了以后,要修改這個文件,就得重啟服務器才能重新加載,而context.xml 文件則不然。

下面是context.xml文件的配置

 1 <Context path="/eml" docBase="eml" debug="0" reloadbale="true" privileged="true">  
 2        
 3     <WatchedResource>WEB-INF/web.xml</WatchedResource>  
 4        
 5     <WatchedResource>WEB-INF/eml.xml</WatchedResource> #監控資源文件,如果web.xml || eml.xml改變了,則自動重新加載改應用。  
 6        
 7     <Resource name="jdbc/testSiteds"   #表示指定的jndi名稱  
 8     auth="Container"   #表示認證方式,一般為Container  
 9     type="javax.sql.DataSource"  
10     maxActive="100"   #連接池支持的最大連接數  
11     maxIdle="40"     #連接池中最多可空閑maxIdle個連接  
12     maxWait="30000"   #連接池中連接用完時,新的請求等待時間,毫秒  
13     username="txl"    #表示數據庫用戶名  
14     password="123456"   #表示數據庫用戶的密碼  
15     driverClassName="com.mysql.jdbc.Driver"   #表示JDBC DRIVER  
16     url="jdbc:mysql://localhost:3306/testSite" />   #表示數據庫URL地址  
17        
18 </Context>

 

context.xml的三個作用范圍

 1. tomcat server 級別:

在$CATALINA_BASE/conf/context.xml 里配置,如果你在這個地方配置、那么這個配置文件將會被所有的webApp共享 。

2. Host 級別:

在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 context.xml,繼而進行配置,這個配置將會被這個主機上的所有webapp共享。

3. web app 級別:

在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 ${webAppName}.xml,繼而進行配置。

此時,path="",

webAppName 即為 path屬性的值,也就是訪問的虛擬目錄。

另:tomcat 服務器文件中的 $CATALINA_BASE/webapps 目錄下的所有文件夾都是一個應用。這個時候不需要自己動手配置,服務器默認將文件夾名映射成虛擬目錄名稱。還可以通過 $CATALINA_BASE/webapps/{App}/META-INF/context.xml 來配置,這個是在web應用中自己添加的,配置和其它一樣。

<context> 標簽是使用,

二、web.xml文件

 Web應用程序描述文件,都是關於是Web應用程序的配置文件。所有Web應用的 web.xml 文件的父文件。

 

1  <web-app >
2  <filter></filter> 
3  <filter-mapping></filter-mapping> 
4  <servlet></servlet> 
5  <servlet-mapping></servlet-mapping> 
6  <session-config></session-config>
7  <mime-mapping></mime-mapping>
8  <welcome-file-list></welcome-file-list> 
9  </web-app >

 

 1 <!-- 
 2 filter 配置Servlet過濾器 
 3 filter-name 定義過濾器的名字。當有多個過濾器時,不能同名 
 4 filter-class 指定實現這一過濾的類,這個類負責具體的過濾事務 
 5 --> 
 6 <filter> 
 7 <filter-name>SampleFilter</filter-name> 
 8 <filter-class>mypack.SampleFilter</filter-class> 
 9 </filter> 
10  
11 <!-- 
12 filter-mapping 設定過濾器負責過濾的URL 
13 filter-name 過濾器名。這里的名字一定要和filter中的過濾器名匹配 
14 url-pattern 指定過濾器負責過濾的URL 
15 --> 
16 <filter-mapping> 
17 <filter-name>SampleFilter</filter-name> 
18 <url-pattern>*.jsp</url-pattern> 
19 </filter-mapping> 
20  
21 <!-- 
22 servlet 配置Servlet. 
23 servlet-name 定義Servlet的名字 
24 servlet-class 指定實現這個servlet的類 
25 init-param 定義Servlet的初始化參數和參數值,可有多個init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數 
26 load-on-startup 指定當Web應用啟動時,裝載Servlet的次序。 
27 當值為正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet. 
28 當值為負或未定義:Servlet容器將在Web客戶首次訪問這個servlet時加載它 
29 --> 
30 <servlet> 
31 <servlet-name>SampleServlet</servlet-name> 
32 <servlet-class>mypack.SampleServlet</servlet-class> 
33 <init-param> 
34 <param-name>initParam1</param-name> 
35 <param-value>2</param-value> 
36 </init-param> 
37 <load-on-startup>1</load-on-startup> 
38 </servlet> 
39  
40 <!-- 
41 配置servlet映射(下面代碼為SampleServlet指定的相對URL為"/sample": 
42 servlet-name 指定servlet的名字,這里的名字應該和<Servlet>元素中定義的名字匹配。 
43 url-pattern 指定訪問這個servlet的URL。只需給出相對路徑。 
44 --> 
45 <servlet-mapping> 
46 <servlet-name>SampleServlet</servlet-name> 
47 <url-pattern>/sample</url-pattern> 
48 </servlet-mapping> 
49  
50 <!--配置session session用來設定HttpSession的生命周期。單位(秒)--> 
51 <session-config> 
52 <session-timeout>30</session-timeout> 
53 </session-config> 
54  
55 <!--配置Wel0come0文件清單--> 
56 <welcome-file-list> 
57 <welcome-file>login.jsp</welcome-file> 
58 <welcome-file>index.htm</welcome-file> 
59 </welcome-file-list>

該文件基本不用配置,Tomcat7 支持 Servlet3.0 注解定義,無需配置 web.xml。為了使 Tomcat 能夠運行 CGI,必須注釋掉<servlet-name> CGI 的那段。

更多細節請參考:http://blog.163.com/ny_lonely/blog/static/18892427320136925044357

三、server.xml文件

server.xml是對tomcat的設置,可以設置端口號,添加虛擬機這些的,是對服務器的設置

下面則是server.xml配置文件的詳解:

 1 <Server port="8005" shutdown="SHUTDOWN">
 2   <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
 3   <Listener className="org.apache.catalina.security.SecurityListener" />
 4   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 
 5   <Listener className="org.apache.catalina.core.JasperListener" /> 
 6   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 
 7   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
 8   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 
 9   <GlobalNamingResources> 
10   <!-- 全局命名資源,來定義一些外部訪問資源,其作用是為所有引擎應用程序所引用的外部資源的定義 --!> 
11     <Resource name="UserDatabase" auth="Container" 
12               type="org.apache.catalina.UserDatabase" 
13               description="User database that can be updated and saved" 
14               factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
15               pathname="conf/tomcat-users.xml" /> 
16   </GlobalNamingResources> 
17   <!-- 定義的一個名叫“UserDatabase”的認證資源,將conf/tomcat-users.xml加載至內存中,在需要認證的時候到內存中進行認證 --> 
18   <Service name="Catalina"> 
19   <!-- # 定義Service組件,同來關聯Connector和Engine,一個Engine可以對應多個Connector,每個Service中只能一個Engine --!> 
20     <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
21     <!-- 修改HTTP/1.1的Connector監聽端口為80.客戶端通過瀏覽器訪問的請求,只能通過HTTP傳遞給tomcat。還可以設置server與URIEncoding參數 --> 
22     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
23     <Engine name="Catalina" defaultHost="test.com"> 
24     <!-- 修改當前Engine,默認主機是,www.test.com  --> 
25     <Realm className="org.apache.catalina.realm.LockOutRealm"> 
26         <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
27                resourceName="UserDatabase"/> 
28     </Realm> 
29     # Realm組件,定義對當前容器內的應用程序訪問的認證,通過外部資源UserDatabase進行認證 
30       <Host name="test.com"  appBase="/web" unpackWARs="true" autoDeploy="true"> 
31       <!--  定義一個主機,域名為:test.com,應用程序的目錄是/web,設置自動部署,自動解壓    --> 
32         <Alias>www.test.com</Alias> 
33         <!--    定義一個別名www.test.com,類似apache的ServerAlias --> 
34         <Context path="" docBase="www/" reloadable="true" /> 
35         <!--    定義該應用程序,訪問路徑"",即訪問www.test.com即可訪問,網頁目錄為:相對於appBase下的www/,即/web/www,並且當該應用程序下web.xml或者類等有相關變化時,自動重載當前配置,即不用重啟tomcat使部署的新應用程序生效  --> 
36         <Context path="/bbs" docBase="/web/bbs" reloadable="true" /> 
37         <!--  定義另外一個獨立的應用程序(虛擬主機),訪問路徑為:www.test.com/bbs,該應用程序網頁目錄為/web/bbs   --> 
38         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/www/logs" 
39                prefix="www_access." suffix=".log" 
40                pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
41         <!--   定義一個Valve組件,用來記錄tomcat的訪問日志,日志存放目錄為:/web/www/logs如果定義為相對路徑則是相當於$CATALINA_HOME,並非相對於appBase,這個要注意。定義日志文件前綴為www_access.並以.log結尾,pattern定義日志內容格式,具體字段表示可以查看tomcat官方文檔   --> 
42       </Host> 
43       <Host name="manager.test.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
44       <!--   定義一個主機名為man.test.com,應用程序目錄是$CATALINA_HOME/webapps,自動解壓,自動部署   --> 
45         <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="172.16.100.*" /> 
46         <!--   定義遠程地址訪問策略,僅允許172.16.100.*網段訪問該主機,其他的將被拒絕訪問  --> 
47         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/bbs/logs" 
48                prefix="bbs_access." suffix=".log" 
49                pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
50         <!--   定義該主機的訪問日志      --> 
51       </Host> 
52     </Engine> 
53   </Service> 
54 </Server>

1、<Server>元素:
  是整個配置文件的根元素。表示整個Catalina容器。

屬性:
  className:實現了org.apache.catalina.Server接口的類名,標准實現類是org.apache.catalina.core.StandardServer類;
  Port:Tomcat服務器監聽用於關閉Tomcat服務器的命令(必須);
  Shutdown:發送到端口上用於關閉Tomcat服務器的命令;

2、<Connector>元素:
  連接器,負責接收客戶的請求,以及向客戶端回送響應的消息。

HTTP連接器:

屬性:
  allowTrace:是否允許HTTP的TRACE方法,默認為false;
  emptySessionPath:如果設置為true,用戶的所有路徑都將設置為/,默認為false;
  enableLookups:調用request、getRemoteHost()執行DNS查詢,以返回遠程主機的主機名,如果設置為false,則直接返回IP地址;
  maxPostSize:指定POST方式請求的最大量,沒有指定默認為2097152;
  protocol:值必須為HTTP1.1,如果使用AJP處理器,該值必須為AJP/1.3;
  proxyName:如這個連接器正在一個代理配置中被使用,指定這個屬性,在request.getServerName()時返回;
  redirectPort:如連接器不支持SSL請求,如收到SSL請求,Catalina容器將會自動重定向指定的端口號,讓其進行處理;
  scheme:設置協議的名字,在request.getScheme()時返回,SSL連接器設為”https”,默認為”http”;
  secure:在SSL連接器可將其設置為true,默認為false;
  URIEncoding:用於解碼URL的字符編碼,沒有指定默認值為ISO-8859-1;
  useBodyEncodingForURI:主要用於Tomcat4.1.x中,指示是否使用在contentType中指定的編碼來取代URIEncoding,用於解碼URI查詢參數,默認為false;
  xpoweredBy:為true時,Tomcat使用規范建議的報頭表明支持Servlet的規范版本,默認為false;
  acceptCount:當所有的可能處理的線程都正在使用時,在隊列中排隊請求的最大數目。當隊列已滿,任何接收到的請求都會被拒絕,默認值為10;
  bufferSize:設由連接器創建輸入流緩沖區的大小,以字節為單位。默認情況下,緩存區大的大小為2048字節;
  compressableMimeType:MIME的列表,默認以逗號分隔。默認值是text/html,text/xml,text/plain;
  compression:指定是否對響應的數據進行壓縮。off:表示禁止壓縮、on:表示允許壓縮(文本將被壓縮)、force:表示所有情況下都進行壓縮,默認值為off;
  connectionTimeout:設置連接的超時值,以毫秒為單位。默認值為60000=60秒;
  disableUploadTimeOut:允許Servlet容器,正在執行使用一個較長的連接超時值,以使Servlet有較長的時間來完成它的執行,默認值為false;
  maxHttpHeaderSize:HTTP請求和響應頭的最大量,以字節為單位,默認值為4096字節;
  maxKeepAliveRequest:服務器關閉之前,客戶端發送的流水線最大數目。默認值為100;
  maxSpareThreads:允許存在空閑線程的最大數目,默認值為50;
  minSpareThreads:設當連接器第一次啟協創建線程的數目,確保至少有這么多的空閑線程可用。默認值為4;
  port:服務端套接字監聽的TCP端口號,默認值為8080(必須);
  socketBuffer:設Socket輸出緩沖區的大小(以字節為單位),-1表示禁止緩沖,默認值為9000字節;
  toNoDelay:為true時,可以提高性能。默認值為true;
  threadPriority:設JVM中請求處理線程優先級。默認值為NORMAL-PRIORITY;

例如:

1 <Connector
2 port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
3 redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />

AJP連接器:
  用於將Apache與Tomcat集成在一起,當Apache接收到動態內容請求時,通過在配置中指定的端口號將請求發送給在此端口號上監聽的AJP連接器組件。

屬性:
  backlog:當所有可能的請求處理線程都在使用時,隊列中排隊的請求最大數目。默認為10,當隊列已滿,任何請求都將被拒絕;
  maxSpareThread:允許存在空閑線程的最大數目,默認值為50;
  maxThread:最大線程數,默認值為200;
  minSpareThreads:設當連接器第一次啟動時創建線程的數目,確保至少有這么多的空閑線程可用,默認值為4;
  port:服務端套接字的TCP端口號,默認值為8089(必須);
  topNoDelay:為true時,可以提高性能,默認值為true;
  soTimeout:超時值;

3、<Engine>元素:
為特定的Service處理所有的請示。每個Service只能包含一個Engine元素,它負責接收和處理此Service所有的連接器收到的請求,向連接發回響應,並最終顯示在客戶端。<Engine>至少有一個<Host>元素,必須至少有一個<Host>屬性的名字與defaultHost指定的名字相匹配。

屬性:
  className:實現org.apache.catalina.Engine接口,默認實現類為org.apache.catalina.core.StandardEngine類;
  defaultHost:默認主機名,值必須與<Service>的name值相匹配;
  name:指定Engine的邏輯名字(必須);
  jvmRoute:在負載勻衡中使用的標識符,必須唯一;

例如:

 1 <Engine name="Cataline" defaultHost="localhst"> 

 

4、<Host>元素:
表示一個虛擬主機,為特定的虛擬主機處理所有請求。

屬性:
  appBase:設定應用程序的基目錄,絕對路徑或相對於%CATALINA_HOME%的路徑名;
  autoDeploy:指示Tomcat運行時,如有新的WEB程序加開appBase指定的目錄下,是否為自動布署,默認值為true;
  className:實現了org.apache.catalina.Host接口的類,標准實現類為org.apache.catalina.core.StandardHost類;
  deployOnStartup:Tomcat啟動時,是否自動部署appBase屬性指定目錄下所有的WEB應用程序,默認值為true;
  name:虛擬主機的網絡名(必須);

標准Host實現類org.apahce.catalina.core.StandardHost支持的附加屬性:  

  deployXML:為false將不會解析WEB應用程序內部的context.xml,默認值為true;
  unPackWARs:虛擬主機指定臨時讀寫使用的目錄的路徑名,不設,Tomcat會在%CATALINA_HOME%/work目錄下提供一個合適的目錄;

1 <Host name="localhst" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
2 
配置虛擬主機: 3 <Hostname="xxx" appBase="/test"> 4 <Contentpath=" " docBase="www/"/> 5 </Hostname>

 

5、<context>元素:
一個WEB應用程序,處理當前WEB應用程序的所有請求,每一個<Context>必須使用唯一的上下文路徑。

屬性:
  className:實現了org.apache.catalina.Context接口的類,標准實現類org.apache.catalina.core.StandardContext類;
  cookies:是否將Cookie應用於Session,默認值為true;
  crossContext:是否允許跨域訪問,為true時,在程序內調用ServletContext.getContext()方法將返回一個虛擬主機上其它web程序的請求調度器;默認值為false,調 徑用  getContext()返回為null;
  docBase:絕對路徑或相對於Host的appBase 屬性的相對路徑;
  privileged:為true,允許Web應用程序使用容器的Servlet;
  path:指定上下文路徑。一個虛擬主機中,上下文路徑必須唯一;
  reloadable:為true,Tomcat運行時,如果WEB-INF/classes和WEB-INF/lib目錄中有改變,Tomcat會自動重新加載該WEB應用程序。雖方便,但開銷也大,默認值為false,我們在調用可以打開,發布后再關閉;
  cacheMaxSize:靜態資源緩存最大值,以KB為單位,默認值為10240KB;
  cachingAllowed:是否允許靜態資源緩存,默認為true;
  caseSensitive:默認為true,資源文件名大小寫敏感,如果為false大小寫不敏感;
  unpackWAR:默認為true;
  workDir:為WEB應用程序內部的Servlet指定臨時讀寫的目錄路徑名。如沒有設置,則Tomcat會在%CATALINA_HOME%/work目錄下提供一個合適的目錄;

  一個 server 有一個 service,一個 service 里有多個 connector 和一個 engine,不同的 connector 除了端口可能不同,協議也可能不同。多個connector 對應一個 engine。  engine 代表我們應用程序的容器。一個 engine 中有一個到多個 host,一個host 代表我們的一個虛擬主機。host 里又有一個到多個 context,一個 context 代表了一個應用程序的虛擬子站點。

 

 

四、tomcat-users.xml

Tomcat Manager是Tomcat自帶的、用於對Tomcat自身以及部署在Tomcat上的應用進行管理的web應用。Tomcat是Java領域使用最廣泛的服務器之一,因此Tomcat Manager也成為了使用非常普遍的功能應用。

在默認情況下,Tomcat Manager是處於禁用狀態的。准確地說,Tomcat Manager需要以用戶角色進行登錄並授權才能使用相應的功能,不過Tomcat並沒有配置任何默認的用戶,因此需要我們進行相應的用戶配置之后才能使用Tomcat Manager。

Tomcat Manager的用戶配置是在Tomcat安裝目錄/conf/tomcat-users.xml文件中進行管理的。

Tomcat Manager的用戶配置非常簡單,下面我們以一個具體的配置為例:

1 <tomcat-users>
2   <role rolename="manager-gui"/>
3   <role rolename="manager-script"/>
4   <user username="tomcat" password="tomcat" roles="manager-gui"/>
5   <user username="admin" password="123456" roles="manager-script"/>
6 </tomcat-users>

 

如上所示,我們只需要在tomcat-users節點中配置相應的role(角色/權限)和user(用戶)即可。一個user節點表示單個用戶,屬性usernamepassword分別表示登錄的用戶名和密碼,屬性roles表示該用戶所具備的權限。

user節點的roles屬性值與role節點的rolename屬性值相對應,表示當前用戶具備該role節點所表示的角色權限。當然,一個用戶可以具備多種權限,因此屬性roles的值可以是多個rolename,多個rolename之間以英文逗號隔開即可。

稍加思考,我們就應該猜測到,rolename的屬性值並不是隨意的內容,否則Tomcat怎么能夠知道我們隨便定義的rolename表示什么樣的權限呢。實際上,Tomcat已經為我們定義了4種不同的角色——也就是4個rolename,我們只需要使用Tomcat為我們定義的這幾種角色就足夠滿足我們的工作需要了。

以下是Tomcat Manager 4種角色的大致介紹(下面URL中的*為通配符):

manager-gui
允許訪問html接口(即URL路徑為/manager/html/*)
manager-script
允許訪問純文本接口(即URL路徑為/manager/text/*)
manager-jmx
允許訪問JMX代理接口(即URL路徑為/manager/jmxproxy/*)
manager-status
允許訪問Tomcat只讀狀態頁面(即URL路徑為/manager/status/*)

從Tomcat Manager內部配置文件中可以得知,manager-guimanager-scriptmanager-jmx均具備manager-status的權限,也就是說,manager-guimanager-scriptmanager-jmx三種角色權限無需再額外添加manager-status權限,即可直接訪問路徑/manager/status/*

 

配置tomcat的時候遇到了以下問題:

  1.剛開始需要用戶名密碼,不知道用戶名和密碼是什么,但是輸入什么都不正確。

  解決辦法:

  自己在tomcat-users.xml中按格式添加用戶 conf文件夾里面

  默認是注釋掉了的,這主要是考慮到服務器的安全,如果是本地測試,去掉以下這段注釋,然后重啟動服務器,再輸入

   <role rolename="tomcat"/>

    <role rolename="role1"/>

    <user username="tomcat" password="tomcat" roles="tomcat"/>

    <user username="both" password="tomcat" roles="tomcat,role1"/>

    <user username="role1" password="tomcat" roles="role1"/>

  用戶和密碼都一目了然了。 

  2.進入manager界面之后,顯示的是403 Access Denied。

  解決辦法:

  在conf/tomcat-users.xml文件中看到這么一段話:

  NOTE:  By default, no user is included in the "manager-gui" role required

    to operate the "/manager/html" web application.  If you wish to use this app,

    you must define such a user - the username and password are arbitrary.

  也就是說,為了考慮安全,tomcat默認還是沒有manager-gui的管理權限的,如果想要使用manager

  的話,需要自行加入管理權限(角色)。

  需要加一個這樣的權限(角色)

  <role rolename="manager-gui"/>

  然后再加到需要的用戶名中去

  <user username="tomcat" password="tomcat" roles="tomcat,manager-gui"/>

  這樣OK了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM