Spring MVC 入门教程
1. 简介
Spring MVC 是 Spring 框架的一部分,用于构建基于 Java 的 Web 应用程序。它遵循 Model-View-Controller (MVC) 设计模式,将应用程序的输入、处理和输出分离。
1.1 核心组件
- Model(模型):表示应用程序的数据层。
- View(视图):负责展示数据给用户。
- Controller(控制器):处理用户请求,并调用相应的业务逻辑来更新模型或返回视图。
2. 环境搭建
2.1 创建 Maven 项目
使用 IDE(如 IntelliJ IDEA 或 Eclipse)创建一个新的 Maven 项目。确保在 pom.xml 中添加以下依赖:
\\\`xml org.springframeworkspring-webmvc5.3.20
javax.servletjavax.servlet-api4.0.1provided
javax.servlet.jspjavax.servlet.jsp-api2.3.3provided
javax.servletjstl1.2 \\\`
2.2 配置 web.xml
在 src/main/webapp/WEB-INF 目录下创建 web.xml 文件,配置 DispatcherServlet:
\\\`xml
dispatcherorg.springframework.web.servlet.DispatcherServlet1
dispatcher/
index.jsp \\\`
2.3 配置 Spring MVC 配置文件
在 src/main/resources 目录下创建 spring-mvc-config.xml 文件,配置视图解析器和其他设置:
\\\`xml
mvc:annotation-driven /
context:component-scan base-package="com.example.controller" /
\\\`
2.4 创建 JSP 页面
在 src/main/webapp/WEB-INF/views 目录下创建一个简单的 JSP 页面 hello.jsp:
\\\`jsp <%@ page contenttype='text/html;charset=UTF-8' language='java'>
Hello World
${message}
\\\`
2.5 创建 Controller
在 src/main/java/com/example/controller 目录下创建一个控制器类 HelloController.java:
\\\`java package com.example.controller;
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping;
@Controller public class HelloController {
@GetMapping("/hello") public String hello(Model model) { model.addAttribute("message", "Hello, Spring MVC!"); return "hello"; } } \\\`
2.6 启动应用
启动应用后,访问 http://localhost:8080/hello,你应该会看到页面上显示 "Hello, Spring MVC!"。
3. 进阶功能
3.1 表单处理
创建一个表单页面 form.jsp:
\\\`jsp <%@ page contenttype='text/html;charset=UTF-8' language='java'>
Form Submission Name:
Age:
\\\`
创建一个控制器方法来处理表单提交:
java @PostMapping("/submitForm") public String submitForm(@RequestParam("name") String name, @RequestParam("age") int age, Model model) { model.addAttribute("name", name); model.addAttribute("age", age); return "result"; }
创建结果页面 result.jsp:
\\\`jsp <%@ page contenttype='text/html;charset=UTF-8' language='java'>
Result
Name: ${name}
Age: ${age}
\\\`
3.2 数据验证
使用 Hibernate Validator 来进行数据验证:
- 添加依赖:
xml
- 创建一个带有验证注解的 DTO 类:
\\\`java package com.example.dto;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Size;
public class UserDTO {
@NotEmpty(message = "Name is required") @Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters") private String name;
// Getters and Setters } \\\`
- 在控制器中使用 @Valid 注解:
java @PostMapping("/submitUser") public String submitUser(@Valid @ModelAttribute("user") UserDTO user, BindingResult result, Model model) { if (result.hasErrors()) { return "form"; } model.addAttribute("name", user.getName()); return "result"; }
3.3 RESTful Web Services
创建一个 RESTful 控制器:
\\\`java @RestController @RequestMapping("/api") public class RestController {
@GetMapping("/greet") public ResponseEntity greet() { return new ResponseEntity<>("Hello, RESTful API!", HttpStatus.OK); }
@PostMapping("/users") public ResponseEntity createUser(@RequestBody UserDTO user) { // Process the user data return new ResponseEntity<>(user, HttpStatus.CREATED); } } \\\`
4. 常见面试题
4.1 什么是 Spring MVC?
Spring MVC 是 Spring 框架的一部分,用于构建 Web 应用程序。它实现了 MVC 设计模式,提供了清晰的角色分离,使得代码更易于维护和扩展。
4.2 Spring MVC 中的 DispatcherServlet 是什么?
DispatcherServlet 是 Spring MVC 的前端控制器,负责接收所有 HTTP 请求,并将它们分发到适当的控制器进行处理。
4.3 如何在 Spring MVC 中处理表单提交?
可以通过 @ModelAttribute 和 @RequestParam 注解来绑定表单数据到控制器方法的参数中。对于复杂的对象,可以使用 @ModelAttribute 注解。
4.4 如何实现 RESTful Web 服务?
通过使用 @RestController 注解定义 RESTful 控制器,并使用 @RequestMapping 及其变体(如 @GetMapping, @PostMapping)来映射 HTTP 请求到控制器方法。
4.5 如何在 Spring MVC 中进行数据验证?
可以使用 Hibernate Validator 提供的注解(如 @NotNull, @Size 等)对请求参数或表单数据进行验证。结合 @Valid 注解可以在控制器方法中触发验证逻辑。
4.6 如何处理异常?
可以通过 @ExceptionHandler 注解创建全局异常处理器,或者使用 @ControllerAdvice 注解来定义跨多个控制器的异常处理逻辑。
4.7 如何配置视图解析器?
可以通过 InternalResourceViewResolver 或 ThymeleafViewResolver 等类来配置视图解析器,指定视图文件的前缀和后缀路径。
4.8 如何启用 CORS 支持?
可以通过在 WebMvcConfigurer 中重写 addCorsMappings 方法来配置跨域资源共享(CORS),或者使用 @CrossOrigin 注解为特定的控制器方法启用 CORS。
希望这个教程对你有所帮助!如果有任何问题或需要进一步解释,请随时提问。
本文暂时没有评论,来添加一个吧(●'◡'●)