<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)論排行榜

    主站蜘蛛池模板: 亚洲AV色香蕉一区二区| 久久久久久精品免费看SSS | 成人性生免费视频| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 久久久久亚洲精品无码网址| 最近中文字幕mv免费高清视频8 | 亚洲毛片免费观看| 色偷偷亚洲第一综合| 亚洲VA中文字幕不卡无码| 在线观看免费人成视频| 亚洲黄色三级视频| **实干一级毛片aa免费| 最新亚洲人成无码网www电影| 亚洲av无码潮喷在线观看| 日本一道一区二区免费看| 日本一区二区在线免费观看| 国产国拍亚洲精品福利 | 亚洲欧洲无码一区二区三区| 在线观看成人免费视频| a级片在线免费看| 国产精品亚洲二区在线| 亚洲一区在线观看视频| 亚洲级αV无码毛片久久精品| 四虎影院在线免费播放| 久久99国产乱子伦精品免费| 国产日韩AV免费无码一区二区三区 | 亚洲视频小说图片| 国产亚洲精品不卡在线| 大陆一级毛片免费视频观看i| 久艹视频在线免费观看| 久久精品国产亚洲av麻豆图片| 亚洲永久无码3D动漫一区| 99re这里有免费视频精品| 青青青视频免费观看| 亚洲熟妇无码八V在线播放| 亚洲综合久久综合激情久久| 中文字幕亚洲天堂| 免费在线观看的黄色网址| 女人被免费视频网站| 国产一卡2卡3卡4卡2021免费观看| 亚洲国产成人AV在线播放|