Java Web——訪問 tomcat 流程

          當訪問tomcat是,server.xml,web.xml配置著提供服務器的流程

          server.xml文件分析

          Tomcat組成分析
          Tomcat Server的組成部分
          Service是這樣一個集合:它由一個或者多個Connector組成,以及一個Engine,負責處理所有Connector所獲得的客戶請求
          Connector
          一個Connector將在某個指定端口上偵聽客戶請求,并將獲得的請求交給Engine來處理,從Engine處獲得回應并返回客戶
          TOMCAT典型的Connector,一個直接偵聽來自browser的http請求,一個偵聽來自其它WebServer的請求
          Coyote Http/1.1 Connector 在端口8080處偵聽來自客戶browser的http請求
          Coyote JK2 Connector 在端口8009處偵聽來自其它WebServer(Apache)的servlet/jsp代理請求

          Coyote SSL HTTP/1.1 Connector 在端口8443處偵聽來自客戶端的SSL安全請求

          Engine
          Engine下可以配置多個虛擬主機Virtual Host,每個虛擬主機都有一個域名
          當Engine獲得一個請求時,它把該請求匹配到某個Host上,然后把該請求交給該Host來處理Engine有一個默認虛擬主機,當請求無法匹配到任何一個Host上的時候,將交給該默認Host來處理
          Host
          代表一個Virtual Host,虛擬主機,每個虛擬主機和某個網絡域名Domain Name相匹配
          每個虛擬主機下都可以部署(deploy)一個或者多個Web App,每個Web App對應于一個Context,有一個Context path
          當Host獲得一個請求時,將把該請求匹配到某個Context上,然后把該請求交給該Context來處理
          匹配的方法是“最長匹配”,所以一個path==""的Context將成為該Host的默認Context
          所有無法和其它Context的路徑名匹配的請求都將最終和該默認Context匹配
          Context
          一個Context對應于一個Web Application,一個Web Application由一個或者多個Servlet組成
          Context在創建的時候將根據配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml載入Servlet類
          當Context獲得請求時,將在自己的映射表(mapping table)中尋找相匹配的Servlet類
          如果找到,則執行該類,獲得請求的回應,并返回

          %TOMCAT_HOME%/conf/web.xml文件分析

          <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

          當用戶的HTTP請求無法匹配任何一個servlet的時候,該servlet被執行

          <servlet>
                      <servlet-name>jsp</servlet-name>
                      <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
                      <init-param>
                      <param-name>fork</param-name>
                      <param-value>false</param-value>
                      </init-param>
                      <init-param>
                      <param-name>xpoweredBy</param-name>
                      <param-value>false</param-value>
                      </init-param>
                      <load-on-startup>3</load-on-startup>
                      </servlet>

          當請求的是一個JSP頁面的時候(*.jsp)該servlet被調用

          它是一個JSP編譯器,將請求的JSP頁面編譯成為servlet再執行

           

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

           

          假設我的虛擬主機和站點信息配置如下
          <Host name="www.braden.com" appBase="e:\sohu">
          <Context path="/" docBase="e:\www\braden\mail" />
          </Host

          來自客戶的請求為:
          http://www.braden.com:8080/braden/hello.jsp

          1) 請求被發送到本機端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector獲得
          2) Connector把該請求交給它所在的Service的Engine來處理,并等待來自Engine的回應
          3) Engine獲得請求 www.braden.com:8080/braden/hello.jsp ,匹配它所擁有的所有虛擬主機Host
          4) Engine匹配到名為www.braden.com的Host(如果不匹配,則匹配該Engine的默認主機)

          <Engine name="Catalina" defaultHost="localhost">
          5) www.braden.com Host獲得請求 /braden/hello.jsp ,匹配它所擁有的所有Context
          6) Host匹配到路徑為/braden的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)
          7) path="/braden"的Context獲得請求/hello.jsp,在它的mapping table中尋找對應的servlet
          8) Context匹配到URL PATTERN為*.jsp的servlet,對應于JspServlet類,如果找不到對應的servlet類,把請求轉交給默認servlet處理
          9) 構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法
          10)Context把執行完了之后的HttpServletResponse對象返回給Host
          11)Host把HttpServletResponse對象返回給Engine
          12)Engine把HttpServletResponse對象返回給Connector
          13)Connector把HttpServletResponse對象返回給客戶browser
          其中還有DNS的解析過程和tomcat的得到請求信息和發出響應信息的過程,這里就不描述了

          posted on 2010-04-21 11:27 braden 閱讀(2824) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2010年4月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 屯昌县| 涟水县| 伊春市| 镇巴县| 玉门市| 义乌市| 科技| 铁力市| 天柱县| 渭南市| 遵化市| 东光县| 资溪县| 湖南省| 涞源县| 宝坻区| 井陉县| 偏关县| 手游| 桃园市| 宣汉县| 连云港市| 康平县| 巴彦县| 禄丰县| 泗水县| 竹北市| 丹江口市| 苏州市| 武功县| 南京市| 柳江县| 大名县| 泌阳县| 陕西省| 静乐县| 太仆寺旗| 梧州市| 云浮市| 南川市| 南投市|