Spring boot資原始檔對映問題
版本
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/下,才能成功對映。目前我只發現這種方案。希望對你有所幫助
官方文件的說明是