SpringMVC的Dispatcher解读

 更新时间:2023年11月03日 09:36:45   作者:全不能小傻瓜  
这篇文章主要介绍了SpringMVC的Dispatcher用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

SpringMVC的Dispatcher

Spring的web框架围绕DispatcherServlet设计

以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能

DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)

借用B站狂神的流程图(其中实现全部是框架给我们做的,我们只需要补充虚线的流程就好。)

SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handler,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。

DispatcherServlet作为springMVC的前端控制器,负责接收用户的请求并根据用户的请求返回相应的视图给用户

  • 用户发出请求,该请求到达SpringMVC的前端控制器。
  • 前端控制器会根据用户请求的URL请求处理器映射器查找匹配的handler。
  • 并返回一个执行链(HanlderExecution)。
  • 前端控制器再请求处理器适配器(HandlerAdapter)去执行对应的Handler,Handler会让Controller去执行!
  • Controller将具体的执行信息(我们该写的代码)返回给HandlerAdapter,如ModelAndView。 如:携带数据 + 要跳转的视图 HelloServlet类 。
  • HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
  • DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

所谓视图解析器就是拼接字符串

mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
<!--视图解析器:DispatcherServlet给他的ModelAndView
    1.获取了ModelAndView的数据
    2.解析ModelAndView的视图名字 Hello
    3.根据前缀和后缀去拼接视图名称/WEB-INF/jsp/hello.jsp
    4.将数据渲染到这个视图上。
    -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
    <!--前缀-->
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <!--后缀-->
    <property name="suffix" value=".jsp"/>
</bean> 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • idea无法识别注解,或pom文件异常的问题及解决

    idea无法识别注解,或pom文件异常的问题及解决

    文章介绍了三种解决IDEA无法识别注解或POM文件异常的方法:1.检查省电模式设置;2.为未识别的POM文件添加Maven工程;3.移除并重新添加有问题的模块
    2026-01-01
  • RocketMQ消息中间件超详细解读

    RocketMQ消息中间件超详细解读

    这篇文章主要介绍了RocketMQ消息中间件超详细解读,RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等,本文就来详细解读一下,需要的朋友可以参考下
    2023-05-05
  • mybatis一级缓存和二级缓存的区别及说明

    mybatis一级缓存和二级缓存的区别及说明

    这篇文章主要介绍了mybatis一级缓存和二级缓存的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java实现RSA算法的方法详解

    Java实现RSA算法的方法详解

    这篇文章主要介绍了Java实现RSA算法的方法,结合实例形式分析了RSA算法的原理、实现与使用方法,需要的朋友可以参考下
    2018-03-03
  • 解决springboot启动失败的问题('hibernate.dialect' not set)

    解决springboot启动失败的问题('hibernate.dialect' not set)

    这篇文章主要介绍了解决springboot启动失败的问题('hibernate.dialect' not set),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 关于@ComponentScan TypeFilter自定义指定扫描bean的规则

    关于@ComponentScan TypeFilter自定义指定扫描bean的规则

    这篇文章主要介绍了关于@ComponentScan TypeFilter自定义指定扫描bean的规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • VSCode配置java中的lombok解决步骤

    VSCode配置java中的lombok解决步骤

    Lombok是一个java库,可自动插入您的编辑器和构建工具,为您的java增添趣味,这篇文章主要介绍了VSCode配置java中lombok的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-03-03
  • Java中的命名与目录接口JNDI基本操作方法概览

    Java中的命名与目录接口JNDI基本操作方法概览

    这篇文章主要介绍了Java中的命名与目录接口JNDI基本操作方法概览,JNDI提供统一的客户端API使得Java应用程序可以和这些命名服务和目录服务之间进行交互,需要的朋友可以参考下
    2016-03-03
  • Java之理解Redis回收算法LRU案例讲解

    Java之理解Redis回收算法LRU案例讲解

    这篇文章主要介绍了Java之理解Redis回收算法LRU案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • springboot filter配置多个时,执行顺序问题

    springboot filter配置多个时,执行顺序问题

    这篇文章主要介绍了springboot filter配置多个时,执行顺序问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论