深入剖析Spring MVC

embedded/2025/2/22 21:16:32/

一、Spring MVC 概述

1. 什么是 Spring MVC?

Spring MVC 是基于 Spring 框架的 Web 框架,它实现了 MVC 设计模式,将应用程序分为三个核心部分:

  • Model:封装应用程序的数据和业务逻辑。

  • View:负责渲染数据(通常是 HTML 页面)。

  • Controller:处理用户请求并协调 Model 和 View。

2. Spring MVC 的优势

  • 松耦合:通过清晰的职责分离,降低代码的耦合度。

  • 灵活性:支持多种视图技术(如 JSP、Thymeleaf、FreeMarker 等)。

  • 强大的数据绑定:自动将请求参数绑定到 Java 对象。

  • 易于测试:Controller 是 POJO(Plain Old Java Object),易于单元测试。

  • 与 Spring 生态无缝集成:可以轻松整合 Spring 的其他模块(如 Spring Security、Spring Data 等)。


二、Spring MVC 的核心组件

1. DispatcherServlet

DispatcherServlet 是 Spring MVC 的核心,负责接收所有的 HTTP 请求并将其分发给相应的 Controller。

2. HandlerMapping

HandlerMapping 负责将请求映射到对应的 Controller。

3. Controller

Controller 是处理用户请求的核心组件,通常使用 @Controller 注解标记。

4. ModelAndView

ModelAndView 是 Controller 返回的结果,包含模型数据(Model)和视图名称(View)。

5. ViewResolver

ViewResolver 负责根据视图名称解析实际的视图(如 JSP 页面)。

6. HandlerInterceptor

HandlerInterceptor 用于在请求处理前后执行额外的逻辑(如权限检查、日志记录等)。


三、Spring MVC 的工作流程

关键阶段解析

        1. 请求分发

     DispatcherServlet 接收请求后,委托 HandlerMapping 查找匹配的控制器。

        2. 参数处理

      HandlerAdapter 负责方法参数绑定(支持 @RequestParam@RequestBody 等注解)。

        3. 拦截器链

     HandlerInterceptor 在预处理、后处理、完成回掉三个阶段插入逻辑。

        4. 视图渲染

     ViewResolver 根据逻辑视图名定位物理视图,View 对象将模型数据转换为响应内容。

四、Spring MVC 的配置

1. 基于 XML 的配置

1.1 在 web.xml 中配置 DispatcherServlet

<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc-config.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

 1.2  在 spring-mvc-config.xml 中配置 Spring MVC

<context:component-scan base-package="com.example.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" />
</bean>

2. 基于 JavaConfig 的配置

2.1 在 web.xml 中配置 DispatcherServlet

=================== 配置与 1.1 相同 ==================

2.2 使用 @Configuration 和 @EnableWebMvc 注解配置 Spring MVC

java">@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
public class WebConfig implements WebMvcConfigurer {@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}
}

五、Spring MVC 的核心注解

1. @Controller

        标记一个类为 Controller。

2. @RequestMapping

        将请求 URL 映射到 Controller 的方法。

3. @RequestParam

        将请求参数绑定到方法参数。

4. @ModelAttribute

        将请求参数绑定到模型对象。

5. @ResponseBody

        将方法返回值直接写入 HTTP 响应体。

6. @PathVariable

        将 URL 中的变量绑定到方法参数。

六、Spring MVC 的高级特性

1. 文件上传

使用 MultipartFile 处理文件上传:

java">@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file) {// 处理文件return "uploadSuccess";
}

2. 异常处理

使用 @ExceptionHandler 处理异常:

java">@ExceptionHandler(UserNotFoundException.class)
public String handleUserNotFound() {return "error/userNotFound";
}

http://www.ppmy.cn/embedded/164441.html

相关文章

AI到底能做些什么:详细产品功能对比

1. 引言 人工智能&#xff08;AI&#xff09;作为当今科技领域的热门话题&#xff0c;已经在多个行业中展现出巨大的潜力。从自然语言处理到计算机视觉&#xff0c;从语音识别到自动化机器人&#xff0c;AI的应用范围广泛且深入。本文将详细探讨AI的核心功能、在各行业的应用、…

低代码技术在医院的应用与思考

近年来&#xff0c;低代码这一概念在医疗信息化领域频繁出现。那么&#xff0c;低代码究竟是什么&#xff1f;它因何而生&#xff1f;在医院信息系统建设与运维中&#xff0c;低代码技术又有哪些适用的应用场景&#xff1f;对于用户而言&#xff0c;低代码技术又存在哪些有待改…

idea 部署 AJ-Report 启动的注意事项

AJ-Report 入门参考&#xff1a; AJ-Report 初学(入门教程) gitee 下载&#xff1a;https://gitee.com/anji-plus/report/releases 根据上面提供的 gitee 下载链接&#xff0c;点击直接下载 最上面的就是最新版本的&#xff0c;旧版本往下拉就可以找到&#xff0c;有三个下载…

免费deepseek的API获取教程及将API接入word或WPS中

免费deepseek的API获取教程: 1 火山方舟 https://console.volcengine.com/中注册 填写邀请码&#xff1a;WGDGUTTL 即可获取3250万R1模型tokens 或硅基流动 https://cloud.siliconflow.cn/中注册时填写邀请码&#xff1a;GAejkK6X即可获取2000 万 Tokens; 2 按照图中步骤进行…

Vue Axios

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 使用 - Axios 目录 Axios 请求方法 功能 安装 使用CDN 引入axios 使用axios 赋值 总结 Axios Axios&#xff0c;基于 Promise 的 HTTP 客户端&#xff0c;可以工作于浏览器中&#xff0c;也可以在 node.js 中使用…

JMeter 中实现 100 个用户在 3 秒内并发登录

在 JMeter 中实现 100 个用户在 3 秒内并发登录,需要合理配置线程组、定时器和测试逻辑。以下是具体步骤: 1. 创建测试计划 打开 JMeter。右键点击“Test Plan”,选择 Add > Threads (Users) > Thread Group。 : 设置为 100(模拟 100 个用户)。 : 设置为 3

计算机视觉算法实战——图像风格迁移(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 一、图像风格迁移领域简介✨✨ 图像风格迁移&#xff08;Image Style Transfer&#xff09;是计算机视觉领域的核心技术之一&#xff0c;旨在…

AI赋能生态学暨“ChatGPT+”多技术融合在生态系统服务中的实践技术应用与论文撰写

随着全球城市化进程的加速与人类活动的频繁&#xff0c;土地利用及生态系统服务面临巨大的压力&#xff0c;水土流失、植被退化、生物多样性丧失等环境问题日益严重。如何在土地供需矛盾中维持生态安全、优化土地利用模式&#xff0c;成为当前生态学与土地规划领域的研究重点。…