spring mvc 處理流程整理


 

1、  首先用戶發送請求——>DispatcherServlet,前端控制器收到請求后自己不進行處理,而是委托給其他的解析器進行處理,作為統一訪問點,進行全局的流程控制;

2、  DispatcherServlet——>HandlerMapping,HandlerMapping 將會把請求映射為 HandlerExecutionChain 對象(包含一個 Handler 處理器(頁面控制器)對象、多個 HandlerInterceptor 攔截器)對象,通過這種策略模式,很容易添加新的映射策略;

3、  DispatcherServlet——>HandlerAdapter.Controller(HandlerAdapter 將會把Controller包裝為適配器,HandlerAdapter 將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理);

4、  業務處理方法(Service)

5、 HandlerAdapter.Controller返回一個 ModelAndView 對象(包含模型數據、邏輯視圖名);

6、  ModelAndView 的邏輯視圖名——> ViewResolver, ViewResolver 將把邏輯視圖名解析為具體的 View,通過這種策略模式,很容易更換其他視圖技術;

7、  View——>渲染,View 會根據傳進來的 Model 模型數據進行渲染,此處的 Model 實際是一個 Map 數據結構,因此很容易支持其他視圖技術;

8、  返回控制權給 DispatcherServlet,由 DispatcherServlet 返回響應給用戶,到此一個流程結束。

 

開發步驟:

1、  DispatcherServlet 在 web.xml 中的部署描述,從而攔截請求到 Spring Web MVC

2、  HandlerMapping 的配置,從而將請求映射到處理器

4種HandlerMapping的配置方式:

2.1 基於注解:

<!--Spring3.1開始的注解 HandlerMapping -->  
<bean   
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>  
<!--Spring3.1開始的注解 HandlerAdapter -->  
<bean  
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

2.2 顯示的指定url對應關系:

prop的key值->請求,后面指定處理這個請求的Controller

<!-- 3:SimpleUrlHandlerMapping -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/springMVC.d">/HelloWorld</prop>
            </props>
        </property>
</bean>

2.3 基於BeanName找到Controller:

<!-- 4:BeanNameUrlHandlerMapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

2.4 基於Controller的Class Name找到Controller:

<!-- 5:ControllerClassNameHandlerMapping -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

3、  HandlerAdapter 的配置,從而支持多種類型的處理器

1.DispatcherServlte會根據配置文件信息注冊HandlerAdapter,如果在配置文件中沒有配置,那么DispatcherServlte會獲取HandlerAdapter的默認配置,如果是讀取默認配置的話,DispatcherServlte會讀取DispatcherServlte.properties文件,該文件中配置了三種HandlerAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter(3.1以后已經過時,使用RequestMappingHandlerAdapter)。DispatcherServlte會將這三個HandlerAdapter對象存儲到它的handlerAdapters這個集合屬性中,這樣就完成了HandlerAdapter的注冊。

2.DispatcherServlte會根據handlerMapping傳過來的controller與已經注冊好了的HandlerAdapter一一匹配,看哪一種HandlerAdapter是支持該controller類型的,如果找到了其中一種HandlerAdapter是支持傳過來的controller類型,那么該HandlerAdapter會調用自己的handle方法,handle方法運用java的反射機制執行controller的具體方法來獲得ModelAndView,例如SimpleControllerHandlerAdapter是支持實現了controller接口的控制器,如果自己寫的控制器實現了controller接口,那么SimpleControllerHandlerAdapter就會去執行自己寫控制器中的具體方法來完成請求。

4、  ViewResolver 的配置,從而將邏輯視圖名解析為具體視圖技術

4.1 InternalResourceViewResolver:

配置表示,將在Controller返回的ModelAndView的基礎上,加上目錄前綴/WEB-INF/jsp/, 
加后文件名稱后綴.jsp,由此等待下個頁面如/WEB-INF/jsp/showCats.jsp 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>
   <property name="prefix"><value>/WEB-INF/jsp/</value></property> 
   <property name="suffix"><value>.jsp</value></property> 
</bean> 

4.2 ResourceBundleViewResolver:

在properties文件中維護class與視圖資源的配置關系

5、  處理器(頁面控制器)的配置,從而進行功能處理 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM