Java Web——訪問 tomcat 流程

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

          server.xml文件分析

          Tomcat組成分析
          Tomcat Server的組成部分
          Service是這樣一個集合:它由一個或者多個Connector組成,以及一個Engine,負責(zé)處理所有Connector所獲得的客戶請求
          Connector
          一個Connector將在某個指定端口上偵聽客戶請求,并將獲得的請求交給Engine來處理,從Engine處獲得回應(yīng)并返回客戶
          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,虛擬主機,每個虛擬主機和某個網(wǎng)絡(luò)域名Domain Name相匹配
          每個虛擬主機下都可以部署(deploy)一個或者多個Web App,每個Web App對應(yīng)于一個Context,有一個Context path
          當Host獲得一個請求時,將把該請求匹配到某個Context上,然后把該請求交給該Context來處理
          匹配的方法是“最長匹配”,所以一個path==""的Context將成為該Host的默認Context
          所有無法和其它Context的路徑名匹配的請求都將最終和該默認Context匹配
          Context
          一個Context對應(yīng)于一個Web Application,一個Web Application由一個或者多個Servlet組成
          Context在創(chuàng)建的時候?qū)⒏鶕?jù)配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml載入Servlet類
          當Context獲得請求時,將在自己的映射表(mapping table)中尋找相匹配的Servlet類
          如果找到,則執(zhí)行該類,獲得請求的回應(yīng),并返回

          %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>

          啟動服務(wù)器上開始監(jiān)聽,加載默認的服務(wù)器默認servlet

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

          <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被調(diào)用

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

           

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

           

          假設(shè)我的虛擬主機和站點信息配置如下
          <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) 請求被發(fā)送到本機端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector獲得
          2) Connector把該請求交給它所在的Service的Engine來處理,并等待來自Engine的回應(yīng)
          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中尋找對應(yīng)的servlet
          8) Context匹配到URL PATTERN為*.jsp的servlet,對應(yīng)于JspServlet類,如果找不到對應(yīng)的servlet類,把請求轉(zhuǎn)交給默認servlet處理
          9) 構(gòu)造HttpServletRequest對象和HttpServletResponse對象,作為參數(shù)調(diào)用JspServlet的doGet或doPost方法
          10)Context把執(zhí)行完了之后的HttpServletResponse對象返回給Host
          11)Host把HttpServletResponse對象返回給Engine
          12)Engine把HttpServletResponse對象返回給Connector
          13)Connector把HttpServletResponse對象返回給客戶browser
          其中還有DNS的解析過程和tomcat的得到請求信息和發(fā)出響應(yīng)信息的過程,這里就不描述了

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


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


          網(wǎng)站導(dǎo)航:
           
          <2010年4月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 个旧市| 青冈县| 黎城县| 武宣县| 凉山| 颍上县| 尚义县| 祥云县| 梨树县| 青州市| 红安县| 扶绥县| 夹江县| 卓尼县| 信宜市| 吴旗县| 搜索| 四子王旗| 长垣县| 固镇县| 疏附县| 铜梁县| 建始县| 松溪县| 交城县| 合川市| 桐柏县| 木里| 福安市| 罗甸县| 交口县| 南康市| 长顺县| 工布江达县| 贞丰县| 温泉县| 连南| 鹤岗市| 宁津县| 临武县| 含山县|