四、 Spring Framework基础:Spring MVC

embedded/2025/2/28 20:11:33/

深入解析 Spring MVC:请求映射、数据绑定与验证、视图解析与模板引擎

Spring MVC 是 Spring 框架中用于构建 Web 应用的核心模块,它通过请求映射、数据绑定与验证、视图解析等功能,极大地简化了 Web 开发的复杂性。本文将深入探讨 Spring MVC 的核心特性,帮助你更好地理解和使用这一强大的工具。

1. 请求映射

请求映射是 Spring MVC 的核心功能之一,它通过注解将 HTTP 请求与控制器方法绑定,从而实现请求的分发和处理。

1.1 @Controller@RequestMapping

@Controller 是一个用于标记控制器类的注解,而 @RequestMapping 则用于定义请求映射规则。

示例代码
java">@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/register")public String register() {return "register";}
}

在上述代码中,@Controller 标记了 UserController 为一个控制器类,@RequestMapping("/user") 定义了类级别的请求路径,而方法级别的 @RequestMapping("/register") 定义了具体的方法路径。

1.2 请求方法和路径

@RequestMapping 支持多种属性,如 methodparamsheaders,用于更细粒度的请求映射。

示例代码
java">@RequestMapping(value = "/register", method = RequestMethod.POST)
public String registerUser(@ModelAttribute User user) {return "success";
}

在上述代码中,method = RequestMethod.POST 指定了该方法只处理 POST 请求。

2. 数据绑定与验证

Spring MVC 提供了强大的数据绑定机制,能够自动将请求参数映射到 Java 对象的字段中,同时支持数据验证。

2.1 数据绑定

Spring MVC 的数据绑定机制能够自动将请求中的参数映射到方法参数或 Java 对象的字段中。

示例代码
java">@PostMapping("/register")
public String registerUser(@ModelAttribute User user) {System.out.println("Name: " + user.getName());System.out.println("Age: " + user.getAge());return "success";
}

在上述代码中,@ModelAttribute 注解将请求参数自动绑定到 User 对象的字段中。

2.2 数据验证

Spring MVC 支持使用 @Valid 注解结合 Hibernate Validator 提供的校验注解(如 @NotBlank@Email)来实现数据验证。

示例代码
java">@PostMapping("/register")
public String registerUser(@Valid @ModelAttribute User user, BindingResult result) {if (result.hasErrors()) {return "error";}return "success";
}

在上述代码中,@Valid 注解触发了对 User 对象的验证,BindingResult 用于获取验证结果。

3. 视图解析与模板引擎

Spring MVC 提供了多种视图解析器和模板引擎,用于将控制器返回的视图名称解析为实际的视图资源。

3.1 视图解析器

视图解析器是 Spring MVC 中用于将逻辑视图名解析为实际视图资源的组件。

示例配置
<bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver"><property name="characterEncoding" value="UTF-8"/><property name="order" value="1"/><property name="templateEngine"><bean class="org.thymeleaf.spring6.SpringTemplateEngine"><property name="templateResolver"><bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver"><property name="prefix" value="/WEB-INF/templates/"/><property name="suffix" value=".html"/><property name="templateMode" value="HTML"/><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property>
</bean>

在上述配置中,ThymeleafViewResolver 被用于解析 Thymeleaf 模板。

3.2 模板引擎

Spring MVC 支持多种模板引擎,如 Thymeleaf、Freemarker 和 JSP。

Thymeleaf 示例
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Register</title>
</head>
<body>
<form th:action="@{/register}" method="post"><input type="text" name="name" placeholder="Name"/><input type="number" name="age" placeholder="Age"/><button type="submit">Register</button>
</form>
</body>
</html>

在上述代码中,Thymeleaf 的 th:action 属性用于绑定表单提交的 URL。
默认情况下,Spring Boot 会自动配置 Thymeleaf。

3.3 Freemarker

Freemarker 是一个强大的模板引擎,广泛用于 Java Web 应用中。它支持复杂的模板语法,适合需要高度定制化的场景。

配置 Freemarker

在 Spring MVC 中配置 Freemarker 视图解析器:

java">@Configuration
public class FreemarkerConfig {@Beanpublic ViewResolver freemarkerViewResolver() {FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();resolver.setPrefix("");resolver.setSuffix(".ftl");return resolver;}@Beanpublic FreeMarkerConfigurer freemarkerConfigurer() {FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();configurer.setTemplateLoaderPath("/WEB-INF/views/");return configurer;}
}

在上述代码中,FreeMarkerViewResolver 用于解析视图,FreeMarkerConfigurer 用于配置模板路径。

3.4 Mustache

Mustache 是一个轻量级的模板引擎,支持多种语言,包括 Java。它以简洁的语法和高性能著称。

配置 Mustache

在 Spring MVC 中配置 Mustache 视图解析器:

java">@EnableWebMvc
@Configuration
public class MustacheConfig {@Beanpublic ViewResolver mustacheViewResolver() {MustacheViewResolver resolver = new MustacheViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".html");return resolver;}
}

在上述代码中,MustacheViewResolver 用于解析视图。

