版本
1.5.7
注意
经过测试,在1.4.2的版本下,项目打包成jar文件,可以访问到html和jsp文件,但是在1.5.6以上的版本中,就只能访问到html页面,访问jsp文件只会有404,官网的文档的解释是 src/main/webapp 这样的目录在打包成jar包,会被大多数构建工具所忽略。关于这一点我使用了resources插件也不能解决。
资源文件在自己的自定义目录
spring boot默认把资源文件存放的地址是:
默认配置的 /** 映射到 /static (或/public、/resources、/META-INF/resources)
默认配置的 /webjars/** 映射到 classpath:/META-INF/resources/webjars/
我的项目结构
POM
<!-- jsp支持 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
application.properties
spring.mvc.static-path-pattern=/webapp/**
#classpath下 绝对路径
#spring.resources.static-locations=classpath:/webapp/
#相对路径
spring.resources.static-locations=/webapp/
访问html文件的效果
JSP文件
访问jsp文件
配置前缀后缀等
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/webapp/WEB-INF/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
----------
#或者
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
可以访问到index.html,就是不能访问到index.jsp文件,并且已经配置了jsp解析器了,为什么就是访问不到呢?怀疑不能直接访问jsp文件,配置转向控制器
配置Controller看看能不能解决问题
还是找不到文件
解决方案
在百度查找资料,发现都是千篇一律,都不行。经过科学上网,找到一种解决方案
那就是在pom中使用resources插件
<resources>
<!-- 打包或者编译时 资源文件放在指定的目录中 -->
<resource>
<!-- 指定资源文件目录 -->
<directory>src/main/webapp</directory>
<!-- 必须设置为META-INF/resources/ 才可以访问
从1.4.2版本开始,spring、boot对jsp已经不提倡使用了,建议使用模版引擎等。
来为jsp提供更好的支持
-->
<targetPath>META-INF/resources/webapp/</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
加入后看看效果
这样都可以访问成功,猜测是resources目录的配置,于是我们来改变看看
改变resource目录
分别访问jsp文件和html文件
改变application中的static文件映射,改为classpath下,充classpath下找
spring.mvc.static-path-pattern=/webapp/**
#classpath下 绝对路径
spring.resources.static-locations=classpath:/webapp/
总结
resources的文件设置目录必须是在META-INF/resources/下,目前到不清楚是为什么,只是觉得真是坑爹啊。
在不使用模版的情况下,需要自定义资源文件的目录,建议使用resources插件,并且只能配置在META-INF/resources/下,才能成功映射。目前我只发现这种方案。希望对你有所帮助
官方文档的说明是