12.0 SpringMVC请求流程

一、从Servlet到SpringMVC

1. Servlet

MVC最典型就是JSP + servlet + javabean的模式

弊端:

  1. xml下配置servlet映射非常麻烦 开发效率低
  2. 必须要继承父类、重写方法 侵入性强
  3. 如果想在一个Servlet中处理同一业务模块的的功能分发给不同方法进行处理非常麻烦
  4. 参数解析麻烦:单个参数(转换类型)--->pojo对象 Json文本--->pojo对象
  5. 数据响应麻烦:pojo对象--->json ... Content-type
  6. 跳转页面麻烦, 对path的控制、 如果使用其他模板也很麻烦 、设置编码麻烦...等等...

2.SpringMVC

SpringMVC 就是在Servlet的基础上进行了封装,帮我把这些麻烦事都给我们做了

2.1 实现方式

  1. 给Servlet容器配置一个DispatcherServlet(web.xml )

  2. 添加SpringMVC的配置信息

    1. 继承类/实现接口 方式:
    implements HttpRequestHandler
    implements Controller
    
    <!--不同的HandlerMapping-->
    <!‐‐通过设置属性的方式去设置映射路径‐‐>
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
        <prop key="httpRequest">simpleController</prop>
        </props>
    </property>
    
    <!‐‐BeanNameUrlHandlerMapping 一定要为Controller设置一个有效映射地址的名字 如 @Con
    troller("/xxxx")‐‐>
    <bean
    class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
    1. 注解方式

      配置控制器@Controller和处理方法的映射—@RequstMapping 即可

SpringMVC请求原理很简单:就是用一个DispatcherServlet 封装了一个Servlet的调度中心, 由调度中心帮我们调用我们的处理方法: 在这个过程中调度中心委托给各个组件执行具体工作 ,比如帮我们映射方法请求、帮我解析参数、调用处理方法、响应数据和页面等

2.2 执行流程

Spring MVC 是围绕前端控制器模式设计的,其中:中央 Servlet DispatcherServlet 为 请求处理流程提供统一调度,实际工作则交给可配置组件执行。这个模型是灵活的且开放的,我们可以通过自己去定制这些组件从而进行定制自己的工作流

DispatcherServlet: 前端调度器 , 负责将请求拦截下来分发到各控制器方法中

HandlerMapping: 负责根据请求的URL和配置@RequestMapping映射去匹配, 匹配到 会返回Handler(具体控制器的方法) HandlerAdaper: 负责调用Handler-具体的方法- 返回视图的名字 Handler将它封装到 ModelAndView(封装视图名,request域的数据) ViewReslover: 根据ModelAndView里面的视图名地址去找到具体的jsp封装在View对象中 View:进行视图渲染(将jsp转换成html内容 --这是Servlet容器的事情了) 最终response 到的客户端

  1. 用户发送请求至前端控制器DispatcherServlet

  2. DispatcherServlet收到请求调用处理器映射器HandlerMapping。

    处理器映射器根据请求url找到具体的处理器,生成处理器 执行链HandlerExecutionChain(包括处理器对象和处理器拦 截器)一并返回给DispatcherServlet。

  3. DispatcherServlet根据处理器Handler获取处理器适配器 HandlerAdapter,执行HandlerAdapter处理一系列的操作,如:参数封 装,数据格式转换,数据验证等操作

  4. 执行处理器Handler(Controller,也叫页面控制器)。

    • Handler执行完成返回ModelAndView
    • HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
  5. DispatcherServlet将ModelAndView传给ViewReslover视图解析

    • ViewReslover解析后返回具体View
  6. DispatcherServlet对View进行渲染视图(即将模型数据model填充至视 图中)

  7. DispatcherServlet响应用户

整个调用过程其实都在doDispatch()方法中体现

2.3 HandlerMapping

HandlerMapping是最重要的组件。它是用来映射请求的

流程

posted @ 2022-10-17 20:05  浮沉丶随心  阅读(29)  评论(0编辑  收藏  举报