tomcat6源碼大致流程

1. Bootstrap:start()------
初始化:設置catalinaHome,catalinaBase, 初始化classLoader(commonLoader,sharedLoader,catalinaLoader).
    通過反射Catalina.class 調用其方法setParentClassLoader。
2  ---------->Catalina.class   start()--------
load():初始化dirs,naming,digester,initStreams,
3  ----->StandardService.start()--------
init() :Container,Register with the server ,Initialize our defined Connectors(Initializa adapter,)------
4  ----->connector: start()------
Initialize our defined Connectors(Initializa adapter,)
registerComponent--protocolHandler----
// Initializa adapter
adapter = new CoyoteAdapter(this);
protocolHandler.setAdapter(adapter);
adapter通過protocolHandler(Http11Protocol)傳給Http11Processor,
Http11Processor解析,create request和response,通過adapter傳送給Container
5  ------>protocolHandler.start()------
6  ------>Http11Protocol.class   .start()------
7  ----->JIoEndpoint  JIoEndpoint.start(); JioEndpoint啓動server Socket,listern 8080端口,處理http請求


http://localhost:8080/wsota/wsota_index.jsp

1) 請求被髮送到本機端口8080,被在那裏偵聽的Coyote HTTP/1.1 Connector獲得
2) Connector把該請求交給它所在的Service的Engine來處理,並等待來自Engine的迴應
3) Engine獲得請求localhost/wsota/wsota_index.jsp,匹配它所擁有的所有虛擬主機Host
4) Engine匹配到名爲localhost的Host(即使匹配不到也把請求交給該Host處理,因爲該Host被定義爲該Engine的默認主機)
5) localhost Host獲得請求/wsota/wsota_index.jsp,匹配它所擁有的所有Context
6) Host匹配到路徑爲/wsota的Context(如果匹配不到就把該請求交給路徑名爲""的Context去處理)
7) path="/wsota"的Context獲得請求/wsota_index.jsp,在它的mapping table中尋找對應的servlet
8) Context匹配到URL PATTERN爲*.jsp的servlet,對應於JspServlet類
9) 構造HttpServletRequest對象和HttpServletResponse對象,作爲參數調用JspServlet的doGet或doPost方法
10)Context把執行完了之後的HttpServletResponse對象返回給Host
11)Host把HttpServletResponse對象返回給Engine
12)Engine把HttpServletResponse對象返回給Connector
13)Connector把HttpServletResponse對象返回給客戶browser
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章