news 2026/4/15 17:56:24

SpringMVC

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringMVC

1. SpringMVC 架构概述

SpringMVC 是 Spring 框架的一个重要组成部分,是一个基于请求驱动的框架,用于处理 Web 请求。SpringMVC 基于前端控制器模式,所有的请求都通过DispatcherServlet进行分发。

1.1 前端控制器模式
  • 前端控制器(DispatcherServlet):负责接收所有 HTTP 请求并将它们委派给具体的处理器。
  • 处理器映射器(HandlerMapping):根据请求的 URL 定位到相应的处理器(Controller)。
  • 处理器适配器(HandlerAdapter):用于将请求适配为 Controller 的方法调用。
  • 视图解析器(ViewResolver):将返回的逻辑视图名称解析为具体的视图。

2. DispatcherServlet:请求的中央控制器

DispatcherServlet是 SpringMVC 的核心,负责请求的分发。它会协调所有组件,如 HandlerMapping、HandlerAdapter 和 ViewResolver。

2.1 初始化和请求分发
  • 当用户发起请求时,DispatcherServlet会拦截请求,并使用HandlerMapping来查找对应的处理器。
  • 找到处理器后,DispatcherServlet使用HandlerAdapter来执行该处理器。
关键源码
  • DispatcherServlet负责处理 HTTP 请求并将它们转交给HandlerMapping
  • HandlerExecutionChain表示一个请求和其处理器之间的关系,HandlerAdapter用于执行具体的处理。
2.2 生命周期
  • 初始化时:DispatcherServlet 会读取web.xml或 Spring 配置文件中的配置,加载应用上下文。
  • 处理请求时:DispatcherServlet 会通过 AOP 拦截器链(HandlerInterceptor)对请求进行处理。

3. HandlerMapping:请求与处理器的映射

HandlerMapping是 SpringMVC 中用于根据请求 URL 查找相应处理器的组件。SpringMVC 提供了多种HandlerMapping实现,最常用的是RequestMappingHandlerMapping

3.1 请求映射的核心方法
关键源码
  • RequestMappingHandlerMapping是 SpringMVC 中最常用的HandlerMapping实现,它会根据请求的 URL 匹配到具体的处理器方法。

4. HandlerAdapter:请求与处理器方法的适配

HandlerAdapter是用于处理器方法适配的接口,它将请求和响应传递给相应的控制器方法。SpringMVC 通过不同的HandlerAdapter实现来适配不同类型的处理器。

4.1 适配器的核心方法
关键源码
  • RequestMappingHandlerAdapter负责将 HTTP 请求适配到实际的控制器方法。它通过反射调用控制器的方法,并将结果封装为ModelAndView

5. Controller:处理器和视图的结合

Controller是 SpringMVC 中用于处理请求的核心组件。SpringMVC 提供了多种方式来创建 Controller,例如通过实现Controller接口或者使用@Controller注解标注类。

5.1 Controller 方法的执行
关键源码
  • 在 SpringMVC 中,@RequestMapping注解用于将 HTTP 请求映射到控制器方法。
  • handleRequest方法会在匹配到/hello请求时执行,并返回视图名helloView
5.2 数据的传递与绑定

SpringMVC 支持模型(Model)的传递。返回的视图可以通过ModelAndView或者@ModelAttribute将数据传递到视图层。

关键源码
  • ModelAndView用于将控制器返回的模型数据和视图名称传递给视图解析器。

6. ViewResolver:视图的解析

ViewResolver是 SpringMVC 中用于解析视图名的接口。它的实现会根据返回的逻辑视图名解析出具体的视图对象,例如 JSP、Thymeleaf 等。

6.1 视图解析的实现
关键源码

java复制

public class InternalResourceViewResolver implements ViewResolver { private String prefix = "/WEB-INF/views/"; private String suffix = ".jsp"; @Override public View resolveViewName(String viewName, Locale locale) throws Exception { return new InternalResourceView(prefix + viewName + suffix); } }
  • InternalResourceViewResolver会将逻辑视图名(如helloView)解析成一个具体的视图对象(如/WEB-INF/views/helloView.jsp)。

7. SpringMVC 中的拦截器:HandlerInterceptor

SpringMVC 提供了HandlerInterceptor机制,在请求处理前后进行拦截操作。可以用于权限校验、日志记录等。

7.1 拦截器的核心方法
关键源码

java复制

public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("Pre-handle logic"); return true; // 继续执行请求 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("Post-handle logic"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("After completion logic"); } }
  • preHandle:在请求处理之前执行。
  • postHandle:在请求处理后但在视图渲染前执行。
  • afterCompletion:在请求完成后执行。

总结

SpringMVC 是一个基于前端控制器模式的 Web 框架,通过DispatcherServletHandlerMappingHandlerAdapterViewResolver等组件协同工作,实现了请求的接收、分发、处理和视图渲染。Controller是请求处理的核心,而HandlerInterceptor提供了强大的拦截机制,可用于日志记录、权限校验等。通过灵活配置这些组件,SpringMVC 可以满足复杂的 Web 开发需求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 10:30:50

制作小商家线上引流工具,生成适配线上引流方案(朋友圈/短视频),提供文案模板,帮小商家快速获客,提高爆光。

1. 实际应用场景与痛点分析场景描述- 小商家(餐饮店、服装店、美甲店、培训机构等)想要通过线上渠道吸引顾客,但:1. 不懂如何写朋友圈或短视频文案。2. 不了解不同平台的引流玩法。3. 没有现成的模板,每次都要从零开始…

作者头像 李华
网站建设 2026/4/14 18:39:27

= delete和= default

你想弄明白C中 delete和 default这两个语法的区别与用法,它们是C11引入的核心特性,主要用于精准控制类的特殊成员函数(如构造函数、拷贝构造、赋值运算符等)。我会用通俗的语言实战示例,讲清两者的核心用途、区别和使用…

作者头像 李华
网站建设 2026/4/4 16:14:56

JAVA旅游系统:畅享一站式智慧出行

JAVA旅游系统通过整合多端接入、智能推荐、实时数据处理与高并发架构,为用户提供了一站式智慧出行体验,显著提升了旅游服务的便捷性与个性化水平。以下是具体分析:一、技术架构:稳定高效,支撑高并发场景跨平台兼容性JA…

作者头像 李华
网站建设 2026/4/10 17:20:31

使用工具Postman快速导出python接口测试脚本

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快Postman的脚本可以导出多种语言的脚本,方便二次维护开发。Python的requests库,支持python2和python3,用于发送http/https请求使用…

作者头像 李华