本文面向需要在 Spring Boot 项目中使用 JSP 作为视图层的开发者与在校计算机专业学生。在实际学习或课程项目中,很多人按照常规 Spring Boot 流程创建项目后,发现 JSP 页面无法访问、返回 404,或者页面不解析。本文基于一次完整的本地实践过程,把 Spring Boot 集成 JSP 时容易忽略的配置点逐一整理出来,帮助读者少走弯路。

一、实践背景与问题说明

我是在一台 Windows 11 64 位开发环境中完成该项目的,使用的是 JDK 8 与 Maven。起初我按照 Spring Boot 官方推荐方式创建 Web 项目,但在访问 JSP 页面时始终返回错误。经过排查发现,Spring Boot 默认并不直接支持 JSP,需要额外的依赖和目录约定。

因此,我决定把整个集成过程重新梳理一遍,并记录下关键配置,作为自己 Web 基础专栏中的一篇实践笔记。

二、项目结构与 JSP 放置位置

在 Spring Boot 项目中,JSP 不能像 Thymeleaf 模板那样放在 resources/templates 目录下,而是必须放在 webapp 目录中。

推荐的目录结构如下:


src/main
├─ java
│  └─ com.example.demo
│     └─ controller
├─ resources
│  └─ application.yml
└─ webapp
└─ WEB-INF
└─ jsp
└─ index.jsp

将 JSP 页面放在 WEB-INF 目录下,可以避免被直接访问,只能通过 Controller 转发,这一点在实际项目中比较常见。

三、核心依赖配置说明

Spring Boot 默认的 Web Starter 并不包含 JSP 解析功能,因此需要手动添加相关依赖。以下依赖是我在实践中验证可用的组合:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>

其中 tomcat-embed-jasper 是 JSP 能够在内嵌 Tomcat 中正常运行的关键依赖,如果缺失该依赖,项目可以启动,但页面无法解析。

四、视图解析器配置细节

为了让 Spring MVC 正确定位 JSP 页面,需要在配置文件中指定视图解析路径。

示例 application.yml 配置如下:

spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

这里需要注意路径前后是否包含 /,以及是否与项目实际目录结构保持一致,否则很容易出现访问路径正确但页面仍然 404 的情况。

五、Controller 层的正确写法

在使用 JSP 时,Controller 必须使用 @Controller 注解,而不是 @RestController。这是一个常见但容易忽略的问题。

示例代码如下:

@Controller
public class IndexController {

    @GetMapping("/index")
    public String index() {
        return "index";
    }
}

这里返回的是逻辑视图名,Spring MVC 会根据前缀和后缀自动拼接出完整 JSP 路径。

六、JSP 页面与静态资源处理

在 JSP 页面中,建议只保留展示逻辑,避免直接编写复杂 Java 代码。如果需要条件判断或循环展示,可以引入 JSTL 标签库。

如果项目中使用了 CSS 或 JavaScript 文件,需要注意 Spring Boot 对静态资源的默认映射规则,通常放在 resources/static 目录下即可正常访问。

七、常见问题与排查思路

在这次集成过程中,我遇到并记录了几个典型问题:

  • JSP 页面 404,多数是路径或视图解析器配置错误
  • 页面空白但无异常日志,通常与依赖缺失有关
  • 返回字符串被直接输出,往往是 Controller 注解使用不当

遇到问题时,建议优先查看控制台启动日志,Spring Boot 对配置错误的提示相对明确。

八、结尾说明与延伸阅读

回到文章开头提到的问题,Spring Boot 集成 JSP 并不复杂,但需要理解其运行机制和目录约定。只要依赖、路径和 Controller 写法正确,整体流程是稳定可控的。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