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

Spring项目中已存在的JSP文件为何无法被访问?

Spring Boot中JSP页面404问题排查

问题背景

在基础Spring应用中编写了请求处理控制器,但访问对应路径时出现404错误,JSP文件实际存在却无法被加载。

代码与配置

Controller代码 (SayHelloController.java)

@Controller
public class SayHelloController {

    @RequestMapping("say-hello-jsp")
    public String sayHelloJsp() {
        return "sayHello";
    }
}

配置文件 (application.properties)

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
logging.level.org.springframwork=debug

JSP页面 (sayHello.jsp)

<html>
    <head>
        My first JSP file!
    </head>
    <body>
        <h1>Hello</h1>
        <p>
            This is the text we want to show <br/>
        <p>
    </body>
</html>

错误日志

访问http://localhost:8080/say-hello-jsp时,日志输出如下:

: GET "/say-hello-jsp", parameters={}
: Mapped to com.in28minutes.springboot.myfirstwebapp.hello.SayHelloController#sayHelloJsp()
: Selected 'text/html' given [text/html, application/xhtml+xml, image/avif, image/webp, image/apng, application/xml;q=0.9, application/signed-exchange;v=b3;q=0.9, */*;q=0.8]
: View name 'sayHello', model {}
: Forwarding to [/WEB-INF/jsp/sayHello.jsp]
: "FORWARD" dispatch for GET "/WEB-INF/jsp/sayHello.jsp", parameters={}
: Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]
: "Path with "WEB-INF" or "META-INF": [WEB-INF/jsp/sayHello.jsp]"
: Resource not found

文件位置验证

JSP文件确实存在,路径信息如下:

macbook-air:jsp gerald$ pwd
/Users/gerald/IdeaProjects/myfirstwebapp/src/main/resources/META-INF/resources/WEB-INF/jsp
macbook-air:jsp gerald$ ls
sayHello.jsp

依赖配置

pom.xml中已添加Jasper依赖:

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

问题原因与解决办法

1. JSP文件存放路径错误

Spring Boot中,JSP文件需要放在src/main/webapp/WEB-INF/jsp/目录下,而非src/main/resources下。resources目录的资源会被打包到classpath,但JSP需要Tomcat的Jasper引擎直接处理,必须放在webapp目录下才能被正确转发加载。

解决:手动创建src/main/webapp/WEB-INF/jsp/目录,将sayHello.jsp移至该路径。

2. Jasper依赖范围问题

tomcat-embed-jasper的scope设为provided,表示依赖由运行容器提供,但本地开发用的嵌入式Tomcat需要这个依赖编译JSP,provided会导致依赖未被加载。

解决:删除<scope>provided</scope>(默认scope为compile),或改为<scope>compile</scope>。

3. 配置文件拼写错误

application.properties中logging.level.org.springframwork=debug存在拼写错误,正确应为logging.level.org.springframework=debug。该错误不影响JSP访问,但建议修正以保证日志正常输出。

最后步骤

修改完成后重启应用,重新访问http://localhost:8080/say-hello-jsp即可正常加载JSP页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:00:40