写点什么

浅谈 SpringMVC 五大组件以及对执行原理的分析

  • 2022 年 6 月 21 日
  • 本文字数:2221 字

    阅读完需:约 7 分钟

Spring MVC 是包含在 spring 中的一个基于 MVC 设计思想的 Web 应用程序框架,目的是简化开发工作,提高开发效率。



 优点


 和 Spring 框架无缝集成,能直接使用 Spring 的 IoC 容器、AOP 支持;


 提供了多种将请求 URL 映射到控制器的机制;并支持参数的类型转换,自动装载,校验等功能;


 具有强大的扩展性,可根据需要方便的扩展框架的功能。

SpringMVC 五大组件

  1. DispatcherServlet 负责分发请求(前端(核心)控制器)

  2. HandlerMapping 负责根据请求 找到对应的控制器(处理器映射器)

  3. Controller 处理请求的控制器

  4. ModelAndView 封装数据信息以及视图信息

  5. ViewResolver 通过处理找到对应的页面(视图解析器)

1、DispatcherServlet (前端(核心)控制器)

DispatcherServlet 是 SpringMVC 最核心的一个控件。它是前端核心控制器,在 web.xml 中进行相关的配置。它可以将发送过来的请求进行匹配操作,再进行拦截。将拦截下来的所有请求根据对应的规则发送到对应的 Controller 进行处理。它是前端控制器设计模式的实现,能够提供 Spring Web MVC 的集中节点,而且负责职责的分派,而且与 Spring IoC 容器无缝集成。


配置 DispatcherServlet :



<!-- 配置前端控制器,配置Servlet --><servlet> <servlet-name>springMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup></servlet><!--配置请求路径--><servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>*.form</url-pattern></servlet-mapping>
复制代码


DispatcherServlet 配置在 web.xml 文件中。init-param 为 Servlet 启动所需参数。DispatcherServlet 会读取初始 shucontextConfigLocation 参数里面的值从而获取 springmvc 的配置位置自启动容器

2、HandlerMapping (处理器映射器)

HandlerMapping 是处理器映射,它的关键作用是将请求进行派发,负责请将求与控制器建立互相对应的关系。它最终由 DispatcherServlet 调用,DispatcherServlet 会从容器中取出所有 HandlerMapping 实例并遍历,让 HandlerMapping 实例根据自己实现类的方式去尝试查找 Handler。它标明了路径与 Controller 的对应关系,不同的路径访问不同的 Controller


配置 HandlerMapping :



<!--开启mvc注解扫描--><mvc:annotation-driven/><!--创建Controller bean--><bean id="helloController" class="包名+类名"/>
<bean class="org.springframework.web.servlrt.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello">helloController</prop> </props> </property></bean>
复制代码

3、Controller (处理请求的控制器)

处理请求的控制器,负责处理由 DispatcherServlet 分发的请求,把用户请求的数据发送到业务处理层处理之后封装成一个 Model ,然后把该 Model 返回给对应的 View 进行展示。它实际上就是用来处理业务逻辑的 Java 类。


配置 Controller 类 :


@Controllerpublic class DataController {    @RequestMapping("getData")    public ModeAndView hello(String Id) {        System.out.println("hello");        return new ModeAndView("hello")    }}
复制代码

4、ModelAndView (封装数据和视图信息)

ModelAndView 是进行封装数据信息和视图信息的模型。使用 ModelAndView 类用来存储处理完后的结果数据。ModelAndView 中的 Model 代表模型,View 代表视图,很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的 model 属性中,把要返回的视图信息存储在该类的 view 属性中,然后返回给 SpringMVC 框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。

5、ViewResolver (视图解析器)

视图解析器 ViewResolver 的主要作用是把一个逻辑上的视图名称解析为一个视图。


配置 ViewResolver :



<!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResour ceViewResolver"> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".html"></property></bean>
复制代码

SpringMVC 执行原理


  1. 发起请求到前端控制器 DispatcherServlet

  2. 前端控制器调用处理器映射器 HandlerMapping 查找 Handler

  3. 处理器映射器向前端控制器返回找到的 Handler

  4. 前端控制器调用处理器适配器 HandlerAdapter 执行 Handler

  5. 处理器适配器去执行 Handler

  6. Handler 执行完成给处理器适配器返回 ModelAndView

  7. 处理器适配器向前端控制器返回 ModelAndView

  8. 前端控制器请求视图解析器 ViewResolver 去进行视图解析

  9. 视图解析器向前端控制器返回视图 View

  10. 前端控制器进行视图渲染向用户响应结果

总结

DispatcherServlet(前端控制器)接收来自客户端的 URL 请求。请求分发器借助处理器映射器(HandlerMapping)来查找对应的处理器 Handler(控制器),分发本次请求。请求分发器利用处理器适配器(HandlerAdapter)来执行对应的处理器(控制器)。处理器调用方法处理本次请求,返回模型视图对象(ModelAndView)。请求分发器借助视图解析器(ViewResolver)解析模型视图,得到对应的视图(View)。请求分发器调用视图中的方法,同时将数据模型交给视图对象,完成给客户端的应答。


发布于: 17 小时前阅读数: 8
用户头像

该来的总会来,或迟或早。🎈 2022.06.13 加入

有JAVA方面3年学习经验,csdn/51cto等平台优质作者,华为云云享专家、阿里云受邀专家博主,擅长JAVA,大数据等方面的技术等。

评论

发布
暂无评论
浅谈SpringMVC五大组件以及对执行原理的分析_springmvc_百思不得小赵_InfoQ写作社区