tomcat目錄結構與配置文件,web應用的目錄結構

Tomcat的目錄結構

/bin:存放windows或Linux平臺上啓動和關閉Tomcat的腳本文件

/conf:存放Tomcat服務器的各種全局配置文件,其中最重要的是server.xml和web.xml

/doc:存放Tomcat文檔

/server:包含三個子目錄:classes、lib和webapps

/server/lib:存放Tomcat服務器所需的各種JAR文件

/server/webapps:存放Tomcat自帶的兩個WEB應用admin應用和 manager應用

/common/lib:存放Tomcat服務器以及所有web應用都可以訪問的jar文件

/shared/lib:存放所有web應用都可以訪問的jar文件(但是不能被Tomcat服務器訪問)

/logs:存放Tomcat執行時的日誌文件

/src:存放Tomcat的源代碼

/webapps:Tomcat的主要Web發佈目錄,默認情況下把Web應用文件放於此目錄

/work:存放JSP編譯後產生的class文件

Tomcat的配置文件

Tomcat的配置基於兩個配置文件:

 1.server.xml - Tomcat的全局配置文件
 2.web.xml - 在Tomcat中配置不同的關係環境

$CATALINA_HOME/conf/server.xml配置簡介

 XML其中包括:

<Server>

   <Service>

        <Connector/>

        <Engine>

           <Host>

               <Context>

               </Context>

           </Host>

        </Engine>

   </Service>

</Server>

1 頂層類元素[TopLevel Elements]: 位於整個配置文件的頂層, 包括<Server>和<Service>;

2 連接器類元素[Connectors ]: 客戶和服務(容器類元素)間的通訊接口.接受客戶請求,返回響應結果;<Connector> 
3 容器類元素[Containers]: 處理客戶請求並且生成響應結果,包含3個:<Engine> <Host> <Context>
4 嵌套類元素[Nested Components]: 可以加入到容器中的元素,包括:<logger> <Valve><Realm>等


  一個<Server>包含一個或多個<Service>,一個<Service>包含唯一一個<Engine>和一個或多個<Connector>,多個 <Connector>共享一個<Engine>;一個<Engine>包含多個<Host>,每個<Host>定義一個虛擬主機,包含一個或多個web應用

<Context>元素是代表一個在虛擬主機上運行的Web應用.

<Server>元素屬性port:指定一個端口,這個端口負責監聽關閉tomcat的請求shutdown:指定向端口發送的命令字符串,通常是“SHUTDOWN”

<Service>元素屬性name:指定service的名字,通常是”Catalina”

<Connector>元 素屬性(表示客戶端和service之間的連接):port:指定服務器端要創建的端口號,並使用這個斷口監聽來自客戶端的請求minProcessors(考察是否有此屬性):服務器端啓動時創建的處理請求的線程數maxProcessors(考察是否有此屬性):最大可以創建的處理請求的線程數maxThreads:服務器創建的最大線程數minSpareThreads:最小剩餘線程數maxSpareThreads:最大 剩餘線程數enableLookups:如果爲true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端 的實際主機名,若爲false則不進行DNS查詢,而是返回其IP地址redirectPort:指定當服務器正在處理HTTP請求時收到了一個SSL傳 輸請求後重定向的端口號acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過的請求將不予處理 connectionTimeout:指定超時的時間數(以毫秒爲單位)disableUploadTimeout:不明debug:不明 protocol:不明

<Engine>元素屬性(指定service中的請求處理主機,接收和處理來自Connector的請求)name:指定Engine的名字,通常是”Catalina”defaultHost:指定默認的處理請求的主機名,至少與某個host元素的name屬性值是相同的

