四、 Spring Framework基础:Spring MVC

打印 上一主题 下一主题

主题 880|帖子 880|积分 2644

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

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

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

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

  1. @Controller
  2. @RequestMapping("/user")
  3. public class UserController {
  4.     @RequestMapping("/register")
  5.     public String register() {
  6.         return "register";
  7.     }
  8. }
复制代码
在上述代码中,@Controller 标志了 UserController 为一个控制器类,@RequestMapping("/user") 定义了类级别的请求路径,而方法级别的 @RequestMapping("/register") 定义了详细的方法路径。
1.2 请求方法和路径

@RequestMapping 支持多种属性,如 method、params 和 headers,用于更细粒度的请求映射。
示例代码

  1. @RequestMapping(value = "/register", method = RequestMethod.POST)
  2. public String registerUser(@ModelAttribute User user) {
  3.     return "success";
  4. }
复制代码
在上述代码中,method = RequestMethod.POST 指定了该方法只处置惩罚 POST 请求。
2. 数据绑定与验证

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

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

  1. @PostMapping("/register")
  2. public String registerUser(@ModelAttribute User user) {
  3.     System.out.println("Name: " + user.getName());
  4.     System.out.println("Age: " + user.getAge());
  5.     return "success";
  6. }
复制代码
在上述代码中,@ModelAttribute 注解将请求参数自动绑定到 User 对象的字段中。
2.2 数据验证

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

  1. @PostMapping("/register")
  2. public String registerUser(@Valid @ModelAttribute User user, BindingResult result) {
  3.     if (result.hasErrors()) {
  4.         return "error";
  5.     }
  6.     return "success";
  7. }
复制代码
在上述代码中,@Valid 注解触发了对 User 对象的验证,BindingResult 用于获取验证效果。
3. 视图剖析与模板引擎

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

视图剖析器是 Spring MVC 中用于将逻辑视图名剖析为实际视图资源的组件。
示例配置

  1. <bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver">
  2.     <property name="characterEncoding" value="UTF-8"/>
  3.     <property name="order" value="1"/>
  4.     <property name="templateEngine">
  5.         <bean class="org.thymeleaf.spring6.SpringTemplateEngine">
  6.             <property name="templateResolver">
  7.                 <bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver">
  8.                     <property name="prefix" value="/WEB-INF/templates/"/>
  9.                     <property name="suffix" value=".html"/>
  10.                     <property name="templateMode" value="HTML"/>
  11.                     <property name="characterEncoding" value="UTF-8"/>
  12.                 </bean>
  13.             </property>
  14.         </bean>
  15.     </property>
  16. </bean>
复制代码
在上述配置中,ThymeleafViewResolver 被用于剖析 Thymeleaf 模板。
3.2 模板引擎

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

  1. <!DOCTYPE html>
  2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Register</title>
  6. </head>
  7. <body>
  8. <form th:action="@{/register}" method="post">
  9.     <input type="text" name="name" placeholder="Name"/>
  10.     <input type="number" name="age" placeholder="Age"/>
  11.     <button type="submit">Register</button>
  12. </form>
  13. </body>
  14. </html>
复制代码
在上述代码中,Thymeleaf 的 th:action 属性用于绑定表单提交的 URL。
默认情况下,Spring Boot 会自动配置 Thymeleaf。
3.3 Freemarker

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

在 Spring MVC 中配置 Freemarker 视图剖析器:
  1. @Configuration
  2. public class FreemarkerConfig {
  3.     @Bean
  4.     public ViewResolver freemarkerViewResolver() {
  5.         FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
  6.         resolver.setPrefix("");
  7.         resolver.setSuffix(".ftl");
  8.         return resolver;
  9.     }
  10.     @Bean
  11.     public FreeMarkerConfigurer freemarkerConfigurer() {
  12.         FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
  13.         configurer.setTemplateLoaderPath("/WEB-INF/views/");
  14.         return configurer;
  15.     }
  16. }
复制代码
在上述代码中,FreeMarkerViewResolver 用于剖析视图,FreeMarkerConfigurer 用于配置模板路径。
3.4 Mustache

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

在 Spring MVC 中配置 Mustache 视图剖析器:
  1. @EnableWebMvc
  2. @Configuration
  3. public class MustacheConfig {
  4.     @Bean
  5.     public ViewResolver mustacheViewResolver() {
  6.         MustacheViewResolver resolver = new MustacheViewResolver();
  7.         resolver.setPrefix("/WEB-INF/views/");
  8.         resolver.setSuffix(".html");
  9.         return resolver;
  10.     }
  11. }
复制代码
在上述代码中,MustacheViewResolver 用于剖析视图。
3.5 JSP

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

在 Spring MVC 中配置 JSP 视图剖析器:
  1. @Configuration
  2. public class JspConfig {
  3.     @Bean
  4.     public ViewResolver jspViewResolver() {
  5.         InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  6.         resolver.setPrefix("/WEB-INF/views/");
  7.         resolver.setSuffix(".jsp");
  8.         return resolver;
  9.     }
  10. }
复制代码
在上述代码中,InternalResourceViewResolver 用于剖析 JSP 视图。
4. 前后端分离项目中的 Spring MVC 使用

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

  1. @RestController
  2. @RequestMapping("/api/users")
  3. public class UserController {
  4.     @GetMapping
  5.     public ResponseEntity<List<User>> getAllUsers() {
  6.         List<User> users = userService.findAll();
  7.         return ResponseEntity.ok(users);
  8.     }
  9.     @PostMapping
  10.     public ResponseEntity<User> createUser(@RequestBody User user) {
  11.         User savedUser = userService.save(user);
  12.         return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
  13.     }
  14. }
复制代码
在上述代码中,@RestController 注解将控制器标志为 RESTful API,@GetMapping 和 @PostMapping 注解分别处置惩罚 GET 和 POST 请求。
前端调用示例(使用 Axios)

  1. axios.get('/api/users')
  2.     .then(response => {
  3.         console.log(response.data);
  4.     })
  5.     .catch(error => {
  6.         console.error(error);
  7.     });
复制代码
在前后端分离的项目中,前端通过 AJAX 请求调用后端提供的 RESTful API。
5. 总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表