SpringMVC工作流程


 

1、  用戶發送請求至前端控制器DispatcherServlet

2、  DispatcherServlet收到請求調用HandlerMapping處理器映射器。

3、  處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一並返回給DispatcherServlet。

4、  DispatcherServlet通過HandlerAdapter處理器適配器調用處理器

5、  執行處理器(Controller,也叫后端控制器)。

6、  Controller執行完成返回ModelAndView

7、  HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet

8、  DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器

9、  ViewReslover解析后返回具體View

10、  DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。

11、  DispatcherServlet響應用戶

 

 

 一.HandlerMapping,處理器映射器

1.BeanNameUrl處理器映射器,根據請求的url與spring容器中定義的bean的name進行匹配,從而從spring容器中找到bean實例。

<!—beanName Url映射器 -->

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

 

2.SimpleUrlHandlerMapping

simpleUrlHandlerMapping是BeanNameUrlHandlerMapping的增強版本,它可以將url和處理器bean的id進行統一映射配置。

<!—簡單url映射 --

 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"

       <property name="mappings">

           <props>

              <prop key="/items1.action">controller的bean id</prop>

              <prop key="/items2.action">controller的bean id</prop>

           </props>

       </property>

          </bean>

 

二.HandlerAdapter,處理器適配器

   HandlerAdapter會根據適配器接口對后端控制器進行包裝(適配),包裝后即可對處理器進行執行,通過擴展處理器適配器可以執行多種類型的處理器,這里使用了適配器設計模式。

  1.SimpleControllerHandlerAdapter  

SimpleControllerHandlerAdapter簡單控制器處理器適配器,所有實現了org.springframework.web.servlet.mvc.Controller 接口的Bean通過此適配器進行適配、執行。

    適配器配置如下:

    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

  2.HttpRequestHandlerAdapter 

    HttpRequestHandlerAdapter,http請求處理器適配器,所有實現了org.springframework.web.HttpRequestHandler 接口的Bean通過此適配器進行適配、執行。

    適配器配置如下:

    <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

     Controller實現如下:

      public class ItemList2 implements HttpRequestHandler{}

    從上邊可以看出此適配器器的handleRequest方法沒有返回ModelAndView,可通過response修改定義響應內容,比如返回json數據:

response.setCharacterEncoding("utf-8");

response.setContentType("application/json;charset=utf-8");

response.getWriter().write("json串")

 

三.注解映射器和適配器

  1.組件掃描器  

    使用組件掃描器省去在spring容器配置每個controller類的繁瑣。使用<context:component-scan自動掃描標記@controller的控制器類,配置如下:

    <!-- 掃描controller注解,多個包中間使用半角逗號分隔 -->

       <context:component-scan base-package="cn.itcast.springmvc.controller.first"/>

  2.RequestMappingHandlerMapping

    注解式處理器映射器,對類中標記@ResquestMapping的方法進行映射,根據ResquestMapping定義的url匹配ResquestMapping標記的方法,

    匹配成功返回HandlerMethod對象給前端控制器,HandlerMethod對象中封裝url對應的方法Method。

    從spring3.1版本開始,廢除了DefaultAnnotationHandlerMapping的使用,推薦使用RequestMappingHandlerMapping完成注解式處理器映射。 

配置如下:

  <!--注解映射器 -->

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

  3.RequestMappingAdapter

    注解式處理器適配器,對標記@ResquestMapping的方法進行適配。

    從spring3.1版本開始,廢除了AnnotationMethodHandlerAdapter的使用,推薦使用RequestMappingHandlerAdapter完成注解式處理器適配。

    配置如下:

      <!--注解適配器 -->

        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

  4.<mvc:annotation-driven/>

springmvc使用<mvc:annotation-driven>自動加載RequestMappingHandlerMapping和RequestMappingHandlerAdapter,

可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解處理器和適配器的配置。

 

 

 

 

 

 

 

 

 

 

    

 

 


免責聲明!

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



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