在以往的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的三個做用範圍