首页 / Spring Boot 入门教程 / Web 应用基础:MVC 与控制器

Spring Boot 入门教程

Web 应用基础:MVC 与控制器

本教程共 48 篇 · 第 18 篇 · 更新于 2026-08-13 · 约 3 分钟阅读

Spring BootSpring MVC控制器DispatcherServlet视图解析Web 开发

本节目标:搞懂一次 HTTP 请求在 Spring MVC 里走的路,学会用 @Controller 和 @RestController 接住请求并返回结果。

Spring MVC 是什么

Spring MVC 是 Spring 家族里的 Web 框架。它负责接收 HTTP 请求,调用你的业务代码,再把结果返回给浏览器。

MVC 是三个词的缩写:Model(数据)、View(页面)、Controller(控制器)。

分工很简单。控制器接请求,模型装数据,视图管展示。三者解耦,各干各的。

Spring Boot 内置了对 Spring MVC 的自动配置。引入 spring-boot-starter-webmvc,Web 能力就齐了,不用手动配。

一次请求的完整旅程

先记住一个名字:DispatcherServlet。它是 Spring MVC 的前置控制器,所有请求都从它门前过。

请求的流转分五步:

  1. 请求到达 DispatcherServlet,它是总入口。
  2. 它问 HandlerMapping:这个 URL 该找谁处理?
  3. HandlerMapping 根据注解匹配到控制器方法。
  4. 控制器方法执行,返回数据或视图名。
  5. DispatcherServlet 把结果交给 ViewResolver,渲染后响应客户端。
Note

初学者不用自己创建 DispatcherServlet。Spring Boot 自动配置里已经注册好了,映射在 /

控制器怎么写

控制器就是一个普通类,加上 @Controller 注解。Spring 启动时会扫描它,把方法注册成请求处理器。

看一个最简单的例子:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        // 返回视图名,对应 templates/hello.html
        return "hello";
    }
}

@GetMapping("/hello") 表示:GET 请求访问 /hello 时,调用这个方法。

@RequestMapping 是基础注解,可以指定方法和路径。@GetMapping@PostMapping@PutMapping@DeleteMapping 是它的快捷版本,分别对应不同 HTTP 方法。

方法返回字符串 "hello",Spring MVC 会把它当视图名解析。对应文件在 src/main/resources/templates/hello.html

这就是 MVC 的 View 环节:控制器返回视图名,视图解析器找到模板,模板渲染成 HTML。

@RestController 与接口返回

前后端分离的项目里,控制器不返回页面,返回 JSON 数据。

这时用 @RestController。它是 @Controller@ResponseBody 的组合注解。方法返回的对象会被 JSON 序列化后写进响应体。

package com.example.demo.controller;

import java.util.Map;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class InfoController {

    @GetMapping("/info")
    public Map<String, String> info() {
        // Map 会自动转成 JSON 输出
        return Map.of("name", "码上学", "version", "4.1.0");
    }
}

启动后访问 http://localhost:8080/info,返回:

{"name":"码上学","version":"4.1.0"}

JSON 转换由 HttpMessageConverter 完成。Spring Boot 默认带 Jackson,开箱即用,不用额外配置。

Tip

返回 JSON 用 @RestController;返回页面用 @Controller。混用场景下,页面控制器里单个方法也可以加 @ResponseBody 临时返回数据。

Spring Boot 的 MVC 自动配置

Spring Boot 的 MVC 自动配置做了很多事,比裸 Spring MVC 省心:

  • 自动注册视图解析器(ContentNegotiatingViewResolver)。
  • 支持静态资源:/static/public/resources 目录。
  • 自动注册 JSON 转换器。
  • 支持欢迎页:放一个 index.html 就能当首页。
  • 内置 /error 错误处理。

这些配置在 WebMvcAutoConfiguration 里。想加自定义配置(拦截器、格式化器等),写一个 WebMvcConfigurer 实现类即可。

Warning

不要自己加 @EnableWebMvc。它会让 Spring Boot 的 MVC 自动配置全部失效,静态资源、JSON 转换都得自己配,初学者很容易踩坑。

运行与验证

项目里加上两个依赖(版本由父 POM 统一管理,无需写版本号):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

启动方式二选一:

mvn spring-boot:run
mvn package
java -jar target/demo-0.0.1-SNAPSHOT.jar

浏览器访问 http://localhost:8080/hello 看到页面,访问 /info 看到 JSON,控制器就通了。

本节小结

  • DispatcherServlet 是 Spring MVC 总入口,负责分发请求。
  • @Controller 返回视图名,@RestController 返回 JSON。
  • 模板放 templates/,静态资源放 static/
  • 依赖 Spring Boot 自动配置,不要自己加 @EnableWebMvc。