1. 程式人生 > >Tomcat工作原理詳解

Tomcat工作原理詳解

該檔案描述瞭如何啟動TomcatServer
<!----------------------------------------------------------------------------------------------->
<web-app>
     <!-- 概述:
          該檔案是所有的WEBAPP共用的部署配置檔案,
          每當一個WEBAPP被DEPLOY,該檔案都將先被處理,然後才是WEBAPP自己的/WEB-INF/web.xml
         -->     <!--    +-------------------------+     -->
     <!--    |       servlet類定義部分      |     -->
     <!--    +-------------------------+    -->     <!-- DefaultServlet
          當用戶的HTTP請求無法匹配任何一個servlet的時候,該servlet被執行
          URL PATTERN MAPPING : /
         -->       <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>
     <!-- InvokerServlet
          處理一個WEBAPP中的匿名servlet
          當一個servlet被編寫並編譯放入/WEB-INF/classes/中,卻沒有在/WEB-INF/web.xml中定義的時候
          該servlet被呼叫,把匿名servlet對映成/servlet/ClassName的形式
          URL PATTERN MAPPING :/servlet/*
         -->       <servlet>
          <servlet-name>invoker</servlet-name>
          <servlet-class>
            org.apache.catalina.servlets.InvokerServlet
          </servlet-class>
           <init-param>
              <param-name>debug</param-name>
              <param-value>0</param-value>
           </init-param>
          <load-on-startup>2</load-on-startup>
       </servlet>
     <!-- JspServlet
          當請求的是一個JSP頁面的時候(*.jsp)該servlet被呼叫
          它是一個JSP編譯器,將請求的JSP頁面編譯成為servlet再執行
          URL PATTERN MAPPING :*.jsp
         -->       <servlet>
          <servlet-name>jsp</servlet-name>
          <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
           <init-param>
              <param-name>logVerbosityLevel</param-name>
              <param-value>WARNING</param-value>
          </init-param>
          <load-on-startup>3</load-on-startup>
       </servlet>    <!--     +---------------------------+    -->
     <!--    |       servlet對映定義部分      |     -->
     <!--    +---------------------------+     -->   
       <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>      <servlet-mapping>
           <servlet-name>invoker</servlet-name>
          <url-pattern>/servlet/*</url-pattern>
      </servlet-mapping>      <servlet-mapping>
          <servlet-name>jsp</servlet-name>
          <url-pattern>*.jsp</url-pattern>
       </servlet-mapping>
     <!--    +------------------------+     -->
     <!--    |       其它部分,略去先      |     -->
     <!--    +------------------------+    -->       ... ... ......</web-app><!-- 啟動Server
        在埠8005處等待關閉命令
        如果接受到"SHUTDOWN"字串則關閉伺服器
        --><Serverport="8005" shutdown="SHUTDOWN" debug="0">
     <!-- Listener ???
          目前沒有看到這裡
         -->     <ListenerclassName="org.apache.catalina.mbeans.ServerLifecycleListener"debug="0"/>
     <ListenerclassName="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"debug="0"/>
     <!-- Global JNDI resources ???
          目前沒有看到這裡,先略去
         -->     <GlobalNamingResources>
       ... ... ... ...
     </GlobalNamingResources>
     <!-- Tomcat的StandaloneService
          Service是一組Connector的集合
          它們共用一個Engine來處理所有Connector收到的請求
         -->     <Servicename="Tomcat-Standalone">
       <!-- Coyote HTTP/1.1 Connector
            className : 該Connector的實現類是org.apache.coyote.tomcat4.CoyoteConnector
            port : 在埠號8080處偵聽來自客戶browser的HTTP1.1請求
           minProcessors : 該Connector先建立5個執行緒等待客戶請求,每個請求由一個執行緒負責
           maxProcessors : 當現有的執行緒不夠服務客戶請求時,若執行緒總數不足75個,則建立新執行緒來處理請求
            acceptCount: 當現有執行緒已經達到最大數75時,為客戶請求排隊
                         當佇列中請求數超過100時,後來的請求返回Connectionrefused錯誤
            redirectport: 當客戶請求是https時,把該請求轉發到埠8443去
            其它屬性略
           -->       <ConnectorclassName="org.apache.coyote.tomcat4.CoyoteConnector"
                 port="8080"
                 minProcessors="5" maxProcessors="75"acceptCount="100"
                 enableLookups="true"
                 redirectPort="8443"
                 debug="0"
                 connectionTimeout="20000"
                 useURIValidationHack="false"
                 disableUploadTimeout="true" />
       <!-- Engine用來處理Connector收到的Http請求
            它將匹配請求和自己的虛擬主機,並把請求轉交給對應的Host來處理
            預設虛擬主機是localhost
           -->       <Enginename="Standalone" defaultHost="localhost"debug="0">
            <!-- 日誌類,目前沒有看到,略去先-->         <LoggerclassName="org.apache.catalina.logger.FileLogger".../>         <!-- Realm,目前沒有看到,略去先-->         <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm" .../>
         <!-- 虛擬主機localhost
             appBase : 該虛擬主機的根目錄是webapps/
              它將匹配請求和自己的Context的路徑,並把請求轉交給對應的Context來處理
             -->         <Host name="localhost"debug="0" appBase="webapps" unpackWARs="true"autoDeploy="true">
               <!-- 日誌類,目前沒有看到,略去先-->           <LoggerclassName="org.apache.catalina.logger.FileLogger" .../>
               <!-- Context,對應於一個Web App
               path : 該Context的路徑名是"",故該Context是該Host的預設Context
               docBase : 該Context的根目錄是webapps/mycontext/
               -->           <Contextpath="" docBase="mycontext" debug="0"/>
                 <!-- 另外一個Context,路徑名是/wsota-->           <Contextpath="/wsota" docBase="wsotaProject"debug="0"/>  </Host>      </Engine></Service></Server>