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/下,才能成功映射。目前我只发现这种方案。希望对你有所帮助
官方文档的说明是
这里写图片描述

猜你喜欢

转载自blog.csdn.net/lovincc/article/details/78376600
今日推荐