天天看點

Spring MVC啟動流程分析

Spring MVC啟動流程分析

本文是Spring MVC系列部落格的第一篇,後續會彙總成貼子。

Spring MVC是Spring系列架構中使用頻率最高的部分。不管是Spring Boot還是傳統的Spring項目,隻要是Web項目都會使用到Spring MVC部分。是以程式員一定要熟練掌握MVC部分。本篇部落格就簡要分析下Spring MVC的啟動流程,幫助我們更好的了解這個架構。

為什麼要寫這篇部落格#

Spring的MVC架構已經出來很久了,網上介紹這部分的部落格有很多很多,而且很多肯定比我自己寫的好,那我還為什麼要寫這篇部落格呢。一方面我覺得部落格是對自己學習過程的一個記錄,另一方面寫部落格的過程能加深自己對相關技術的了解,也友善以後自己回顧總結。

Spring MVC簡介#

什麼是Spring MVC#

要回答這個問題,我們先要說說MVC。MVC是一種設計模式,這種設計模式建議将一個請求由M(Module)、V(View)、C(controller)三個部分進行處理。請求先經過controller,controller調用其他服務層得到Module,最後将Module資料渲染成試圖(View)傳回用戶端。Spring MVC是Spring生态圈的一個元件,一個遵守MVC設計模式的WEB MVC架構。這個架構可以和Spring無縫整合,上手簡單,易于擴充。

解決什麼問題#

通常我們将一個J2EE項目項目分為WEB層、業務邏輯層和DAO層。Spring MVC解決的是WEB層的編碼問題。Spring MVC作為一個架構,抽象了很多通用代碼,簡化了WEB層的編碼,并且支援多種模闆技術。我們不需要像以前那樣:每個controller都對應編寫一個Servlet,請求JSP頁面傳回給前台。

優缺點#

用的比較多的MVC架構有Struts2和Spring MVC。兩者之間的對比:

最大的一個差別就是Struts2完全脫離了Servlet容器,而SpringMVC是基于Servlet容器的;

Spring MVC的核心控制器是Servlet,而Struts2是Filter;

Spring MVC預設每個Controller是單列,而Struts2每次請求都會初始化一個Action;

Spring MVC配置較簡單,而Struts2的配置更多還是基于XML的配置。

總的來說,Spring MVC比較簡單,學習成本低,和Spring能無縫內建。在企業中也得到越來越多的應用。是以個人比較建議在項目中使用Spring MVC。

啟動流程分析#

PS:本文的分析還是基于傳統的Tomcat項目分析,因為這個是基礎。現在非常流行的Spring Boot項目中的啟動流程後續也會寫文章分析。其實原理差不多...

要分析Spring MVC的啟動過程,要從它的啟動配置說起。一般會在Tomcat的 Web.xml中配置了一個ContextLoaderListener和一個DispatcherServlet。其實ContextLoaderListener是可以不配,這樣的話Spring會将所有的bean放入DispatcherServlet初始化的上下文容器中管理。這邊我們就拿正常的配置方式說明Spring MVC的啟動過程。(PS:Spring Boot啟動過程已經不使用Web.xml)

Copy

br> "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd" >