<Context>元素屬性(表示一個web應用程序)docBase:指定此Web應用的絕對或相對路徑,也可以爲WAR文件的路徑path:表示此Web應用程序的url的入口,如爲“/hello“,則請求的URL爲http://localhost:8080/hello/reloadable:如果爲true,則Tomcat在運行時會自動監視Web應用的/WEB-INF/lib和/WEB-INF/classes下文件的改動,自動裝載新應用,使我們可以在不重啓Tomcat的情況下更新Web應用

<Host>元 素屬性(表示一個虛擬主機)name:指定虛擬主機名字debug:指定日誌級別appBase:存放Web應用程序的基本目錄,可以是絕對路徑或相對 於CATALINAHOME CATALINA_HOME/webappsunpackWARs:如果爲true,則tomcat會自 動將WAR文件解壓後運行,否則不解壓而直接從WAR文件中運行應用程序autoDeploy:如果爲true,表示Tomcat啓動時會自動發佈 appBase目錄下所有的Web應用(包括新加入的Web應用)deployOnStarup:如果此項爲true,表示Tomcat服務器啓動時會自 動發佈appBase目錄下所有Web應用。如果Web應用在server.xml中沒有相應的<Context>元素,則將採用默認的 Context配置。deployOnStarup的默認設置是truealias:指定虛擬主機的別名,可以指定多個別名xmlValidation:不明xmlNamespaceAware:不明

<Logger>元 素屬性(表示日誌,調試和錯誤信息)className:指定logger使用的類名,此類必須實現org.apache.catalina.Logger 接口prefix:指定log文件名的前綴(文件名)suffix:指定log文件名的後綴(擴展名)timestamp:如果爲true,則log文件 名中會加入日期時間,如下例:localhost_log.2006-10-04.txtdirectory:指定log文件存放的目錄

<Realm>元素屬性(表示存放用戶名,密碼及role的數據庫)className:指定Realm使用的類名,此類必須實現org.apache.catalina.Realm接口resourceName:不明

<Valve>元 素屬性(功能與Logger相似,其prefix和suffix屬性解釋和Logger中的一樣)className:指定Valve使用的類名,如用org.apache.catalina.valves.AccessLogValve類 可以記錄應用程序的訪問信息directory:指定log文件存放的位置pattern:有兩個值,common方式記錄遠程主機名或ip地址、用戶 名、日期、第一行請求的字符串、HTTP響應代碼、發送的字節數。combined方式比common方式記錄的值還多


$CATALINA_HOME/conf/web.xml配置簡介

Tomcat可以讓用戶通過將缺省的web.xml放入conf目錄中來定義所有關係環境的web.xml的缺省值.建立一個新的關係環境 時,Tomcat使用缺省的web.xml文件作爲基本設置和應用項目特定的web.xml(放在應用項目的WEB-INF/web.xml文件)來覆蓋 這些缺省值.

默認Web應用的首頁文件的設置

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

報錯文件的設置

a.如果某文件資源沒有找到,服務器要報404錯誤,按下述配置則會調用\webapps\ROOT\notFileFound.jsp

<error-page>

<error-code>404</error-code>

<location>/notFileFound.jsp</location>

</error-page>

b.如果執行的某個JSP文件產生NullPointException,則會調用\webapps\ROOT\null.jsp

<error-page>

<exception-type>java.lang.NullPointerException</exception-type>

<location>/null.jsp</location>

</error-page>

session 會話過期時間的設置,單位是分鐘

<session-config>       

<session-timeout>30</session-timeout> 

</session-config>servlet的設置<servlet>

<servlet-name>default</servlet-name>

<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

<init-param>

<param-name>debug</param-name>

<param-value>0</param-value>

</init-param>

<init-param>

<param-name>listings</param-name>

 <param-value>true</param-value>

 </init-param>

 <load-on-startup>1</load-on-startup>

</servlet>

