在一个非常基本的应用程序中,我有如下的 sayHelloController.java
@Controller
public class SayHelloController {
@RequestMapping("say-hello-jsp")
public String sayHelloJsp() {
return "sayHello";
}
}
具有以下应用程序属性:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
logging.level.org.springframwork=debug
和 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 时,我收到 404 并且日志显示:
: 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
这没有意义,因为文件存在,证明:
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>
为什么找不到文件?
在这里找到答案:https://youtrack.jetbrains.com/issue/IDEA-158125/Spring-boot-run-configuration-does-not-find-resources-in-META-INF,谢谢安迪·威尔金森:
问题是 Jasper 被标记为 pom 中提供的,所以它是 不在类路径上。我相信已经有一个 IDEA 问题待解决 那个问题。它会导致 Spring Boot 沿着代码路径前进 各种JSP相关的点滴都没有启用。你可以避免它 通过从你的 pom 中删除提供的,因为它只是 构建将部署到 servlet 的 war 文件时必需的 容器。
我已经删除了提供的,运行了 mvn clean (仅重新运行项目不起作用),然后它就工作了。
奇怪的是这个基本问题在 6 年后仍然存在于 IntelliJ 中(链接来自 2016 年)
一旦我使缓存无效并重新启动 IDE,Krowar 的上述答案就解决了我的解决方案。
@Krowar 我也有同样的问题,但是使用 Eclipse(2024-03)。我尝试过-
如果有人能指出一些方向,请...! 代码快照与之前用户粘贴的相同。
@java @spring-boot @Eclipse