下面一个既能返回 JSP 页面,又能提供 JSON API 的 Spring Boot + Spring MVC 项目结构 ,这样你就能同时用到 @Controller
和 @RestController
的优势。
🏗 项目结构
springboot-mvc-mixed/
├── src/main/java/com/example/demo/
│ ├── controller/
│ │ ├── PageController.java // 返回 JSP 页面
│ │ └── ApiController.java // 返回 JSON 数据
│ └── DemoApplication.java // 启动类
├── src/main/resources/
│ └── application.properties
└── src/main/webapp/WEB-INF/views/
├── home.jsp
└── about.jsp
⚙ Maven 依赖(pom.xml
)
Spring Boot 默认不强推 JSP,所以需要额外加 tomcat-embed-jasper
和 jstl
:
xml
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JSP 支持 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
</dependencies>
<packaging>war</packaging>
🧩 配置(application.properties
)
properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
server.port=8080
🖥 控制器示例
1. 返回 JSP 页面(@Controller
)
java
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class PageController {
@GetMapping("/")
public String home() {
return "home"; // 对应 /WEB-INF/views/home.jsp
}
@GetMapping("/about")
public String about() {
return "about"; // 对应 /WEB-INF/views/about.jsp
}
}
2. 返回 JSON 数据(@RestController
)
java
package com.example.demo.controller;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/status")
public Map<String, String> status() {
return Map.of("status", "ok", "version", "1.0");
}
@PostMapping("/echo")
public Map<String, String> echo(@RequestBody Map<String, String> payload) {
return Map.of("received", payload.toString());
}
}
🖼 JSP 页面示例(home.jsp
)
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Home Page</title>
</head>
<body>
<h1>欢迎来到首页</h1>
<p>这是 JSP 渲染的页面。</p>
<a href="/about">关于我们</a>
</body>
</html>
🚀 启动与访问
- 运行项目 (IDEA 直接运行
DemoApplication
) - 浏览器访问:
http://localhost:8080/
→ JSP 页面http://localhost:8080/api/status
→ JSON 数据
✅ 这样你就能在一个项目里同时支持:
- 传统页面渲染 (
@Controller
+ JSP) - REST API 接口 (
@RestController
+ JSON)