Servlet工做原理解析 《深刻分析java web 技術內幕》第九章

參考關於servblet的相關文章html

側重概況:https://blog.csdn.net/levycc/article/details/50728921java

ibm的相關:https://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.htmlweb

《深刻分析java web 技術內幕》第九章apache

9.1 從Servlet容器提及api

     Servlet容器:Jetty, Tomcat等。數組

  這裏以Tomcat爲例,  真正管理Servlet的容器是Context容器,一個Context對應一個WEB工程。context容器管理Servlet在容器中的包裝類Wrapper,因此Context容器如何運行直接影響Servlet的工做方式,瀏覽器

  9..1.1 Servlet容器的啓動過程tomcat

  如何啓動Tomcat: 啓動類org.apache.catalina.startup.Tomcat,建立一個實例對象並調用start方法就能夠很容器地啓動Tomcat。服務器

  9.1.2 Web應用的初始化工做app

  web應用初始化在contextConfig的configureStart方法中實現的,應用的初始化主要是解析web.xml,解析成webxml對象

  接下來將webxml對象中的屬性設置到Context容器中,這裏包括建立Servlet對象、filter、listener等。

   將servelet包裝成Context容器中的StandardWrapper,爲何將Servlet包裝成StandardWrapper而不是直接包裝成Servlet?這裏StandardWrapper是Tomcat容器的一部分,具備容器的特徵,而

  Servlet做爲一個獨立的web開發標準,不該該強耦合在Tomcat中。

  除了將servelet包裝成standardwrapper並做爲子容器添加到Context,其餘全部的web.xml屬性都被解析到Context中

9.2 建立Servlet實例

  前面已經完成了Servlet的解析工做,而且被包裝成StandardWrapper添加在Context容器中,可是依然不能工做,尚未被實例化。下面介紹Servelet對象是如何建立的,以及是如何初始化的。

  9..2.1 建立Servlet實例

  如何Servlet的load-on-startup的配置項大於0,那麼在Context容器啓動時就會被實例化。

  9.2.2 初始化Servlet

9.3 Servlet體系結構

與Servlet主動關聯的是三個類,分別是ServletConfig, ServletRequest和ServletResponse。

 Tomcat接受到請求首先將會建立的Request和Resonse,者兩個類是Tomcat內部使用的描述一次請求和響應的信息類,

9.4 Servlet如何工做

  用戶從瀏覽器向服務器發起一個請求一般會包含以下信息:Http://hostname:port/contextpath/servletpath, hostname和port是爲了用來與sever創建TCP鏈接,後面的

  URL採用來選擇在服務器中那個子容器服務用戶請求,服務器如何根據這個URL來到達正確的Servlet容器?

  映射工做由專門的類完成,這個類是org.apache.tomcat.util.http.mapper, 這個類保存了Tomcat的Container容器中全部子容器的信息,org.apache.catalina.connector.Request類在進入Container容器以前,Mapper將會根據此次請求 的hostname和contextpah將host和Context容器設置到Request的mapingData屬性中。

  可是在Request到達Servlet容器之間,必須執行filter鏈,以及通知在web.xml中定義的listener,

  接下來執行Servlet的service方法,一般,咱們本身定義的servlet並不直接實現它,而是繼承HttpServlet類或者GenericServlet類,咱們能夠選擇覆蓋一部分方法。

  如今web應用不多直接將交互所有界面用Servlet來實現,而是採用更加高效的MVC框架來實現。MVC框架基本原理是將全部的請求映射到一個servlet,而後去實現service方法,這個方法是MVC入口。

  servlet從servlet容器中移除時,調用servlet的destroy方法。

9.5 Servlet中的Listener

  Tomcat服務器中,Listener使用很是普遍,它是基於觀察者模式的。

  他們基本上涵蓋了整個Servlet生命週期中你感興趣的每種事件。這些listener實現類能夠配置在web.xml的<listener>標籤中。

  如Spring的ContextLoaderListener就實現了一個ServletContextContextListener,當容器啓動的時候啓動Spring容器。

  有幾種方法能夠加載Spring容器:經過在web.xml的<context-param>標籤中配置Spring的applicationContext.xml路徑,文件名能夠任意取,若是沒有配置,將在web-inf/路徑下找默認的application Context.xml.

9.6 Filter如何工做

  Filter和Filter-mapping 組合來使用Filter。

  Filter類的三個接口:init() / dofilter()  /    destroy()

