tomcat&servlet

參考:web

Tomcat詳解(1)---Tomcat 的頂層結構及啓動過程設計模式

Tomcat詳解(2)---Tomcat 的生命週期管理瀏覽器

Tomcat詳解(3)---Container 分析tomcat

Tomcat詳解(4)---Pipeline-Value 管道安全

Tomcat詳解(5)---Connector 分析服務器

詳解Servlet多線程

四張圖帶你瞭解Tomcat系統架構    總結的很好架構



Tomcat介紹


1、tomcat處理過程

一、用戶點擊網頁內容,請求被髮送到本機端口8080,被在那裏監聽的Coyote HTTP/1.1 Connector得到。
二、Connector把該請求交給它所在的Service的Engine來處理,並等待Engine的迴應。
三、Engine得到請求localhost/test/index.jsp,匹配全部的虛擬主機Host。
四、Engine匹配到名爲localhost的Host(即便匹配不到也把請求交給該Host處理,由於該Host被定義爲該Engine的默認主機),名爲localhost的Host得到請求/test/index.jsp,匹配它所擁有的全部的Context。Host匹配到路徑爲/test的Context(若是匹配不到就把該請求交給路徑名爲「 」的Context去處理)。
五、path=「/test」的Context得到請求/index.jsp,在它的mapping table中尋找出對應的Servlet。Context匹配到URL PATTERN爲*.jsp的Servlet,對應於JspServlet類。
六、構造HttpServletRequest對象和HttpServletResponse對象,做爲參數調用JspServlet的doGet()或doPost().執行業務邏輯、數據存儲等程序。
七、Context把執行完以後的HttpServletResponse對象返回給Host。
八、Host把HttpServletResponse對象返回給Engine。
九、Engine把HttpServletResponse對象返回Connector。
十、Connector把HttpServletResponse對象返回給客戶Browser。


2、tomcat介紹

Tomcat 是Web應用服務器,是一個Servlet/JSP容器. app

Tomcat 做爲Servlet容器,負責處理客戶請求,把請求傳送給Servlet,並將Servlet的響應傳送回給客戶。而Servlet是一種運行在支持 Java語言的服務器上的組件。 Servlet最多見的用途是擴展Java Web服務器功能,提供很是安全的、可移植的.jsp

一、Connecter組件

一個Connecter將在某個指定的端口上偵聽客戶請求,接收瀏覽器的發過來的 tcp 鏈接請求,建立一個 Request 和 Response 對象分別用於和請求端交換數據,而後會產生一個線程來處理這個請求並把產生的 Request 和 Response 對象傳給處理Engine(Container中的一部分),從Engine出得到響應並返回客戶。

Tomcat中有兩個經典的Connector,

  • 一個直接偵聽來自Browser的HTTP請求,
  • 另一個來自其餘的WebServer請求。
  • Cotote HTTP/1.1 Connector在端口8080處偵聽來自客戶Browser的HTTP請求,Coyote JK2 Connector在端口8009處偵聽其餘Web Server的Servlet/JSP請求。

Connector 最重要的功能就是接收鏈接請求而後分配線程讓 Container 來處理這個請求,因此這必然是多線程的,多線程的處理是 Connector 設計的核心。

二、Container是容器的父接口,

該容器的設計用的是典型的責任鏈的設計模式,它由四個自容器組件構成,分別是Engine、Host、Context、Wrapper。這四個組件是負責關係,存在包含關係。

  • 一個 Engine 表明一個完整的 Servlet 引擎。
  • Wrapper 表明一個 Servlet,它負責管理一個 Servlet,包括的 Servlet 的裝載、初始化、執行以及資源回收。Wrapper 是最底層的容器,它沒有子容器了,因此調用它的 addChild 將會報錯。
  • Wrapper 的實現類是 StandardWrapper,StandardWrapper 還實現了擁有一個 Servlet 初始化信息的 ServletConfig,由此看出 StandardWrapper 將直接和 Servlet 的各類信息打交道。




servlet介紹


Tomcat 的容器等級中,Context 容器是直接管理 Servlet 在容器中的包裝類 Wrapper,因此 Context 容器如何運行將直接影響 Servlet 的工做方式。一個 Context 對應一個 Web 工程,

客戶端的請求直接打到tomcat,它監聽端口,請求過來後,根據url等信息,肯定要將請求交給哪一個servlet去處理,而後調用那個servlet的service方法,service方法返回一個response對象,tomcat再把這個response返回給客戶端。


一、servlet的生命週期是什麼?

  • 服務器啓動時 (web.xml中配置load-on-startup=1,默認爲0) 或者第一次請求該servlet時,就會初始化一個Servlet對象,也就是會執行初始化方法 init( ServletConfig conf )
  • 該servlet對象去處理全部客戶端請求,在service( ServletRequest req,ServletResponse res )方法中執行
  • 最後服務器關閉時,纔會銷燬這個servlet對象,執行destroy()方法。

二、servlet的生命週期中,能夠看出,執行的是service方法,爲何咱們就只須要寫doGet和doPost方法呢?

service( HttpServletRequest req, HttpServletResponse resp) 

這個方法就是判斷瀏覽器過來的請求方式是哪一種,每種的處理方式不同,咱們經常使用的就是get,post,而且,咱們處理的方式可能有不少的內容,因此,在該方法內會將get,post等其餘5種請求方式提取出來,變成單個的方法,而後咱們須要編寫servlet時,就能夠直接重寫doGet或者doPost方法就好了,而不是重寫service方法,更加有針對性。

因此在編寫servlet時,繼承httpServlet,只要重寫兩個方法,一個doGet,一個doPost,其實就是service方法會調用這兩個方法中的一個(看請求方式)。


三、Servlet的生命週期

從建立到毀滅:

  • 1).調用 init() 方法初始化
  • 2).調用 service() 方法來處理客戶端的請求
  • 3).調用 destroy() 方法釋放資源,標記自身爲可回收
  • 4).被垃圾回收器回收

由下面能夠看見,servlet的init方法和destroy方法,通常容器調用這兩個方法之間的過程,就叫作servlet的生命週期。


相關文章
相關標籤/搜索