Spring MVC 框架学习笔记:从入门到精通的实战指南

devtools/2025/2/24 2:39:21/

目录

1. Spring MVC 概述

2. Spring MVC 项目搭建

3. Spring MVC 执行流程

4. Spring MVC @RequestMapping 注解

5. Spring MVC 获取请求参数

6. Spring MVC 常见注解

7. Spring MVC 响应处理

8. Spring MVC SSM 整合

9. Spring MVC 作用域传参

10. Spring MVC 上传

11. Spring MVC 下载

12. Spring MVC 拦截器

13. Spring MVC 异常处理

14. Spring MVC 其他注解

总结


前言

在 Java Web 开发领域,Spring MVC 框架无疑是众多开发者的选择之一。它基于 Spring 框架,提供了强大的 MVC 架构支持,帮助开发者构建高性能、可维护的 Web 应用程序。本文将按照清晰的目录结构,带你深入了解 Spring MVC 的核心概念、功能特性以及实战应用。

1. Spring MVC 概述

Spring MVC 是 Spring 框架的一部分,专门用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序分为模型、视图和控制器三个部分,从而实现代码的高内聚和低耦合。

2. Spring MVC 项目搭建

搭建一个 Spring MVC 项目需要以下步骤:

  1. 创建 Maven 项目 :在 IDE 中创建一个新的 Maven 项目,并添加 Spring MVC 的依赖。

xml

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.10</version>
</dependency>
  1. 配置前端控制器 :在 web.xml 文件中配置 DispatcherServlet,作为前端控制器。

xml

<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
  1. 配置视图解析器 :在 Spring 配置文件中配置视图解析器,指定视图文件的前缀和后缀。

xml

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/>
</bean>

3. Spring MVC 执行流程

Spring MVC 的执行流程如下:

  1. 用户发送请求 :用户通过浏览器发送 HTTP 请求到服务器。

  2. 前端控制器接收请求DispatcherServlet 接收到请求,并将其分发到合适的处理器。

  3. 处理器映射器查找处理器HandlerMapping 查找与请求匹配的处理器(Controller)。

  4. 处理器适配器调用处理器HandlerAdapter 调用处理器方法,并返回 ModelAndView 对象。

  5. 视图解析器解析视图ViewResolver 将视图名称解析为实际的视图对象。

  6. 视图渲染 :视图对象使用模型数据进行渲染,并将结果返回给用户。

4. Spring MVC @RequestMapping 注解

@RequestMapping 是 Spring MVC 中最常用的注解之一,用于将请求映射到处理器方法上。以下是一个简单的示例:

java

@Controller
public class MyController {@RequestMapping("/hello")public String hello() {return "hello";}
}

5. Spring MVC 获取请求参数

Spring MVC 提供了多种方式获取请求参数,包括:

  • 通过方法参数获取 :直接在方法参数中声明需要的参数名称。

java

@Controller
public class MyController {@RequestMapping("/greet")public String greet(@RequestParam("name") String name, Model model) {model.addAttribute("message", "Hello, " + name + "!");return "greet";}
}
  • 通过 @ModelAttribute 获取 :将请求参数绑定到 Java 对象上。

java

@Controller
public class MyController {@RequestMapping("/user")public String getUser(@ModelAttribute("user") User user, Model model) {model.addAttribute("user", user);return "userDetail";}
}

6. Spring MVC 常见注解

Spring MVC 中常用的注解包括:

  • @Controller :标记一个类为控制器。

  • @RequestMapping :将请求映射到处理器方法上。

  • @RequestParam :获取请求参数。

  • @ModelAttribute :绑定请求参数到 Java 对象。

  • @ResponseBody :将方法返回值直接写入响应体。

7. Spring MVC 响应处理

Spring MVC 支持多种响应处理方式,包括:

  • 返回字符串 :返回视图名称,由视图解析器解析为实际视图。

java

@Controller
public class MyController {@RequestMapping("/hello")public String hello() {return "hello";}
}
  • 返回 ModelAndView :包含模型数据和视图信息。

java

@Controller
public class MyController {@RequestMapping("/hello")public ModelAndView hello() {ModelAndView modelAndView = new ModelAndView("hello");modelAndView.addObject("message", "Hello, Spring MVC!");return modelAndView;}
}
  • 返回 JSON 数据 :通过 @ResponseBody 注解返回 JSON 数据。

java

@Controller
public class MyController {@RequestMapping("/user")@ResponseBodypublic User getUser() {User user = new User("John", 30);return user;}
}

8. Spring MVC SSM 整合

SSM(Spring + Spring MVC + MyBatis)是常见的 Java Web 开发框架组合。整合步骤如下:

  1. 添加依赖 :在 pom.xml 中添加 Spring、Spring MVC 和 MyBatis 的依赖。

  2. 配置数据源 :配置数据库连接信息。

xml

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="root"/>
</bean>
  1. 配置事务管理器 :配置事务管理器,管理数据库事务。

xml

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean>
  1. 配置 MyBatis :配置 MyBatis 的 SqlSessionFactory 和 Mapper。

xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

9. Spring MVC 作用域传参

Spring MVC 支持多种作用域传参,包括:

  • 请求作用域(Request Scope) :默认作用域,参数在请求范围内有效。

  • 会话作用域(Session Scope) :参数在会话范围内有效。

