參考關於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數組中。