当然可以,下面是《SpringMVC(看这一篇就够了)》的完整整理版内容,从基础原理到核心功能,适合初学者、开发者系统学习掌握。


✅ SpringMVC(看这一篇就够了)


🧠 一、什么是 SpringMVC?

SpringMVC 是 Spring Framework 提供的一套基于 Java 的 Web 框架,用于构建模块化、解耦、灵活的 Web 应用。
其核心设计遵循 MVC(Model-View-Controller)架构模式,常用于 RESTful API、网站后台等开发。


🧩 二、核心架构图(工作流程)

用户请求 → DispatcherServlet(前端控制器)
             ↓
         HandlerMapping(处理器映射)
             ↓
         Controller(控制器处理请求)
             ↓
         Service/DAO(业务逻辑和数据访问)
             ↓
         返回 ModelAndView
             ↓
         ViewResolver(视图解析器)
             ↓
         渲染 JSP/HTML 页面

🧰 三、SpringMVC 核心组件详解

组件名作用
DispatcherServlet前端控制器,请求分发核心
HandlerMapping映射请求到对应的 Controller 方法
Controller控制器,处理用户请求并返回数据或视图
ViewResolver视图解析器,决定返回的视图位置(如 JSP)
ModelAndView封装模型数据 + 视图名称的对象
Interceptor拦截器,处理请求前后逻辑(类似过滤器)

🛠 四、快速入门:Hello SpringMVC

1. 添加依赖(Maven)

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.31</version>
  </dependency>
</dependencies>

2. 配置 web.xml(老项目)

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

3. 编写 Controller

@Controller
public class HelloController {
  @RequestMapping("/hello")
  public String hello(Model model) {
    model.addAttribute("msg", "Hello SpringMVC");
    return "hello";
  }
}

4. 配置视图解析器

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

5. 创建 JSP 页面(hello.jsp)

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<body>
<h2>${msg}</h2>
</body>
</html>

🧬 五、常用注解整理

注解含义
@Controller声明控制器类
@RequestMapping请求路径映射(类/方法)
@ResponseBody返回 JSON 数据
@RequestParam获取请求参数
@PathVariableRESTful 参数绑定
@ModelAttribute预处理表单模型数据
@RestController@Controller + @ResponseBody 的简化版

📦 六、请求参数绑定与返回值处理

表单提交:

<form action="/user/add" method="post">
  <input name="username">
  <input name="age">
</form>

Java 对象接收:

public class User {
  private String username;
  private int age;
  // getters/setters
}

@PostMapping("/user/add")
public String addUser(User user) {
  // 自动封装表单数据到 User
  return "success";
}

🔁 七、RESTful 风格支持

@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") int id) { ... }

@PutMapping("/user")     // 修改
@DeleteMapping("/user")  // 删除

🧱 八、拦截器配置(Interceptor)

public class MyInterceptor implements HandlerInterceptor {
  public boolean preHandle(...) {
    System.out.println("前置处理");
    return true;
  }
}

<mvc:interceptors>
  <mvc:interceptor>
    <mvc:mapping path="/**"/>
    <bean class="com.xxx.MyInterceptor"/>
  </mvc:interceptor>
</mvc:interceptors>

📊 九、返回 JSON 的写法

@RestController
@RequestMapping("/api")
public class JsonController {
  @GetMapping("/user")
  public User getUser() {
    return new User("Tom", 18);
  }
}

需要依赖 Jackson:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
</dependency>

🚧 十、常见错误与排查

问题原因
HTTP 404请求地址无对应映射
405 Method Not Allowed请求方法不匹配(GET/POST)
页面乱码JSP 编码未设置 UTF-8
返回 JSON 是空白缺少 Jackson 依赖
请求参数不生效名字不一致或未映射字段

📚 十一、SpringMVC 实战建议

  • 配合 Thymeleaf 或 Vue 做前后端分离
  • 用注解替代 XML 配置(Spring Boot 中更推荐)
  • 推荐使用 Spring Boot 来简化 SpringMVC 的配置过程

🎯 十二、SpringMVC 与 Spring Boot 区别

项目SpringMVCSpring Boot
配置方式XML/Java配置零配置或注解
启动方式依赖容器(如 Tomcat)内嵌容器
推荐程度一般强烈推荐(生产标准)

📎 推荐学习路线

  1. Java Web 基础(Servlet/JSP)
  2. Spring IoC/AOP 理解
  3. SpringMVC 控制器开发
  4. 集成 MyBatis、Redis、Thymeleaf
  5. 升级到 Spring Boot / Spring Cloud