当前位置:首页>财经>正文

springboot怎么引入静态资源 Spring Boot之如何配置静态资源的地址与访

2023-04-12 11:52:35 互联网 未知 财经

 springboot怎么引入静态资源 Spring Boot之如何配置静态资源的地址与访

springboot怎么引入静态资源

在SpringBoot中加载静态资源和在普通的web应用中不太一样。默认情况下,spring Boot从classpath下一个叫/static(/public,/resources或/META-INF/resources)的文件夹或从ServletContext根目录提供静态内容。下面我们来写个例子看一下就会一目了然了:首先看一下项目的目录结构:

我们在resources下面的templates目录下建一个home.html的文件,完整目录为:src/main/resources/templates/home.html。内容如下:





ConanZhang的首页

Spring Boot之如何配置静态资源的地址与访

静态资源,例如HTML文件、JS文件,设计到的Spring Boot配置有两项,一是“spring.mvc.static-path-pattern”,一是“spring.resources.static-locations”,很多人都难以分辨它们之间的差异,所以经常出现的结果就是404错误,无法找到静态资源。
1. “spring.mvc.static-path-pattern”
spring.mvc.static-path-pattern代表的含义是我们应该以什么样的路径来访问静态资源,换句话说,只有静态资源满足什么样的匹配条件,Spring Boot才会处理静态资源请求,以官方配置为例:
# 这表示只有静态资源的访问路径为/resources/**时,才会处理请求
spring.mvc.static-path-pattern=/resources/**,
假定采用默认的配置端口,那么只有请求地址类似于“http://localhost:8080/resources/jquery.js”时,Spring Boot才会处理此请求,处理方式是将根据模式匹配后的文件名查找本地文件,那么应该在什么地方查找本地文件呢?这就是“spring.resources.static-locations”的作用了。
2. “spring.resources.static-locations”
“spring.resources.static-locations”用于告诉Spring Boot应该在何处查找静态资源文件,这是一个列表性的配置,查找文件时会依赖于配置的先后顺序依次进行,默认的官方配置如下:
spring.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources
继续以上面的请求地址为例,“http://localhost:8080/resources/jquery.js”就会在上述的四个路径中依次查找是否存在“jquery.js”文件,如果找到了,则返回此文件,否则返回404错误。
3. 静态资源的Bean配置
从上面可以看出,“spring.mvc.static-path-pattern”与“spring.resources.static-locations”组合起来演绎了nginx的映射配置,如果熟悉Spring MVC,那么理解起来更加简单,它们的作用可以用Bean配置表示,如下:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/public-resources/")
.setCacheControl(CacheControl.maxAge(1, TimeUnit.HOURS).cachePublic())
}
}
或者等同与以下的XML。



结论
“spring.mvc.static-path-pattern”用于阐述HTTP请求地址,而“spring.resources.static-locations”则用于描述静态资源的存放位置。

springboot maven 静态文件放哪里

1. 默认位置:
Spring Boot能大大简化WEB应用开发的原因, 最重要的就是遵循“约定优于配置”这一基本原则。Spring Boot的关于静态资源的默认配置已经完全满足绝大部分WEB应用的需求。没必要去弄手续繁杂的自定义,用Spring Boot的约定就好了。
在Maven 工程目录下,所有静态资源都放在src/main/resource目录下,结构如下:
src/main/resource
|__________static
|_________js
|_________images
|_________css
.....

例如,imges目录下的demo.jpg 在HTML/JSP中访问是的路径就是 springboot怎么引入静态资源 Spring Boot之如何配置静态资源的地址与访, 因为Spring Boot的缺省工作目录就是src/main/java, 当访问资源时,就是src/main/resources, 而/static/**被SPRING BOOT被映射到了classpath:/static下。所以也可以不带起始的“/”,直接写成 springboot怎么引入静态资源 Spring Boot之如何配置静态资源的地址与访

以下代码示例为Hello World 加了个图片显示, 这里的demo.jpg在maven工程的位置存放就是src/main/resource/static/images/demo.jpg,
可用 springboot怎么引入静态资源 Spring Boot之如何配置静态资源的地址与访访问
@Controller
//@EnableAutoConfiguration
public class HelloController {
@RequestMapping("/")
@ResponseBody
public String hello() {
return "hello world  springboot怎么引入静态资源 Spring Boot之如何配置静态资源的地址与访"

springboot如何控制静态资源的权限

1.默认资源映射
其中默认配置的 /** 映射到 /static (或/public、/resources、/META-INF/resources)
其中默认配置的 /webjars/** 映射到 classpath:/META-INF/resources/webjars/
PS:上面的 static、public、resources 等目录都在 classpath: 下面(如 src/main/resources/static)。
2.配置文件配置
其实Spring Boot也为我们提供了可以直接在 application.properties(或.yml)中配置的方法。
# 默认值为 /**
spring.mvc.static-path-pattern=
# 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开,

Spring Boot中静态资源等应该放在什么位置

web.upload-path=D:/temp/study13/ 
spring.mvc.static-path-pattern=/** 
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,  classpath:/static/,classpath:/public/,file:${web.upload-path}

默认情况是可以放到:resources、static、public,但通过我上面的配置还可以放到:D:/temp/study13/

更多Springboot文章可百度我昵称的中文部份

springboot不能给resource 跟目录放静态文件么

在程序开发过程中可能会有这样的需求:开发和部署的配置信息可能会不同,以传统的方式就是在配置文件里面写好配置,在部署的时候再去修改这些配置,这样肯定会有很多问题,比如忘记修改、修改错误等。 而Springboot提供了多配置文件的支持解决了这一问题。
Springboot的多配置文件是指:系统中存在多个配置文件,在不同的运行环境使用不同的配置文件即可。
创建测试项目
新建的study04项目的文件结构如下:
|-study04(项目名称)
| - src
| | - main
| | | - java
| | | | - com.zslin
| | | | | - RootApplication.java
| | | - resources
| | | | - application.properties
| | | | - application-dev.properties
| | | | - application-test.properties
| | - test
| | | - java
| | | | - com.zslin
| | | | | - MyTest.java
| - pom.xml
| - study04.iml

RootApplication.java
@SpringBootApplication
public class RootApplication {

public static void main(String [] args) {
SpringApplication.run(RootApplication.class, args)
}
}

这个Java文件没有什么特别,只是一个最基本的Springboot的入口
application.properties
spring.profiles.active=dev

在核心配置文件里面的spring.profiles.active=dev这个设置表示系统默认使用dev(即application-dev.properties)中的配置。
application-dev.properties
server.port=2222
test.msg=this is dev config

在这个配置文件里面只设置了端口为2222,和配置test.msg为this is dev config
application-test.properties
server.port=1111
test.msg=this is test config

在这个配置文件里面和application-dev.properties中的配置一样,只是对应值有所不同。
现在在系统中已经有两种不同的配置信息,只是默认是使用application-dev.properties中的配置。
MyTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {

@Value("${test.msg}")
private String msg

@Test
public void testConfig() {
System.out.println("cur msg is : " msg)
}
}

这里的输入结果是:cur msg is : this is dev config,说明现在使用的配置文件是application-dev.properties
注意: 当将application.properties的内容修改为spring.profiles.active=test后,再运行这个测试方法时将得到结果:cur msg is : this is test config
在单元测试中指定配置文件
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class MyTest2 {

@Value("${test.msg}")
private String msg

@Test
public void testConfig() {
System.out.println("cur msg is : " msg)
}
}

MyTest2与MyTest唯一的区别就是在MyTest2的类上多加了一个注释@ActiveProfiles("test"),加上这个注释就表示现在使用application-test.properties这个配置文件,同样换成dev也就是使用application-dev.properties中的配置。
运行测试方法即可得到对应配置文件中的信息。
启动项目时指定不同的配置文件
启动项目的方法一般有两种 :
1、 运行RootApplication中的main方法。
2、 使用命令:mvn spring-boot:run
这两方法默认都是使用application.properties中的配置信息,如果有指定spring.profiles.active则使用指定的配置信息,这种方式一般用在产品运行时,在开发和测试的时候则需要指定配置文件。
运行main可以在运行里的Config里面来配置,这个我基本没有使用过,我用的是第二种方法:
mvn spring-boot:run -Dspring.profiles.active=dev 即使用application-dev.properties中的配置信息,此时可以看到控制台显示系统使用的端口是dev中的2222
多配置文件这块我应用的较多的是在数据库的配置,开发过程中的数据库肯定是在本机,用户名和密码也是本机数据库的,而当项目部署到服务器时,数据库的地址、用户名和密码就得修改,所以使用了多配置文件,只需要在启动项目的时候指定配置文件即可。
示例代码:https://github.com/zsl131/spring-boot-test/tree/master/study04

关于springMVC中静态文件路径问题