欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

tomcat中Servlet的工作機(jī)制詳細(xì)介紹

 更新時(shí)間:2016年12月31日 11:43:07   投稿:lqh  
這篇文章主要介紹了tomcat中Servlet的工作機(jī)制詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下

tomcat中Servlet的工作機(jī)制

在研究Servlet在tomcat中的工作機(jī)制前必須先看看Servlet規(guī)范的一些重要的相關(guān)規(guī)定,規(guī)范提供了一個(gè)Servlet接口,接口中包含的重要方法是init、service、destroy等方法,Servlet在初始化時(shí)要調(diào)用init方法,在銷毀時(shí)要調(diào)用destroy方法,而對客戶端請求處理時(shí)則調(diào)用service方法。對于這些機(jī)制的支持都必須由Tomcat內(nèi)部去支持,具體則是由Wrapper容器提供支持。

在tomcat中消息流的流轉(zhuǎn)機(jī)制是通過四個(gè)不同級別的容器管道機(jī)制進(jìn)行流轉(zhuǎn)的,對于每個(gè)請求都是一層一層處理的。如下圖,當(dāng)客戶端請求到達(dá)服務(wù)端后請求被抽象成request對象后向四個(gè)容器進(jìn)行傳遞,首先經(jīng)過Engine容器的管道通過若干閥門,最后通過StandardEngineValve閥門流轉(zhuǎn)到Host容器的管道,處理后繼續(xù)往下流轉(zhuǎn),通過StandardHostValve閥門流轉(zhuǎn)到Context容器的管道,繼續(xù)往下流轉(zhuǎn),通過StandardContextValve閥門流轉(zhuǎn)到Wrapper容器的管道,而對Servlet的核心處理也正是在StandardWrapperValve閥門中。StandardWrapperValve閥門調(diào)用Servlet的service方法隊(duì)請求進(jìn)行處理,然后對客戶端響應(yīng)。

下面更深入了解下StandardWrapperValve閥門調(diào)用Servlet的過程。

web應(yīng)用的Servlet類都是根據(jù)Servlet接口,例如一般我們在寫業(yè)務(wù)處理Servlet類時(shí)都會(huì)繼承HttpServlet類,為了遵循Servlet規(guī)范,它其實(shí)最終也是實(shí)現(xiàn)了Servlet接口,只是HttpServlet定義了HTTP協(xié)議的Servlet,將協(xié)議共性的東西抽離出來復(fù)用。Servlet處理客戶端請求的核心方法為service方法,所以對于HttpServlet來說,它需要針對http協(xié)議的GET、POST、PU、DELETE、HEAD、OPTIONS、TRACE等請求方法做出不同的分發(fā)處理,為方便理解,下面用個(gè)簡化的代碼展示:

public abstract class HttpServlet extends Servlet{
  public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    String method = req.getMethod();
    if (method.equals("GET")) {
      doGet(request, response);
    }else if (method.equals("POST")) {
      doPost(request, response);
    }else if (method.equals("HEAD")) {
      doHead(request, response);
    } 
  }
protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
}

service方法將請求對象和響應(yīng)對象轉(zhuǎn)換成HttpServletRequest和HttpServletResponse,然后獲取請求方法,根據(jù)請求方法調(diào)用不同的處理方法,例如如果為GET方法則調(diào)用doGet方法,那么在繼承了HttpServlet類的Servlet只需重寫doGet或doPost方法完成業(yè)務(wù)邏輯處理,這就是我們熟悉的Servlet了。

這樣一來,StandardWrapperValve閥門調(diào)用Servlet的工作其實(shí)就是通過反射機(jī)制實(shí)現(xiàn)對Servlet對象的控制,例如在不配置load-on-startup情況下,客戶端首次訪問該Servlet時(shí)由于還不存在該Servlet對象,需要通過反射機(jī)制實(shí)例化出該Servlet對象,并且調(diào)用初始化方法,所以這也是為什么第一次訪問某個(gè)Servlet時(shí)會(huì)比較耗時(shí)的原因,后面客戶端再對該Servlet訪問時(shí)都會(huì)使用該Servlet對象,無需再做實(shí)例化和初始化操作。有了Servlet對象后調(diào)用其service方法即完成了對客戶端請求的處理。

