1. 程式人生 > >Spring boot資原始檔對映問題

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/下,才能成功對映。目前我只發現這種方案。希望對你有所幫助
官方文件的說明是
這裡寫圖片描述