Springboot的resources下资源访问的问题
对于路径问题,是让我一直感到痛苦的事情,首先是因为我的眼高手低,感觉路径这么简单根本没必要去看,但是昨天项目组长的冷嘲热讽让我无地自容:“你竟然连linux和window的路径的区别都不知道,呵呵”。事情的起因是我在配置日志文件的时候,我不晓得window路径下的根目录是什么,于是我打开了cmd,想输入cd /,但是发现cd /之后的路径是盘符根目录,woc这是不是根目录,接下来就被无情的嘲讽了。言归正传,对于springboot的资源目录我一直是莫名其妙的只有一个Resources目录,那么它的目录结构是怎样的呢?我把我遇到的所有情况都记录下来作为记忆。
一 、SpringBoot的资源目录的分类
-1. static 存放静态资源,比如静态画面,图片,js等等

比如这里我们新建一个static.html,我们可以直接访问到静态目录的资源

也可以使用Controller跳转
@Controller
public class RedirectController { @RequestMapping("/stc")
public String stc(){
return "static.html";
}
}

-2. templates 存放动态画面等
templates下面存放的动态页面不能通过url中输入.html的方式直接访问,需要通过请求服务器,在转到动态画面。
我们需要使用一种方式达到目的,就像是jsp一样,使用数据加模板的形式进行渲染,但是jsp不利于前后端分离的开发(虽然我觉得使用java写前端很安逸,但是Springboot不建议使用jsp)
官方建议的是使用Thymeleaf来做动态界面,这里我使用的是freemaker,springboot也是集成了freemaker的。
这是我templates下面

首先引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
然后在application.yml进行简单的配置,这个配置的作用在后面会讲
spring:
freemarker:
suffix: .html
配置完成以后,我们先试验一下直接访问能否成功

这里报的是404,显然没有找到
那我们实验下通过controller的方式
@RequestMapping("tmplts")
public String tmplts(){
return "template";
}
注意这里的return不可以带.html,前面我们对freemaker进行的配置中给他添加了后缀名为.html

现在已经访问成功了。那么到现在为止,最最基本的使用已经掌握了。接下来讲解一些其他的。
二、自定义静态资源访问路径以及springboot默认的配置
首先我们讲解下springboot资源目录下的几种静态目录,
/META-INF/resources
resources
static
public