實(shí)際上通過反射機(jī)制實(shí)例化Servlet對象是一個(gè)比較復(fù)雜的過程,它除了完成實(shí)例化和初始化工作外還要解析該Servlet類包含的各種注解并作處理,另外,對于實(shí)現(xiàn)了SingleThreadModel接口的Servlet類,它還要維護(hù)一個(gè)該Servlet對象池。

綜上所述,Servlet工作機(jī)制大致流程是:request -> StandardEngineValve -> StandardHostValve -> StandardContextValve -> StandardWrapperValve -> 實(shí)例化并初始化Servlet對象 -> 調(diào)用該Servlet對象的service方法 -> response。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Tomcat假死的原因分析及解決方案

    Tomcat假死的原因分析及解決方案

    這篇文章主要介紹了Tomcat假死的原因分析及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Tomcat CentOS安裝實(shí)現(xiàn)過程圖解

    Tomcat CentOS安裝實(shí)現(xiàn)過程圖解

    這篇文章主要介紹了Tomcat CentOS安裝實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 解決運(yùn)行Tomcat之后仍然出現(xiàn)404的問題

    解決運(yùn)行Tomcat之后仍然出現(xiàn)404的問題

    這篇文章主要介紹了解決運(yùn)行Tomcat之后仍然出現(xiàn)404的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • cemtos 7 linux 安裝與卸載 tomcat 7的教程

    cemtos 7 linux 安裝與卸載 tomcat 7的教程

    這篇文章主要介紹了cemtos 7 linux 安裝與卸載 tomcat 7的教程,需要的朋友可以參考下
    2017-10-10
  • Tomcat7.0設(shè)置虛擬目錄配置虛擬路徑的方法講解

    Tomcat7.0設(shè)置虛擬目錄配置虛擬路徑的方法講解

    今天小編就為大家分享一篇關(guān)于Tomcat7.0設(shè)置虛擬目錄配置虛擬路徑的方法講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 詳解Tomcat服務(wù)器綁定多域名和虛擬目錄的方法

    詳解Tomcat服務(wù)器綁定多域名和虛擬目錄的方法

    這篇文章主要介紹了Tomcat服務(wù)器綁定多域名和虛擬目錄的方法,Tomcat用于動(dòng)態(tài)解析JSP和Servlet程序,需要的朋友可以參考下
    2015-12-12
  • idea搭建項(xiàng)目找不到Tomcat的解決方法(圖文教程)

    idea搭建項(xiàng)目找不到Tomcat的解決方法(圖文教程)

    今天在公司中導(dǎo)入公司項(xiàng)目,需要配置tomcat,結(jié)果發(fā)現(xiàn)找不到,所以這篇文章主要給大家介紹了關(guān)于idea搭建項(xiàng)目找不到Tomcat的解決方法,需要的朋友可以參考下
    2023-07-07
  • Tomcat多實(shí)例與負(fù)載均衡示例詳解

    Tomcat多實(shí)例與負(fù)載均衡示例詳解

    這篇文章主要介紹了Tomcat多實(shí)例與負(fù)載均衡,在部署 Tomcat 之前必須安裝好 jdk,因?yàn)?nbsp;jdk 是 Tomcat 運(yùn)行的必要環(huán)境,具體內(nèi)容詳情跟隨小編一起看看吧
    2022-04-04
  • 修改Tomcat服務(wù)器默認(rèn)端口號的實(shí)現(xiàn)方法

    修改Tomcat服務(wù)器默認(rèn)端口號的實(shí)現(xiàn)方法

    這篇文章主要介紹了修改Tomcat服務(wù)器默認(rèn)端口號的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • tomcat常見的錯(cuò)誤與解決方案小結(jié)

    tomcat常見的錯(cuò)誤與解決方案小結(jié)

    web容器其實(shí)都是tomcat,但tomcat的內(nèi)核很豐富,如果要完全理解需要很長的時(shí)間和較多的編程經(jīng)驗(yàn)。不管是初學(xué)者還是有經(jīng)驗(yàn)的web程序員,使用Tomcat容器的時(shí)候會(huì)發(fā)生包括404,運(yùn)行啟動(dòng)錯(cuò)誤,以及亂碼等等的問題,本文將開發(fā)過程中遇到的常見錯(cuò)誤和簡單解決方法分享給大家。
    2016-11-11

最新評論