Java Web——訪問 tomcat 流程
當訪問tomcat是,server.xml,web.xml配置著提供服務(wù)器的流程
server.xml文件分析
Tomcat組成分析 Coyote SSL HTTP/1.1 Connector 在端口8443處偵聽來自客戶端的SSL安全請求 Engine |
%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)信息的過程,這里就不描述了