这几种有什么作用呢?这几个目录都是springboot默认提供的静态资源访问路径,他们的根路径都是“/”
什么意思呢?就是说在访问这些目录下面文件的时候,他们的访问目录和resources下面文件的访问目录是一样的,就比如我们之前访问的目录都没有加static之类的
那么久大有可为了,我们给不同的目录分配不同的功能,使代码看起来更加清晰明了
既然如此,万一这些目录下面的文件重名了会如何执行呢?他们之间是有有限顺序的,这个顺序默认是/META-INF/resources>resources>static>public,但是后面会说如何更改
那么还有一个问题是,如果我想自己创建一个目录也是可以通过访问根路径的方式访问该目录下的资源,那我该怎么办?接下来就是正题。
首先我们有两种方式进行配置,但他们的本质是一样的,我这里创建了一个test目录
-1 配置application.yml的方式
spring:
mvc:
static-path-pattern: /**
resources:
static-locations: classpath:/test/,classpath:/static/js/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
这里我们配置了两部分,
第一:static-path-pattern,这个配置项是告诉springboot,应该以什么样的方式去寻找资源。默认配置为 /* 。换句话说,只有静态资源满足什么样的匹配条件,Spring Boot才会处理静态资源请求,我们也可配置成 /user/**,这样我们必须输入/user/index.html才能访问到这些目录下的资源,
第二:spring.resources.static-locations,这个配置项是告诉springboot去哪找资源,根据前后关系确定优先级,也就是说如果/META-INF/resources/目录和/resources都有一个index.html,那么根据默认的优先级,会去访问/test/下的资源。(tips:当更改了此项配置,默认的项目也需要加上,不然会被覆盖,详情可见源码)
那么我们来实验一下:我在每个目录下面都写了index.html

当我访问index.html的时候,优先级最高的就是test目录下的资源

-2 使用配置类的方式
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration
public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/test/");
super.addResourceHandlers(registry);
}
}
这种方式需要继承WebMvcConfigurerAdapter类,并重写addResourceHandlers方法,这里的设置跟yml配置基本相似的
https://blog.csdn.net/qq_34797335/article/details/80194137这篇文章可以看看更加详细的源码讲解
https://www.jianshu.com/p/a9e6edd46e98
https://www.cnblogs.com/wangshen31/p/8727359.html
Springboot的resources下资源访问的问题的更多相关文章
- SpringBoot 常用配置 静态资源访问配置/内置tomcat虚拟文件映射路径
Springboot 再模板引擎中引入Js等文件,出现服务器拒绝访问的错误,需要配置过滤器 静态资源访问配置 @Configuration @EnableWebMvc public class Sta ...
- SpringBoot中的静态资源访问
一.说在前面的话 我们之间介绍过SpringBoot自动配置的原理,基本上是如下: xxxxAutoConfiguration:帮我们给容器中自动配置组件: xxxxProperties:配置类来封装 ...
- WEB-INF下资源访问问题
原文链接:http://blog.csdn.net/u010921701/article/details/67637527 问题描述:建了一个Web工程,将js.css等放到了WEB-INF文件下,发 ...
- springboot 读取resources下的文件然后下载
记录下代码 /** * 下载模板 * * @param response * @param request */ @RequestMapping(value = "downloadTemp& ...
- springboot取得resources下的文件
参考http://blog.csdn.net/programmeryu/article/details/58002218 ResourceUtils.getFile("classpath:p ...
- springboot 静态资源访问,和文件上传 ,以及路径问题
springboot 静态资源访问: 这是springboot 默认的静态资源访问路径 访问顺序依次从前到后(http://localhost:8080/bb.jpg) spring.resourc ...
- SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆
在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringB ...
- SpringBoot 项目打包后获取不到resource下资源的解决
SpringBoot 项目打包后获取不到resource下资源的解决 在项目中有几个文件需要下载,然后不想暴露真实路径,又没有CDN,便决定使用接口的方式来获取文件.最初的时候使用了传统的方法来获取文 ...
- 聊聊、SpringBoot 静态资源访问
SpringBoot 1.X 版本和 SpringBoot 2.X 版本在静态资源访问上有一些区别,如果直接从 1.X 升级到 2.X 肯定是有问题的.这篇文章就来讲讲这方面问题,也是项目中的坑. 先 ...
随机推荐
- LC 200 Number of Islands
问题描述 Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is ...
- JS的精确简单的加减乘除
简单的写法: <script> function decNum(a){/*获取小数位数*/ var r=0; a=a.toString(); if(a.indexOf(".&qu ...
- php用逗号格式化数字
今日工作需要格式化数字显示当前商品价格,比如2335.32,需要格式化为2,335.32这样显示.我写了一个函数.总感觉这么简单的功能,但是却需要30多行代码来完成. <?php/**** * ...
- JS基础_if语句
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 10 select、poll以及epoll
IO复用:为了解释这个名词,首先来理解下复用这个概念,复用也就是共用的意思,这样理解还是有些抽象,为此,咱们来理解下复用在通信领域的使用, 在通信领域中为了充分利用网络连接的物理介质,往往在同一条网络 ...
- Docker 部署mysql、tomcat笔记
Docker 笔记整理 #.环境:Ubuntu 18.* #.安装 mysql 5.6.tomcat #.docker search mysql 报错:Error response from daem ...
- 1 sql server 中cursor的简介
1.游标的分类 游标共有3类:API服务器游标.Transaction-SQL游标和API客户端游标. 2 API服务器cursor共有如下几种 静态游标的完整结果集将打开游标时建立的结果集存储在临时 ...
- Struts配置文件
本章节将带你学习Struts2 应用程序所需的基本配置.在这里可以看到哪些将被配置到一些重要的配置文件中:web.xml.struts.xml.struts-config.xml以及struts.pr ...
- 自己Linux东西存放情况
elasticsearch /home/panfeng 包含了 elasticsearch 和 ik分词器 FastDFS https://www.cnblogs.com/taopanfeng/p/1 ...
- PXE help Tips
http://www.kano.org.uk/projects/pxe/ http://howto.basjes.nl/linux/installing-fedora-linux-via-pxe-x8 ...