9.7 Servlet中的URL-Pattern

  <Servlet-mapping>和<filter-mapping>都有<URL-pattern>配置項。

   若是匹配上了,就將這個FIlter保存到Application Filter Chain的filters數組中。

9.1 從Servlet容器提及

     Servlet容器:Jetty, Tomcat等。

  這裏以Tomcat爲例,  真正管理Servlet的容器是Context容器,一個Context對應一個WEB工程。context容器管理Servlet在容器中的包裝類Wrapper,因此Context容器如何運行直接影響Servlet的工做方式,

  9..1.1 Servlet容器的啓動過程

  如何啓動Tomcat: 啓動類org.apache.catalina.startup.Tomcat,建立一個實例對象並調用start方法就能夠很容器地啓動Tomcat。

  9.1.2 Web應用的初始化工做

  web應用初始化在contextConfig的configureStart方法中實現的,應用的初始化主要是解析web.xml,解析成webxml對象

  接下來將webxml對象中的屬性設置到Context容器中,這裏包括建立Servlet對象、filter、listener等。

   將servelet包裝成Context容器中的StandardWrapper,爲何將Servlet包裝成StandardWrapper而不是直接包裝成Servlet?這裏StandardWrapper是Tomcat容器的一部分,具備容器的特徵,而

  Servlet做爲一個獨立的web開發標準,不該該強耦合在Tomcat中。

  除了將servelet包裝成standardwrapper並做爲子容器添加到Context,其餘全部的web.xml屬性都被解析到Context中

9.2 建立Servlet實例

  前面已經完成了Servlet的解析工做,而且被包裝成StandardWrapper添加在Context容器中,可是依然不能工做,尚未被實例化。下面介紹Servelet對象是如何建立的,以及是如何初始化的。

  9..2.1 建立Servlet實例

  如何Servlet的load-on-startup的配置項大於0,那麼在Context容器啓動時就會被實例化。

  9.2.2 初始化Servlet

9.3 Servlet體系結構

與Servlet主動關聯的是三個類,分別是ServletConfig, ServletRequest和ServletResponse。

 Tomcat接受到請求首先將會建立的Request和Resonse,者兩個類是Tomcat內部使用的描述一次請求和響應的信息類,

9.4 Servlet如何工做

  用戶從瀏覽器向服務器發起一個請求一般會包含以下信息:Http://hostname:port/contextpath/servletpath, hostname和port是爲了用來與sever創建TCP鏈接,後面的

  URL採用來選擇在服務器中那個子容器服務用戶請求,服務器如何根據這個URL來到達正確的Servlet容器?

  映射工做由專門的類完成,這個類是org.apache.tomcat.util.http.mapper, 這個類保存了Tomcat的Container容器中全部子容器的信息,org.apache.catalina.connector.Request類在進入Container容器以前,Mapper將會根據此次請求 的hostname和contextpah將host和Context容器設置到Request的mapingData屬性中。

  可是在Request到達Servlet容器之間,必須執行filter鏈,以及通知在web.xml中定義的listener,

  接下來執行Servlet的service方法,一般,咱們本身定義的servlet並不直接實現它,而是繼承HttpServlet類或者GenericServlet類,咱們能夠選擇覆蓋一部分方法。

  如今web應用不多直接將交互所有界面用Servlet來實現,而是採用更加高效的MVC框架來實現。MVC框架基本原理是將全部的請求映射到一個servlet,而後去實現service方法,這個方法是MVC入口。

  servlet從servlet容器中移除時,調用servlet的destroy方法。

9.5 Servlet中的Listener

  Tomcat服務器中,Listener使用很是普遍,它是基於觀察者模式的。

  他們基本上涵蓋了整個Servlet生命週期中你感興趣的每種事件。這些listener實現類能夠配置在web.xml的<listener>標籤中。

  如Spring的ContextLoaderListener就實現了一個ServletContextContextListener,當容器啓動的時候啓動Spring容器。

  有幾種方法能夠加載Spring容器:經過在web.xml的<context-param>標籤中配置Spring的applicationContext.xml路徑,文件名能夠任意取,若是沒有配置,將在web-inf/路徑下找默認的application Context.xml.

9.6 Filter如何工做

  Filter和Filter-mapping 組合來使用Filter。

  Filter類的三個接口:init() / dofilter()  /    destroy()

9.7 Servlet中的URL-Pattern

  <Servlet-mapping>和<filter-mapping>都有<URL-pattern>配置項。

   若是匹配上了,就將這個FIlter保存到Application Filter Chain的filters數組中。

相關文章
相關標籤/搜索