其他分享
首页 > 其他分享> > SpringMVC

SpringMVC

作者:互联网

SpringMVC工作原理

doService()--->doDispatch()--->processDispatchResult()--->render()

doService设置request的相关属性然后调用doDispatch, doDispatch中调用processDispatchResult(考虑异常),processDispatchResult中调用render(渲染视图)

  1. 用户发送请求给前端控制器DispatchServlet

    自己不处理,委托其他解析器处理,作为访问点全局控制

  2. DispatchServlet接受请求后对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI调用前端请求处理映射器HandlerMapping查找相关处理器Handler(通过xml或注解配置)

    Handler:是对Controller的Bean本身和请求Method的包装,而HandlerExecutionChain则是对Handler的二次包装,将Handler和拦截器链关联到一起。

    为什么@Controller注释的类可以作为SpringMvc的请求处理类?因为@Controller继承了@Component,就会被Spring扫描注册到容器中,当这个类被beanFactory获取实例bean的时候返回一个Handler对象(一个请求过来就会找这些Handler里面哪个能处理这个请求)

  3. HandlerMapping找到Handler(包括Handler对象以及Handler对象对应的拦截器)后以HandlerExecutionChain执行链的形式返回

    HandlerExecutionChain包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor(拦截器)对象(数组),策略模式的应用,优点是很容易添加新的映射策略。

    拦截器中的preHandle、postHandle与afterCompletion:可以在doDispatch源码中看到pre(按照声明顺序执行)在handle之前,post(按照声明顺序逆序执行)在渲染视图(processDispatchResult中的render)之前,而after就是在渲染之后了

  4. DispatchServlet参照HandlerExcecutionChain,根据Handler去调用合适的处理适配器HandlerAdaptor(如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

    HandlerMapping将URL映射到Controller上

    HandlerAdaptor作用就是定位具体Controller并执行他具体的Handler业务逻辑,适配器模式的应用,优点是可以支持很多类型的处理器。

  5. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller) 。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

    • HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

    • 数据转换 :对请求消息进行数据转换。如String转换成Integer、Double等

    • 数据格式化 :对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等

    • 数据验证 :验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

  6. Handler执行完毕后返回ModelAndView给HandlerAdaptor

  7. HandlerAdaptor获得ModelAndView后就返回给DispatchServlet

  8. DispatchServlet选择一个合适的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)去解析视图ModelAndView

  9. ViewResolver解析完返回View给DispatchServlet

  10. DispatchServlet根据Model对View进行渲染

  11. DispatchServlet将处理结果响应给用户

Spring MVC 之前

Model2 模式下还存在很多问题,Model2的抽象和封装程度还远远不够,使用Model2进行开发时不可避免地会重复造轮子,这就大大降低了程序的可维护性和复用性。于是很多JavaWeb开发相关的 MVC 框架应运而生比如Struts2,但是 Struts2 比较笨重。随着 Spring 轻量级开发框架的流行,Spring 生态圈出现了 Spring MVC 框架, Spring MVC 是当前最优秀的 MVC 框架。相比于 Struts2 , Spring MVC 使用更加简单和方便,开发效率更高,并且 Spring MVC 运行速度更快。

MVC 是一种设计模式,Spring MVC 是一款很优秀的 MVC 框架。Spring MVC 可以帮助我们进行更简洁的Web层的开发,并且它天生与 Spring 框架集成。Spring MVC 下我们一般把后端项目分为 Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面)。

​ Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

标签:请求,SpringMVC,Spring,Controller,MVC,DispatchServlet,Handler
来源: https://www.cnblogs.com/brightdagger/p/14695945.html