静态资源处理

        SpringBoot最大的特点就是自动装配

        首先我们新建一个干净的springboot项目,导入web依赖

静态资源处理

静态资源映射规则

        写请求非常简单,那我们要引入我们前端资源,我们项目中有许多的静态资源,比如css,js等文件,这个SpringBoot怎么处理呢?

        如果我们是一个web应用,我们的main下会有一个webapp,我们以前都是将所有的页面导在这里面的,对吧!但是我们现在的pom呢,打包方式是为jar的方式,那么这种方式SpringBoot能不能来给我们写页面呢?当然是可以的,但是SpringBoot对于静态资源放置的位置,是有规定的!

        

我们先来聊聊这个静态资源映射规则:

        SpringBoot中,SpringMVC的web配置都在 WebMvcAutoConfiguration 这个配置类里面;

内部类WebMvcAutoConfigurationAdapter中有很多配置方法

有一个方法:addResourceHandlers添加资源处理

//...
		@Override
		public void addResourceHandlers(ResourceHandlerRegistry registry) {
			if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}
            // webjar配置
			addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
            // 静态资源配置
			addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
				registration.addResourceLocations(this.resourceProperties.getStaticLocations());
				if (this.servletContext != null) {
					ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
					registration.addResourceLocations(resource);
				}
			});
		}
//...

什么是webjar呢?

        Webjars本质就是以jar包的方式引入我们的静态资源 , 我们以前要导入一个静态资源文件,直接导入即可。

        使用SpringBoot需要使用Webjars,我们可以去搜索一下:

        网站:https://www.webjars.org/all

        要使用jQuery,我们只要要引入jQuery对应版本的pom依赖即可!

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.4.1</version>
        </dependency>

        导入完毕,查看webjars目录结构,并访问Jquery.js文件!

 

        访问:只要是静态资源,SpringBoot就会去对应的路径寻找资源,我们这里访问: http://localhost:8080/webjars/jquery/3.4.1/jquery.js

 

第二种静态资源映射规则

        那我们项目中要是使用自己的静态资源该怎么导入呢?我们看下一行代码;

        我们去找staticPathPattern发现第二种映射规则 :/** , 访问当前的项目任意资源,它会去找 resourceProperties这个类,我们可以点进去看一下分析:

//...

	private String staticPathPattern = "/**";
//...
    public String getStaticPathPattern() {
		return this.staticPathPattern;
	}
//...
//...

		private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { 
            "classpath:/META-INF/resources/",
            "classpath:/resources/", 
            "classpath:/static/", 
            "classpath:/public/" };
//...
		private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
//...
		public String[] getStaticLocations() {
			return this.staticLocations;
		}
//...

        ResourceProperties 可以设置和我们静态资源有关的参数;这里面指向了它会去寻找资源的文件夹,即上面数组的内容。

        所以得出结论,以下四个目录存放的静态资源可以被我们识别:

            "classpath:/META-INF/resources/",
            "classpath:/resources/", 
            "classpath:/static/", 
            "classpath:/public/" 

        我们可以在resources根目录下新建对应的文件夹,都可以存放我们的静态文件;

        比如我们访问 http://localhost:8080/1.html , 他就会去这些文件夹中寻找对应的静态资源文件

 

 

 验证

 

发现优先级resources > static > public

自定义静态资源路径

        我们也可以自己通过配置文件来指定一下,哪些文件夹是需要我们放静态资源文件的,在application.properties中配置

spring.web.resources.static-locations=classpath:/coding/,classpath:/yuan/

        

        一旦自己定义了静态文件夹的路径,原来的自动配置就都会失效了!

 

        这个时候1.html就直接访问不了了,2.html就可以访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值