java

@Controller
public class MyController {@RequestMapping("/login")public String login(@RequestParam("username") String username, HttpSession session) {session.setAttribute("user", username);return "home";}
}
  • 应用作用域(Application Scope) :参数在应用范围内有效。

10. Spring MVC 上传

Spring MVC 提供了简单的文件上传功能,通过 @RequestParam 注解获取上传的文件对象。

java

@Controller
public class FileController {@PostMapping("/upload")public String upload(@RequestParam("file") MultipartFile file) {try {file.transferTo(new File("path/to/save/" + file.getOriginalFilename()));} catch (IOException e) {e.printStackTrace();}return "uploadSuccess";}
}

11. Spring MVC 下载

Spring MVC 也支持文件下载功能,通过设置响应头和输出流实现。

java

@Controller
public class FileController {@GetMapping("/download")public void download(HttpServletResponse response) {File file = new File("path/to/download/file.txt");response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=file.txt");try (FileInputStream fis = new FileInputStream(file);OutputStream os = response.getOutputStream()) {byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) > 0) {os.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();}}
}

12. Spring MVC 拦截器

Spring MVC 支持拦截器,用于在请求处理的不同阶段执行特定逻辑。以下是一个简单的拦截器示例:

java

public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("Pre Handle");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("Post Handle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("After Completion");}
}

注册拦截器:

xml

<bean class="org.springframework.web.servlet.HandlerInterceptorAdapter"><property name="interceptors"><list><ref bean="myInterceptor"/></list></property>
</bean>

13. Spring MVC 异常处理

Spring MVC 提供了全局异常处理器,通过 @ControllerAdvice 注解实现。

java

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ModelAndView handleException(Exception e) {ModelAndView modelAndView = new ModelAndView("error");modelAndView.addObject("message", e.getMessage());return modelAndView;}
}

14. Spring MVC 其他注解

Spring MVC 还提供了其他一些有用的注解,如:

  • @InitBinder :用于初始化数据绑定。

java

@Controller
public class MyController {@InitBinderpublic void initBinder(WebDataBinder binder) {binder.setFieldDefaultPrefix("user.");}
}
  • @SessionAttributes :用于将模型属性添加到会话中。

java

@Controller
@SessionAttributes("user")
public class MyController {// ...
}

总结

Spring MVC 作为 Spring 框架的重要组成部分,提供了强大的 Web 开发能力。通过学习 Spring MVC 的核心概念和功能特性,结合实战应用,可以快速构建高性能、可维护的 Web 应用程序。希望本文能够帮助你深入理解 Spring MVC 的精髓,为你的开发工作提供有力支持。如果你有任何问题或建议,欢迎在评论区留言,我们一起交流学习


http://www.ppmy.cn/devtools/161270.html

相关文章

Maven 构建中的安全性与合规性检查

在现代软件开发中&#xff0c;确保应用程序的安全性和合规性至关重要。随着开源软件和第三方依赖的广泛使用&#xff0c;构建过程中对依赖的安全性和合规性检查变得尤为重要。通过 Maven 构建工具&#xff0c;我们可以集成多种安全性和合规性检查机制&#xff0c;帮助开发者检测…

基于Python+Vue开发的商城管理系统源代码

项目简介 该项目是基于PythonVue开发的商城管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Python的网上商城管…

探索与Cursor协作创建一个完整的前后端分离的项目的最佳实践

探索与Cursor协作创建一个完整的前后端分离的项目的最佳实践 Cursor简介 Cursor在目前代表了AI编程技术的顶峰。在一定程度上可以说是当今AI时代的最强生产力代表。为此,不惜重金开了年费会员来紧跟时代步伐。当然cline、roo code、trae等开源或者免费产品也在紧追不舍。 C…

DeepSeek 提示词:定义、作用、分类与设计原则

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

Python爬虫实战:从零到一构建数据采集系统

文章目录 前言一、准备工作1.1 环境配置1.2 选择目标网站 二、爬虫实现步骤2.1 获取网页内容2.2 解析HTML2.3 数据保存 三、完整代码示例四、优化与扩展4.1 反爬应对策略4.2 动态页面处理4.3 数据可视化扩展 五、注意事项六、总结互动环节 前言 在大数据时代&#xff0c;数据采…

深度解读Grok-2:新一代AI大模型的崛起

随着人工智能技术的飞速发展&#xff0c;越来越多的创新型大语言模型&#xff08;LLM&#xff09;开始涌现。Grok-2&#xff0c;作为OpenAI的后继版本之一&#xff0c;在技术和应用上都表现出了强大的潜力。本文将深入解析Grok-2大模型的技术架构、发展历程、功能特性、应用场景…

通俗诠释 DeepSeek-V3 模型的 “671B” ,“37B”与 “128K”,用生活比喻帮你理解模型的秘密!

欢迎来到涛涛聊AI。 在DeepSeek-V3模型的参数描述中&#xff0c;你可能会看到类似“671B 37B 128K”这样的标记。这些字母和数字的组合看起来像密码&#xff0c;但其实它们揭示了模型的“大脑容量”和“工作方式”。我们用日常生活的比喻来解释&#xff1a; 一、数字含义&…

问题记录汇总

记录一些问题 如何分析错误帧问题-CSDN博客