3.5 JSP

JSP 是 Java EE 的一部分,允许开发者在 HTML 页面中嵌入 Java 代码。虽然 JSP 的使用逐渐减少,但它仍然是一种有效的模板技术。

配置 JSP

在 Spring MVC 中配置 JSP 视图解析器:

java">@Configuration
public class JspConfig {@Beanpublic ViewResolver jspViewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}
}

在上述代码中,InternalResourceViewResolver 用于解析 JSP 视图。

4. 前后端分离项目中的 Spring MVC 使用

在前后端分离的项目中,前端通常使用 Vue.js、React 或 Angular 等框架,而后端则通过 Spring MVC 提供 RESTful API。Spring MVC 在这种场景下的主要职责是处理 HTTP 请求并返回 JSON 或 XML 格式的数据。

示例:Spring MVC 提供 RESTful API

java">@RestController
@RequestMapping("/api/users")
public class UserController {@GetMappingpublic ResponseEntity<List<User>> getAllUsers() {List<User> users = userService.findAll();return ResponseEntity.ok(users);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User savedUser = userService.save(user);return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);}
}

在上述代码中,@RestController 注解将控制器标记为 RESTful API,@GetMapping@PostMapping 注解分别处理 GET 和 POST 请求。

前端调用示例(使用 Axios)

javascript">axios.get('/api/users').then(response => {console.log(response.data);}).catch(error => {console.error(error);});

在前后端分离的项目中,前端通过 AJAX 请求调用后端提供的 RESTful API。

5. 总结

Spring MVC 是一个功能强大的 Web 框架,它通过请求映射、数据绑定与验证、视图解析等功能,极大地简化了 Web 开发的复杂性。
Spring MVC 提供了多种视图解析器和模板引擎,如 Thymeleaf、Freemarker、Mustache 和 JSP。每种模板引擎都有其特点和适用场景。在前后端分离的项目中,Spring MVC 主要用于提供 RESTful API,而前端则通过 AJAX 请求调用这些接口。本文详细介绍了 Spring MVC 的核心特性,希望这些内容能帮助你在实际开发中更好地使用 Spring MVC。


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

相关文章

useLayoutEffect和useEffect有什么区别?

在 React 中&#xff0c;useEffect 和 useLayoutEffect 是两个用于处理副作用的 Hook。虽然它们在用法上相似&#xff0c;但在执行时间和适用场景上有显著的区别。以下是对这两个 Hook 的详细比较和解释。 1. 基本概念 useEffect 定义&#xff1a;useEffect 是一个 Hook&…

故障诊断 | DE差分算法优化KELM故障诊断(Matlab)

目录 效果一览文章概述DE差分算法优化KELM故障诊断DE差分算法优化KELM故障诊断一、引言1.1、研究背景和意义1.2、故障诊断技术的发展概述1.3、KELM方法在故障诊断中的应用1.4、研究目的与内容二、KELM基本理论2.1、核方法基础2.2、KELM模型原理三、DE差分算法优化KELM参数3.1、…

使用内置命令查看笔记本电池健康状态

如何使用powercfg /batteryreport命令查看笔记本电池健康状态 在Windows系统中&#xff0c;了解笔记本电池的健康状态对于维护电脑性能和预测电池寿命至关重要。Windows 10和Windows 11系统提供了一个内置命令powercfg /batteryreport&#xff0c;可以生成一份详细的电池使用情…

【Docker】使用Docker搭建-MySQL数据库服务

零、更换Docker镜像源 因为国内现在封锁了Docker默认拉取镜像的站点&#xff08;DockerHub&#xff09;&#xff0c;而且国内大部分Docker镜像站已全部下线&#xff0c;导致现在很多朋友在拉取镜像的时候会出现无法拉取的现象&#xff0c;这时候就需要进行更换Docker镜像源。 可…

神经网络中感受野的概念和作用

在神经网络中&#xff0c;感受野&#xff08;Receptive Field&#xff09;是指某个神经单元&#xff08;神经元或者卷积核&#xff09;关注的输入特征区域的大小。它决定了神经网络对输入数据的特定区域的感知能力。 感受野的形成过程 在卷积神经网络中&#xff0c;卷积层是感受…

P8637 [蓝桥杯 2016 省 B] 交换瓶子

P8637 [蓝桥杯 2016 省 B] 交换瓶子 - 洛谷 题目描述 有 N 个瓶子&#xff0c;编号 1∼N&#xff0c;放在架子上。 比如有 5 个瓶子&#xff1a; markdow 2, 1, 3, 5, 4 要求每次拿起 2 个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&a…

lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并、行高设置等。

入口类&#xff1a;exportPdf package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowagie…

大模型系列——专家混合模型 (MoE)快速指南

大模型系列——专家混合模型 (MoE)快速指南 专家混合 (MoE) 已成为一种流行的提高 LLM 效率的架构组件。在这篇博文中,我们将探讨研究人员在实现专家完美混合的道路上所采取的步骤。 专家混合 (MoE) 已成为一种流行的提高 LLM 效率的架构组件。在这篇博文中,我们将探讨研究人…