Spring MVC 是 Spring 框架中用于构建 Web 应用程序 的模块,基于 MVC(Model-View-Controller)架构模式,旨在分离应用的输入、处理和输出逻辑,简化 Web 开发。
1. MVC 架构分离
Controller
):处理用户请求,调用业务逻辑,返回模型数据和视图名称。Model
):封装业务数据(如表单参数、数据库查询结果)。View
):负责数据展示(如 HTML 页面、JSON/XML 数据)。2. 注解驱动开发
@Controller
:标记控制器类。@RequestMapping
:映射 URL 路径到处理方法。@PathVariable
:获取 URL 中的动态参数(如 /user/{id}
)。@RequestParam
:获取请求参数(查询参数、表单字段)。@ResponseBody
:直接返回数据(如 JSON),跳过视图渲染。3. 灵活的请求处理
GET/POST/PUT/DELETE
等 HTTP 方法,映射同一 URL 到不同处理逻辑。User
对象)。4. 多种视图技术支持
@ResponseBody
返回 JSON/XML 数据,适配接口开发。View
接口,支持 Excel、PDF 等任意输出格式。5. 与 Spring 生态集成
Spring MVC 的核心组件围绕 DispatcherServlet(前端控制器) 设计,处理流程如下:
1. DispatcherServlet
web.xml
或 Spring Boot 中配置映射路径(如 /*
)。2. HandlerMapping(处理器映射器)
@RequestMapping
)、简单 URL 匹配、自定义规则。3. HandlerAdapter(处理器适配器)
HttpRequestHandler
),调用处理器方法。4. Controller(控制器)
ModelAndView
(包含模型数据和视图名称)或直接返回数据(通过 @ResponseBody
)。5. Model(模型)
Model
、ModelMap
、Map
接口),供视图渲染使用。6. ViewResolver(视图解析器)
user/list
)解析为具体的 View
对象(如 JSP 视图、JSON 视图)。7. View(视图)
1. 请求到达 DispatcherServlet
GET /user/1
),请求被配置为前端控制器的 DispatcherServlet
拦截,作为整个请求处理流程的起点。2. 查找处理器(HandlerMapping)
DispatcherServlet
调用注册的 HandlerMapping
(如 RequestMappingHandlerMapping
)。HandlerMapping
根据请求 URL(如 /user/1
)和 HTTP 方法(GET/POST 等),匹配到对应的 控制器方法(标记有 @RequestMapping
等注解的方法)。@RequestMapping("/user/{id}")
,则路径 /user/1
会被正确映射。3. 调用处理器(HandlerAdapter)
DispatcherServlet
通过 HandlerAdapter
调用目标处理器(控制器方法)。HandlerAdapter
负责处理不同类型的处理器(如基于注解的控制器、传统 HttpRequestHandler
),统一调用入口。@PathVariable
)、请求参数(@RequestParam
)、请求体(@RequestBody
)等绑定到方法参数。4. 处理业务逻辑
Model
中(用于视图渲染),或直接返回数据(如 JSON)。ModelAndView
:包含视图名称(如 user/detail
)和模型数据(如 user
对象)。@ResponseBody
注解,返回 JSON/XML 等格式(如 @RestController
场景)。5. 解析视图(ViewResolver)
ModelAndView
或字符串视图名时,进入视图解析流程。ViewResolver
(如 InternalResourceViewResolver
)将逻辑视图名(如 userDetail
)转换为物理视图(如 /WEB-INF/jsp/userDetail.jsp
)。6. 渲染视图
Model
数据生成 HTML 页面。MappingJackson2HttpMessageConverter
将对象转为 JSON,无需视图解析(由 @ResponseBody
触发)。View
会读取 JSP 文件,结合 Model
数据渲染为最终 HTML 内容。7. 返回响应
DispatcherServlet
写回客户端(浏览器或接口调用方)。@ResponseBody
返回 JSON 数据,轻松构建 RESTful API。XML 配置(传统方式)
XML 配置(传统方式)
xml
<!-- web.xml 中配置 DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- springmvc-servlet.xml 配置组件 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
Java 配置(推荐,基于 @Configuration)
Java 配置(推荐,基于 @Configuration)
java
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
// 自定义组件配置(如拦截器、消息转换器)
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/api/**");
}
}
// 自定义组件配置(如拦截器、消息转换器) @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/api/**"); } }
总之,Spring MVC 以 “MVC 架构” 为核心,通过注解驱动和灵活的组件设计,简化了 Web 开发流程,尤其适合需要细粒度控制请求处理和视图渲染的场景。其与 Spring 生态的深度集成,使其成为企业级 Java Web 开发的首选方案之一。结合 Spring Boot 的自动配置,可进一步减少样板代码,提升开发效率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有