目录

1.SpringMVC介绍

2.SpringMVC关键组件

1.DispatcherServlet(前端控制器)

2.HandlerMapping(处理器映射器)

3.HandlerAdapter(处理器适配器)

4.Handler处理器(Controller)

5. ViewResolver(视图解析器)

6.View(视图)

3.SpringMVC处理流程

4.SpringMVC的主要优势


1.SpringMVC介绍

Spring MVC 是 Spring Framework 的一个核心模块,是一个基于 MVC 设计模式​ 的优秀 Web 框架。它本质上是 Spring 框架在 Web 应用领域的延伸,旨在简化基于 MVC 架构的 Web 应用程序开发。MVC全名是Model View Controller,是模型(model)视图(view)控制器(controller)的缩写。

  • 模型(model)代表应用程序的核心数据和业务规则。它专注于处理什么数据数据如何变化
  • 视图(view):负责与用户直接交互的界面部分。它专注于如何展示数据接收用户输入
  • 控制器(controller):作为视图和模型之间的协调者。它接收用户的输入,决定使用哪个模型来处理,以及选择哪个视图来展示结果。

我们经常在项目中构建的基础三层架构(controller,service,mapper)就是在它们的基础之上所诞生的。


2.SpringMVC关键组件

1.DispatcherServlet(前端控制器)

前端控制器是一种设计模式,它提供了一个统一的入口点来处理所有的 Web 请求。在传统 Servlet 开发中,每个 URL 可能需要一个单独的 Servlet,而前端控制器模式用一个 Servlet 处理所有请求,然后分发到不同的处理器。Spring MVC 中就是 DispatcherServlet这个具体的实现。

职责

  • 接收所有 HTTP 请求

  • 协调其他组件完成请求处理

  • 返回最终响应给客户端

DispatcherServlet可以说是整个SpringMVC的核心所在,它承担着从用户请求到用户接收的一整块处理链条的责任。

配置演示:

<!-- web.xml 配置 -->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern> <!-- 拦截所有请求 -->
</servlet-mapping>

2.HandlerMapping(处理器映射器)

HandlerMapping 是一个策略接口,定义了如何根据 HTTP 请求找到对应的处理器(Handler)。它在 DispatcherServlet 和具体处理器之间建立桥梁。

职责:

  • 根据请求的 URL 路径,找到对应的处理器(Handler)

  • 维护请求路径与处理器的映射关系

常用实现:

  • RequestMappingHandlerMapping:处理 @RequestMapping注解(最常用)
  • BeanNameUrlHandlerMapping:根据 Bean 名称映射
  • SimpleUrlHandlerMapping:通过配置文件映射

大概说一下它的一个工作方式,我们假设有一个GET /users/list请求,HandlerMapping 查找映射表:"/users/list"就会转化成UserController.listUsers()给前端控制器。

3.HandlerAdapter(处理器适配器)

HandlerAdapter 是一个适配器接口,它让 DispatcherServlet 能够以统一的方式调用各种不同类型的处理器(Handler),而不需要关心处理器的具体实现。

职责

  • 适配不同类型的处理器(Controller)

  • 统一调用处理器方法

  • 处理请求参数绑定和返回值处理

常用实现:

  • RequestMappingHandlerAdapter处理 @Controller和 @RequestMapping
  • SimpleControllerHandlerAdapter处理 Controller接口实现
  • HttpRequestHandlerAdapter处理 HttpRequestHandler实现

HandlerAdapter会进行参数封装数据格式转换数据校验等操作

4.Handler处理器(Controller)

Handler处理器是 Spring MVC 的业务逻辑执行核心,是实际处理 HTTP 请求并返回响应的组件。

职责

  • 执行具体的业务逻辑

  • 调用 Service 层处理业务

  • 准备模型数据

  • 返回视图信息

最常见的就是我们平时写的注解形式

@Controller
public class UserController {
    @GetMapping("/users")
    public String listUsers(Model model) {
        model.addAttribute("users", userService.findAll());
        return "userList";
    }
}

5. ViewResolver(视图解析器)

ViewResolver 是一个策略接口,用于解析控制器返回的视图名称,并返回一个用于渲染的 View 对象。它是 MVC 架构中视图层的重要桥梁

职责

  • 将 Controller 返回的逻辑视图名解析为实际的 View 对象

  • 支持多种视图技术(JSP、Thymeleaf、FreeMarker等)

常用实现

  • InternalResourceViewResolver:用于 JSP(最常用)
  • ThymeleafViewResolver:用于 Thymeleaf
  • FreeMarkerViewResolver:用于 FreeMarker
  • BeanNameViewResolver:根据 Bean 名称解析

一个基础的视图解析器配置类如下:

@Configuration
public class WebConfig {
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

简单说一下流程:

1.Handler处理器返回: "user/list"

2.InternalResourceViewResolver 解析:
    前缀: "/WEB-INF/views/"
    视图名: "user/list"
    后缀: ".jsp"

实际路径: "/WEB-INF/views/user/list.jsp"

3.最后创建 InternalResourceView 对象返回

6.View(视图)

View 是一个渲染接口,负责将模型数据渲染成最终的响应格式(HTML、JSON、XML、PDF、Excel等)。它是用户界面的最终呈现者。

职责

  • 将模型数据渲染成最终响应(通常是 HTML)

  • 支持不同的视图技术


3.SpringMVC处理流程

说完SpringMVC的一些关键组件,我们来看看这些组件到底是如何相互配合,完成从请求到接收数据的过程。

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

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

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

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

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

6.Handler 执行完成返回 ModelAndView​

7.HandlerAdapter 将 Handler 执行结果 ModelAndView 返回到 DispatcherServlet​

8.DispatcherServlet 将 ModelAndView 传给 ViewResolver 视图解析器​

9.ViewResolver 解析后返回具体 View​

10.DispatcherServlet 对 View 进行渲染视图(即将模型数据 model 填充至视图中)​

11.DispatcherServlet 响应用户


4.SpringMVC的主要优势

1.与 Spring 无缝集成:可以充分利用 Spring 的 IOC(控制反转)和 AOP(面向切面编程)特性,方便地进行依赖注入和事务管理。

2.高度可配置:几乎所有组件都可以通过配置文件(XML)或注解进行定制和扩展

3.常用强大注解:

  • @Controller:标记一个类为控制器。
  • @RequestMapping:将 URL 映射到处理方法。
  • @RequestParam, @PathVariable:绑定请求参数和路径变量。
  • @RequestBody, @ResponseBody:支持 RESTful 风格的 JSON/XML 数据绑定。

4.灵活的视图技术:支持 JSP、Thymeleaf、FreeMarker、Velocity、PDF、Excel 等多种视图技术。

5.拦截器:提供 HandlerInterceptor接口,允许在请求处理前后执行通用逻辑(如权限检查、日志记录),功能类似于过滤器但更精细。


制作不易,如果对你有帮助请点赞评论收藏感谢大家的支持

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