Spring MVC 的本質其實就是一個 Servlet,而上一篇提到了 DispatcherServlet,咱們知道 Spring MVC 真正的邏輯實際上是在 DispatcherServlet 中進行的,而 DispatcherServlet 偏偏就是實現 Servlet 接口的實現類。
java
下面是 DispatcherServlet 的繼承圖:
數據庫
其實,DispatcherServlet 的設計大體就是 Spring MVC 總體結構了,下面是他的主要邏輯部分:服務器
咱們在前面的Spring MVC 核心架構方面已經有所說起,下面咱們就着重的介紹。
架構
servlet 是一個 Java 編寫的程序,此程序是基於開篇介紹的 HTTP 協議的,在服務器端運行的(如:Tomcat),是按照 servlet 規範編寫的一個 Java 類。主要是處理客戶端的請求並將其結果發送到客戶端。servlet 的生命週期是由 servlet 容器來控制的,它能夠分爲 3 個階段:初始化階段、運行階段和銷燬階段。框架
初始化階段:post
servlet 容器加載 servlet 類,把 servlet 類的 .class 文件中的數據讀到內存中。spa
servlet 容器建立一個 servletConfig 對象。servletConfig 對象包含了 servletConfig 的初始化配置信息。設計
servletConfig 容器建立一個 servlet 對象。orm
servletConfig 容器調用 servlet 對象的 ini 方法進行初始化。對象
運行階段:
當 servlet 容器接收到一個請求時,servlet 容器會針對這個請求建立 servletRequest 和 ServletResponse 對象,而後調用 service 方法。並把這兩個參數傳遞給 servlet 方法。servlet 方法經過 servletRequest 對象得到請求的信息。並處理該請求。再經過 servletResponse 對象生成這個請求的響應結果。而後銷燬 servletRequest 和 servletResponse 對象。咱們無論這個請求時 post 提交的仍是 get 提交的,最終這個請求都會由 servlet 方法來處理。
銷燬階段:
當 Web 應用被終止時,servlet 容器會先調用 servlet 對象的 destroy 方法,而後再銷燬 servlet 對象,同時也會銷燬與 servlet 對象相關聯的 servletConfig 對象。咱們能夠在 destroy 方法的實現中,釋放 servlet 所佔用的資源,如關閉數據庫鏈接,關閉文件輸入輸出流等。
servlet 的框架是由兩個 Java 包組成的:javax.servlet 和 javax.servlet.http。在 javax.servlet 包中定義了全部的 servlet 類都必須實現或擴展的通用接口和類,在 javax.servlet.http 包中定義了採用 HTTP 通訊協議的 HttpServlet 類。
servlet 被設計成請求驅動,servlet 的請求可能包含多個數據項,當 Web 容器接收到某個 servlet 請求時,servlet 把請求封裝成一個 HttpServletRequest 對象,而後把對象傳給 servlet 的對應服務方法。
HTTP 的請求方式包括 delete、get、options、post、put 和 trace,在 HttpServlet 類中分別提供了相應的服務方法,它們是 doDelete(),doGet()、doOptions()、doPost()、doPut()和 doTrace()。
——水門(2016年3月寫於武漢)