說明:<servlet-name>:定義Servlet的名字。<servlet-class>:指定實現這個Servlet 的類。<init-param>:定義Servlet的初始化參數(包括參數名和參數值),一個 <servlet>元素中可以有多個<init-param>元素。<load-on-startup>:指定當 Web應用啓動時,裝載Servlet的次序。當這個值爲正數或零,Servlet容器先加載數值小的Servlet,再一次加載其他數值大的 Servlet。如果這個值爲負數或沒有設定,Servlet將在Web客戶首次訪問這個Servlet時加載它。filter過濾器的設置

<filter>

      <filter-name>FilterSource</filter-name>

       <filter-class>project4.FilterSource </filter-class>

</filter>

<filter-mapping>

       <filter-name>FilterSource</filter-name>

      <url-pattern>/WwwServlet</url-pattern>

      (<url-pattern>/haha/*</url-pattern>)

</filter-mapping>

過濾:1) 身份驗證的過濾Authentication Filters2) 日誌和審覈的過濾Logging and Auditing Filters3) 圖片轉化的過濾Imageconversion Filters4) 數據壓縮的過濾Data compression Filters5) 加密過濾Encryption Filters6) Tokenizing Filters7) 資源訪問事件觸發的過濾Filters that trigger resource access events XSL/T 過濾XSL/T filters9) 內容類型的過濾Mime-type chainFilter注意監聽器的順序,如:先安全過濾,然後資源,然後內容類型等,順序可以自己定。

Tomcat管理

1 管理員帳戶配置($CATALINA_HOME/conf/tomcat-users.xml)在tomcat-users.xml文件相應的位置添加一 行:<username=”user” password=”user”roles=”standard,manager”/>用來添加一個管理員帳戶。然後重起tomcat,在瀏覽器中輸入地址http://localhost:8080/manager/,在彈出的對話框輸入上面的用戶名和密碼即可

2    Web應用列表在瀏覽器中輸入http://localhost:8080/manager/list,瀏覽器將會列出目前存在的所有Web應用的信息,分別爲:Web應用程序的路徑、當前狀態、連接這個Web應用的Session數目

3    重新裝載Web應用程序在瀏覽器入 http://localhost:8080/manager/reload?path=/examples, 瀏覽器顯示如下:OK - Reloaded application atcontext path /examples,這表示example應用程序裝載成功,如果我們將server.xml的Context元素的reloadable屬性設爲 true,則沒必要利用這種方式重新裝載Web應用程序,因爲tomcat會自動裝載。

4 顯示Session信息在瀏覽器中輸入http://localhost:8080/manager/sessions?path=/examples,瀏覽器顯示如下:OK - Session information forapplication at context path /examples Default maximum session inactive interval30 minutes

5 啓動和關閉應用程序在瀏覽器中輸入http://localhost:8080/manager/start?path=/examplehttp://localhost:8080/manager/stop?path=/examples分別啓動和關閉examples應用程序。部署及撤銷部署WAR有兩種組織方式,一種是按一定的目錄結構組織文件,一種是一個後綴爲WAR的壓縮包,因此它的部署方式也有兩種:a.在瀏覽器中輸http://localhost:8080/manager/install?path=/examples&war=file:/c:\examples,就會將按目錄結構組織的WAR部署b.在瀏覽器中輸入:http://localhost:8080/manager/install?path=/examples&war=jar:file:/c:\examples.war!/,就會將按壓縮包組織的WAR部署,注意此url後半部分一定要有!/號部署後就可以用:http://localhost:8080/examples訪問了在瀏覽器中輸入:http://localhost:8080/manager/remove?path=/examples,就會撤銷剛纔部署的應用程序

Java web組成

  Java web應用由一組靜態HTML頁、Servlet、JSP和其他相關的class組成。每種組件在web應用中都有固定的存放目錄。web應用的配置信息存放在web.xml文件中。在發佈某些組件(如Servlet)時,必須在web.xml文件中添加相應的配置信息
  web應用具有固定的目錄結構,比如開發一個名爲helloapp的應用,在<CATALINA_HOME>/webapps目錄下創建這個目錄結構。

    /helloapp     web應用的根目錄,所有的JSP和HTML文件都存放於此目錄下
    /helloapp/WEB-INF存放web應用的發佈描述文件web.xml
    /helloapp/WEB-INF/classes存放各種class文件,Servlet類文件也放於此目錄
    /helloapp/WEB-INF/lib  存放web應用所需的各種JAR文件,比如可以存放JDBC驅動程序的JAR文件

  tomcat的類裝載器先裝載classes目錄下的類,再裝載lib目錄下的類,如果兩個目錄下存在同名的類,classes目錄下的類具有優先權

  在server.xml中加入<Context>元素
<Context>元素是<CATALINA_HOME>/conf/server.xml中使用最頻繁的元素,它代表了運行在<Host>上的單個Web應用,一個<Host>中可以有多個<Context>元素,每個Web應用必須有唯一的URL路徑,path屬性設定。
    <!–Define the default virtual host–>
   <Host name=”localhost” debug=”0”appBase=”webapps” unpackWARs=”true”autoDeploy=”true”>
    ….
    ….
   <Context path=”/helloapp”docBase=”helloapp” debug=”0” reloadable=”true”/>
   </Host>

  path屬性:指定訪問該web應用的URL入口
  docBase:指定web應用的文件路徑,可以給絕對路徑,也可以給Host的appBase的相對路徑
  reloadable:如果設置爲true,tomcat服務器在運行狀態下會監視在WEB-INF/classes和lib目錄下class文件的改動,如果被更新,服務器會自動重新加載web應用

也可以放在你想放的任何位置的。 
  在server.xml中,  
  <Host   ….> 
  <!–加上如下這句話–> 
  <Context   path=”/myweb” docBase=”c:/jsp”   debug=”0” 
              reloadable=”true”   crossContext=”true” />  
   
  </Host>  
  然後你的文件全部放在c:\jsp下,用 http://IP:port/myweb/index.jsp  來訪問

創建併發布WAR文件
   1>進入helloapp應用的根目錄<CATALINA_HOME>/webapps目錄下
   2>把整個Web應用打包爲helloapp.war,命令爲: jar cvf helloapp.war*.*(解壓參數爲xvf)
   3>把helloapp.war文件複製到<CATALINA_HOME>/webapps目錄下
   4>刪除原來的helloapp整個目錄(一定要刪除整個目錄)
   5>啓動Tomcat服務器
   根據<CATALINA_HOME>/conf/server.xml裏面Host的unpackWARs屬性,如果爲true,則Tomcat啓動的時候會自動把war文件解壓,展開爲開放式的目錄結構

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

1) 請求被髮送到本機端口8080,被在那裏偵聽的Coyote HTTP/1.1 Connector獲得
2) Connector把該請求交給它所在的Service的Engine來處理,並等待來自Engine的迴應
3) Engine獲得請求localhost/wsota/wsota_index.jsp,匹配它所擁有的所有虛擬主機Host
4) Engine匹配到名爲localhost的Host(即使匹配不到也把請求交給該Host處理,因爲該Host被定義爲該Engine的默認主機)
5) localhost Host獲得請求/wsota/wsota_index.jsp,匹配它所擁有的所有Context
6) Host匹配到路徑爲/wsota的Context(如果匹配不到就把該請求交給路徑名爲”“的Context去處理)
7) path=”/wsota”的Context獲得請求/wsota_index.jsp,在它的mapping table中尋找對應的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對象返回給客戶browser


context節點的正確存放位置參考文檔: http://localhost:8080/docs/config/context.html



  http://f51889920.iteye.com/blog/1884830

 http://blog.sina.com.cn/s/blog_3e32ac59010007o1.html

 http://blog.sina.com.cn/s/blog_62cb15980101jh9x.html

http://www.360doc.com/content/08/0820/09/72742_1558551.shtml

http://java.chinaitlab.com/Tomcat/757612.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章