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、  处理器(页面控制器)的配置,从而进行功能处理 

  • 相关阅读:
    定义扩展点,实现发布订阅机制
    JS阻止事件冒泡
    Virtualbox安装黑苹果
    外部Tomcat使用Java热部署利器JRebel
    在Windows server 2016上使用docker
    Tomcat加载web.xml文件的顺序详解
    IDEA反编译整个jar包
    java集合类的继承结构
    利用BodyTagSupport创建带标签体的自定义标签
    jquery实现简单弹出框
  • 原文地址:https://www.cnblogs.com/javapath/p/6806189.html
Copyright © 2011-2022 走看看