Spring Boot + Spring MVC 项目结构
下面一个既能返回 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
:
<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
)
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
server.port=8080
🖥 控制器示例
1. 返回 JSP 页面(@Controller
)
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
)
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
)
<%@ 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)