Java Web——訪問 tomcat 流程
當訪問tomcat是,server.xml,web.xml配置著提供服務器的流程
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> |
啟動服務器上開始監聽,加載默認的服務器默認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的得到請求信息和發出響應信息的過程,這里就不描述了