You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot+Gradle项目无法加载JSP,控制台输出WEB-INF路径提示

问题及解决方案

问题描述

代码、配置及依赖均无明显错误,但访问项目根路径时,控制台输出:Path with "WEB-INF" or "META-INF": [WEB-INF/views/login.jsp],无法正常打开对应的login.jsp页面。

相关代码与配置

控制器代码

package com.example.mywebsite.controller;

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

@Controller
public class LoginController {

    @RequestMapping("/")
    public String start(){
        return "login";
    }

}

配置文件(application.properties/yml)

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

build.gradle依赖配置

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'org.springframework.boot:spring-boot-starter-validation'

    runtimeOnly 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.41' // JSP解析依赖
    runtimeOnly 'javax.servlet:jstl:1.2' // JSTL标签库

    runtimeOnly 'mysql:mysql-connector-java' // MySQL驱动
}

login.jsp代码

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>


<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Login</title>
</head>
<body>
<h1>Login</h1>

</body>
</html>

问题原因与解决方法

控制台的日志是Tomcat的安全拦截提示——Tomcat会阻止直接访问WEB-INF/META-INF下的资源,但Spring MVC的视图转发属于内部跳转,本不应触发该拦截。出现这个问题通常是以下原因导致:

1. 视图解析器未生效,请求被当作静态资源处理

当Spring MVC的视图解析配置未生效时,控制器返回的login没有被解析为/WEB-INF/views/login.jsp进行内部转发,而是被当作静态资源路径直接访问,触发了Tomcat的安全拦截。

解决方式:

  • 确认spring.mvc.view.prefix和spring.mvc.view.suffix配置格式正确:前缀末尾带斜杠(/WEB-INF/views/)、后缀开头带点(.jsp)。
  • 确保tomcat-embed-jasper依赖存在且版本与Spring Boot兼容(你的9.0.41版本适配Spring Boot 2.x,无问题)。

2. Spring Boot打包方式不支持JSP

Spring Boot的jar打包方式对JSP支持有限,嵌入式Tomcat无法从jar包中读取WEB-INF下的JSP文件,导致请求无法正确转发。

解决方式:

  • 在build.gradle中添加war插件,改为war打包:
    apply plugin: 'war'
    
  • 若坚持使用jar打包,需将JSP文件移至src/main/resources/META-INF/resources/WEB-INF/views/目录下(不推荐,war是JSP项目的标准打包方式)。

3. DevTools缓存导致配置未生效

使用spring-boot-devtools时,可能存在资源缓存,导致视图解析的配置或JSP文件未被重新加载。

解决方式:

  • 直接重启应用,或在IDE中触发热重载操作,确保配置和资源文件生效。

4. 项目目录结构错误

JSP文件的存放路径必须符合规范:

  • war打包:JSP需放在src/main/webapp/WEB-INF/views/目录下;
  • jar打包:JSP需放在src/main/resources/META-INF/resources/WEB-INF/views/目录下。

确认webapp目录位于src/main/下,而非其他路径。


内容的提问来源于stack exchange,提问作者Roland Olajide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:10:50