<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java Web——訪問 tomcat 流程

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

    server.xml文件分析

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

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

    Engine
    Engine下可以配置多個(gè)虛擬主機(jī)Virtual Host,每個(gè)虛擬主機(jī)都有一個(gè)域名
    當(dāng)Engine獲得一個(gè)請(qǐng)求時(shí),它把該請(qǐng)求匹配到某個(gè)Host上,然后把該請(qǐng)求交給該Host來處理Engine有一個(gè)默認(rèn)虛擬主機(jī),當(dāng)請(qǐng)求無法匹配到任何一個(gè)Host上的時(shí)候,將交給該默認(rèn)Host來處理
    Host
    代表一個(gè)Virtual Host,虛擬主機(jī),每個(gè)虛擬主機(jī)和某個(gè)網(wǎng)絡(luò)域名Domain Name相匹配
    每個(gè)虛擬主機(jī)下都可以部署(deploy)一個(gè)或者多個(gè)Web App,每個(gè)Web App對(duì)應(yīng)于一個(gè)Context,有一個(gè)Context path
    當(dāng)Host獲得一個(gè)請(qǐng)求時(shí),將把該請(qǐng)求匹配到某個(gè)Context上,然后把該請(qǐng)求交給該Context來處理
    匹配的方法是“最長(zhǎng)匹配”,所以一個(gè)path==""的Context將成為該Host的默認(rèn)Context
    所有無法和其它Context的路徑名匹配的請(qǐng)求都將最終和該默認(rèn)Context匹配
    Context
    一個(gè)Context對(duì)應(yīng)于一個(gè)Web Application,一個(gè)Web Application由一個(gè)或者多個(gè)Servlet組成
    Context在創(chuàng)建的時(shí)候?qū)⒏鶕?jù)配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml載入Servlet類
    當(dāng)Context獲得請(qǐng)求時(shí),將在自己的映射表(mapping table)中尋找相匹配的Servlet類
    如果找到,則執(zhí)行該類,獲得請(qǐng)求的回應(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>

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

    當(dāng)用戶的HTTP請(qǐng)求無法匹配任何一個(gè)servlet的時(shí)候,該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>

    當(dāng)請(qǐng)求的是一個(gè)JSP頁(yè)面的時(shí)候(*.jsp)該servlet被調(diào)用

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

     

    Tomcat Server處理一個(gè)http請(qǐng)求的過程

     

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

    來自客戶的請(qǐng)求為:
    http://www.braden.com:8080/braden/hello.jsp

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

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

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


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


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    <2010年4月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲乳大丰满中文字幕| 国产免费私拍一区二区三区| 国产偷v国产偷v亚洲高清| 男人免费视频一区二区在线观看| 日本免费人成黄页在线观看视频| 成年大片免费视频| 国产AⅤ无码专区亚洲AV| 亚洲av无码成人精品国产| 女人18毛片a级毛片免费| 亚洲中文字幕乱码AV波多JI| 三级黄色片免费看| 亚洲AV永久无码精品一百度影院| 精品免费tv久久久久久久| 四虎影视精品永久免费| 无码人妻一区二区三区免费视频| 国产成人精品亚洲精品| 亚洲丶国产丶欧美一区二区三区 | 亚洲AV无码成人精品区狼人影院| 国产美女被遭强高潮免费网站| 另类图片亚洲校园小说区| 中国在线观看免费高清完整版| 亚洲午夜无码久久| 亚洲成a人在线看天堂无码| 三级黄色免费观看| 亚洲精品视频观看| 国产成人精品免费视频动漫| 亚洲AV成人一区二区三区AV| 中文字幕手机在线免费看电影 | 国产h视频在线观看免费| 日本亚洲欧美色视频在线播放| 国产成人亚洲精品影院| 2019中文字幕在线电影免费| 亚洲色精品VR一区区三区| 久久影视综合亚洲| 黄色视频在线免费观看| 亚洲国产成人VA在线观看| 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲性一级理论片在线观看| 亚洲成a人无码av波多野按摩| 8888四色奇米在线观看免费看| 亚洲一区免费观看|