zoukankan      html  css  js  c++  java
  • 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、  处理器(页面控制器)的配置,从而进行功能处理 

  • 相关阅读:
    codeforces C. Cows and Sequence 解题报告
    codeforces A. Point on Spiral 解题报告
    codeforces C. New Year Ratings Change 解题报告
    codeforces A. Fox and Box Accumulation 解题报告
    codeforces B. Multitasking 解题报告
    git命令使用
    shell简单使用
    知识束缚
    php 调用系统命令
    数据传输方式(前端与后台 ,后台与后台)
  • 原文地址:https://www.cnblogs.com/javapath/p/6806189.html
Copyright © 2011-2022 走看看