今天在搭建写一个spring boot使用jsp的项目时,所有配置文件和jar包都加入了一直还是报如下错误:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
There was an unexpected error (type=Not Found, status=404).
/WEB-INF/jsp/index.jsp
很奇怪了,由于我是使用maven搭建的项目,项目中使用了多了module(就是这个原因,后续揭晓),有一些其他的代码在其中,所以我想是不是其他代码有影响,单独用idea重新建了一个web的项目,使用spring initializer方式创建。主要打包的时候一定要选war包。
依赖的时候选择web。
依赖配置
自动生成响应的依赖和代码
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--<scope>provided</scope>-->
</dependency>
这里要注意spring-boot-starter-tomcat中的scope不能配置成provided,不然会包下面的错误:
o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
指定jsp解析,配置到application.properites文件中
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
然后编写响应的controller和index.jsp文件。
@Controller
public class IndexController {
@RequestMapping(value = "/index",method = RequestMethod.GET)
public String index(){
return "index";
}
}
<%@ page contentType="text/html; utf-8" language="java" %>
<html>
<head>
<title>spring boot demo index</title>
</head>
<body>
this is index page
</body>
</html>
jsp文件需要自己建立相应的webapp目录。
运行程序,可以运行成功,不报错,就奇怪了。为什么之前的那个项目中不能运行?后来发现原因是因为之前的项目使用了多了module,运行子module的时候,需要将working directory指定到子module项目,不然会在父module中查找jsp文件,所以就一直报404。在使用maven项目开发的时候需要注意运行项目的working directory。
还有就是如果之前的项目不是使用spring initializer创建的,现在想要使用jsp文件,一定要将文件打成war包,在pom配置文件中如下配置:
<packaging>war</packaging>
不然webapp目录下面将找不到文件。
非常感谢下面的文章,让我解决了问题,https://stackoverflow.com/questions/29782915/spring-boot-jsp-404 文章中的一句话说明了原因:
To anyone having 404 Whitelabel Error Page when running from IntelliJ IDEA on multi-module build (i.e. you're running one of subproject apps having these JSPs). Open run configuration and make sure that working directory points to subproject dir, not the root one! I've spent two hours trying to figure out why it still producing 404 even on a minimal sample project perfectly working from maven mvn spring-boot:run. Hope this will help to someone
网友评论