tomcat中有關配置文件的說明

在以往的tomcat使用中本人一直都沒有注意到tomcat的conf目錄下配置文件的做用,都是「拿來主義」的思想,從未深究。可是最近遇到不少有關tomcat配置的問題,非常頭大,因此才稍做整理。java

咱們能夠發現該目錄下有web.xml、tomcat-users.xml、server.xml以及context.xml這四個配置文件。首先咱們分別來看看這幾個配置文件分別有哪些做用。mysql

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------web

web.xml的做用:sql

    web.xml的文件格式定義在Servlet規範中,所以全部符合Servlet規範的Java Servlet Container都會用到它。當tomcat部署應用程序時(在激活過程當中,或加載應用程序後),它都會讀取通用的conf/web.xml,而後再讀取web應用程序中的WEB-INF/web.xml。(此文件通常不會涉及修改,能夠不用過多瞭解,實話是筆者也不太瞭解。)數據庫

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------apache

tomcat-users.xml的做用:瀏覽器

    顧名思義,"uesrs"那確定是與用戶相關的啦。打開以後,咱們能夠在文件最下面看到一段被註釋的代碼:tomcat

1 <!--
2   <role rolename="tomcat"/>
3   <role rolename="role1"/>
4   <user username="tomcat" password="tomcat" roles="tomcat"/>
5   <user username="both" password="tomcat" roles="tomcat,role1"/>
6   <user username="role1" password="tomcat" roles="role1"/>
7 -->

很明顯這是配置用戶名、密碼以及用戶的權限的。只要在這段註釋的代碼後加入一行,就能夠實現用戶的配置:服務器

1 <user username="admin" password="1234" roles="manager-gui"/>

這樣咱們就成功地添加了用戶名爲:admin,密碼爲:1234的管理員用戶(manager-gui爲管理員角色)app

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

server.xml的做用:

    在筆者看來server.xml在現在的tomcat版本中主要做用仍是處理來自客戶端的訪問請求的,想要知道server.xml的做用,仍是得了解其中各個標籤的含義。

    至於各個標籤的詳細含義,本文就再也不指出,有意者請查看筆者專門總結的server.xml做用的文章,就指出server處理一個訪問請求的大致流程。

        

Tomcat Server處理一個http請求的過程

假設來自客戶的請求爲:http://localhost:8080/macy/index.jsp

1) 請求發送到本機端口8080,被在那裏偵聽的Coyote HTTP/1.1 Connector得到。

2) Connector把該請求交給它所在Service的Engine來處理,並等待來自Engine的響應。

3) Engine得到請求localhost/macy/index.jsp,匹配它所擁的所虛擬主機Host。

4) Engine匹配到名爲localhost的Host(即便匹配不到也把請求交給該Host處理,由於該Host被定義爲該Engine的默認虛擬主機)。

5) localhost Host得到請求/macy/index.jsp,匹配它所擁的所Context。

6) Host匹配到路徑爲/macy的Context(若是匹配不到就把該請求交給路徑名爲""的Context去處理)。

7) path="/macy"的Context得到請求/index.jsp,在它的映射表中尋找對應的servlet。

8) Context匹配到URL PATTERN爲*.jsp的servlet,對應於JspServlet類。

9) 構造HttpServletRequest對象和HttpServletResponse對象,做爲參數調用JspServlet的doGet或doPost方法。

10)Context把執行完了以後的HttpServletResponse對象返回給Host。

11)Host把HttpServletResponse對象返回給Engine。

12)Engine把HttpServletResponse對象返回給Connector。

13)Connector把HttpServletResponse對象返回給客戶端瀏覽器。

        須要指出的是,在tomcat 5.5 以後的版本有關context的配置已經能夠不在server.xml中配置,而是在/conf/context.xml中進行獨立的配置。緣由:由於 server.xml 是不可動態重加載的資源,服務器一旦啓動了之後,要修改這個文件,就得重啓服務器才能從新加載。而 context.xml文件則否則, tomcat 服務器會定時去掃描這個文件。一旦發現文件被修改(時間戳改變了),就會自動從新加載這個文件,而不須要重啓服務器 。

        然而,官方貌似仍是保留了server.xml中配置context的寫法,我想這樣作的主要緣由是相對舊版本的兼容吧。(不推薦在server.xml中配置context)

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

context.xml的做用:

    從上文可知,每一個<Context元素表明了運行在虛擬主機上的單個Web應用。

1 <Context 
2 path="/SmartStore" 
3 reloadable="false" 
4 docBase="D:\SmartStore\workspaceSmartStore\SmartStore\src\main\webapp" 
5 workDir="D:\SmartStore\workspaceSmartStore\SmartStore\work" >
6     <Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>
7 </Context>

一、path:即要創建的虛擬目錄,,注意是/kaka,它指定訪問Web應用的 上下文根,如http://localhost:8080/SmartStore/****
二、docBase:爲應用程序的路徑或WAR文件存放的路徑 ,能夠是絕對路徑 ,也但是相對路徑,相對路徑是相對於<Host >(此處的host對應server.xml中的host元素)
三、reloadable:若是這個屬性設爲true,Tomcat服務器在運行狀態下會監視在WEB-INF/classes和Web-INF/lib目錄CLASS文件的改變,若是監視到有class文件被更新,服務器自動從新加載Web應用,這樣咱們能夠在不重起tomcat的狀況下改變應用程序。

四、workDir:jsp運行時都要先轉換成servlet,使用tomcat時會在tomcat安裝目錄下的work生成一系列的文件夾和.java文件和.class文件。設置該屬性後可改變生成的java和class文件的存儲路徑。

Tips:一個Host元素中嵌套任意多的Context元素。每一個Context的路徑必須是唯一的,由path屬性定義。另外,你必須定義一個path=「」的context,這個Context稱爲該虛擬主機的缺省web應用,用來處理那些不能匹配任何Context的Context路徑的請求。

 

context.xml中其餘標籤:

<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true" privileged="true">  
<WatchedResource>WEB-INF/web.xml</WatchedResource>  
<WatchedResource>WEB-INF/kaka.xml</WatchedResource> 監控資源文件,若是web.xml || kaka.xml改變了,則自動從新加載改應用。  
<Resource name="jdbc/testSiteds" 表示指定的jndi名稱  
auth="Container" 表示認證方式,通常爲Container  
type="javax.sql.DataSource"  
maxActive="100" 鏈接池支持的最大鏈接數  
maxIdle="30" 鏈接池中最多可空閒maxIdle個鏈接  
maxWait="10000" 鏈接池中鏈接用完時,新的請求等待時間,毫秒  
username="root" 表示數據庫用戶名  
password="root" 表示數據庫用戶的密碼  
driverClassName="com.mysql.jdbc.Driver" 表示JDBC DRIVER  
url="jdbc:mysql://localhost:3306/testSite" /> 表示數據庫URL地址  
</Context>  

The last:

context.xml的三個做用範圍

  • tomcat server級別:  在/conf/context.xml裏配置
  • Host級別:  在/conf/Catalina/${hostName}裏添加context.xml,繼而進行配置
  • web app 級別:  在/conf/Catalina/${hostName}裏添加${webAppName}.xml,繼而進行配置
相關文章
相關標籤/搜索