
Spring Boot 默认不支持 JSP,需手动引入 Jasper 依赖并正确配置视图解析路径;关键错误在于 spring.mvc.view.prefix 中误加了 /webapp 目录层级,实际资源路径应以 ServletContext 根为基准,即从 /WEB-INF/views/ 开始。
spring boot 默认不支持 jsp,需手动引入 jasper 依赖并正确配置视图解析路径;关键错误在于 `spring.mvc.view.prefix` 中误加了 `/webapp` 目录层级,实际资源路径应以 `servletcontext` 根为基准,即从 `/web-inf/views/` 开始。
在 Spring Boot 项目中集成 JSP 是一项有约束条件的任务——它仅在传统 WAR 部署到外部 Tomcat 时稳定支持,而不推荐用于嵌入式 Tomcat(如 spring-boot-starter-web 默认模式)。尽管如此,若你确需在开发阶段使用嵌入式容器配合 JSP(例如调试),必须严格满足以下三项前提:
✅ 必须满足的三大前提
-
项目打包方式为
war(而非默认的jar):
在pom.xml中声明:<packaging>war</packaging>
并确保主应用类继承
SpringBootServletInitializer:@SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } -
正确引入
tomcat-embed-jasper且作用域为provided:
你已正确配置,无需改动:<dependency><groupid>org.apache.tomcat.embed</groupid><artifactid>tomcat-embed-jasper</artifactid><scope>provided</scope></dependency>
-
视图路径配置必须符合 Servlet 容器规范:
❌ 错误写法(含/webapp):spring.mvc.view.prefix=/webapp/WEB-INF/views/
✅ 正确写法(
/webapp是开发目录,非运行时路径):
Json Schema Toolkit下载使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp
? 原因说明:Maven 构建后,
src/main/webapp下的内容会被复制到 WAR 包根目录(即ServletContext的/路径下)。因此webapp/WEB-INF/views/hello.jsp在运行时的真实访问路径是/WEB-INF/views/hello.jsp,前缀中绝不可再包含/webapp。
? 推荐标准目录结构(Maven)
src/ ├── main/ │ ├── java/ │ ├── resources/ │ └── webapp/ ← 开发时存放位置 │ └── WEB-INF/ │ └── views/ │ └── hello.jsp pom.xml
✅ 验证控制器写法(无需 @ResponseBody)
@Controller
public class SayHelloController { // 类名建议 PascalCase + Controller 后缀
@RequestMapping("/hello")
public String hello() {
return "hello"; // 解析为 /WEB-INF/views/hello.jsp
}
}
⚠️ 重要注意事项
- Spring Boot 2.3+ 已明确弃用对 JSP 的支持,官方强烈推荐使用 Thymeleaf、Freemarker 或纯前端方案(如 Vue/React + REST API);
- 若使用 IntelliJ IDEA,请确认 Project Structure → Modules → Web → Web Resource Directory 已正确指向
src/main/webapp; - 日志中出现
"Path with 'WEB-INF' or 'META-INF'"提示,是 Spring MVC 的安全拦截机制,表明路径格式被识别为受保护目录——这本身不是错误,而是说明路径已进入视图解析流程,但最终未找到对应文件,根源仍在前缀配置或文件未被正确打包; - 使用
mvn clean package后,可解压生成的 WAR 文件,检查WEB-INF/views/hello.jsp是否真实存在。
✅ 总结
JSP 在 Spring Boot 中并非“开箱即用”,其可用性高度依赖部署方式与路径语义的精确匹配。修正 spring.mvc.view.prefix 为 /WEB-INF/views/ 是解决“404 JSP not found”问题的最关键一步。但长远来看,建议逐步迁移至现代化模板引擎,以获得更好的开发体验、热更新支持与社区维护保障。










