【Spring Boot系列学习】04.Spring Boot静态资源访问及拦截器处理

一、静态资源的访问

Spring Boot 默认提供静态资源的处理

1.静态资源的默认支持

springboot提供的静态资源映射如下:

分别是:
classpath:/META-INF/reasources
classpath:/resources
classpath:/static
classpath:/public

其访问优先级从高到低一次是:/META-INF/reasources>resources>static>public

启动项目,访问http://localhost:8080/,可验证其优先级。


可通过如下方式设置其访问路径,如设置为/bj/**,则访问路径为http://localhost:8080/bj/;及资源路径

# 设置访问路径默认值为 /**
spring.mvc.static-path-pattern=
# 默认值为 classpath:/META-NF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开

2.静态资源的自定义配置

若spring boot提供的默认配置不能满足需求,可以通过:
1).完全自定义的配置(无需springboot提供的spring mvc的默认配置),可以通过一个配置类添加@EnableWebMvc来实现完全自己控制的MVC控制。容易导致所有URL访问时返回 404 错误。
2).默认与自定义配置共存:可以通过定义一个配置类并继承WebMvcConfigurerAdapter。(或实现WebMvcConfigurer接口,只是需要实现该接口的所有方法,WebMvcConfigurerAdapter是该接口的一个实现类,只需要重写对应的方法即可增加额外的配置)。
注意:spring boot2.0之后该WebMvcConfigurerAdapter类已经废弃,需要使用WebMvcConfigurationSuppot类,但使用该类会屏蔽Spring Boot的@EnableAutoConfiguration中的设置,即application.properties中添加配置的映射配置没有启动。此时需在该实现类中重写映射信息,即重写方法addViewControllers。
接口常用方法有:
a.自定义资源映射addResourceHandlers

@Configuration
public class MyWebConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        //配置自定义静态资源映射路径,即对外暴露的访问路径
        registry.addResourceHandler("/bj/**")
        //配置自定义静态资源存储目录,可为项目中路径("classpath:/bj/")或外部路径("file:e:/bj/")
                .addResourceLocations("classpath:/bj/");
        super.addViewControllers(registry);
    }
}

在浏览器中访问,可以查看到该图片信息。

此时在访问http://localhost:8080/,则报错

b.页面跳转addViewControllers,即映射跳转信息

以前写SpringMVC的时候,如果需要访问一个页面,必须要写Controller类,然后再写一个方法跳转到页面;在springboot中,重写addViewControllers方法也可达到相同的效果。

@Configuration
public class MyWebConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/tologin").setViewName("login");
    }
}

启动项目,访问两个路径都报错
原因在于1没有配置视图解析策略,2没有视图文件

c.拦截器addInterceptors

i:创建自定义拦截器类,并实现接口HandlerInterceptor接口;
ii:重写addInterceptors方法,将自定义拦截器类添加到拦截链中。

二、静态资源的实现原理

通过查看WebMvcAutoConfiguration自动配置类查看添加资源映射方法addResourceHandlers()方法,可得:

1)、/webjars/**下的所有请求都去访问classpath:/META-INF/resources/webjars/下找资源;

    webjars:以jar包的方式引入静态资源,参考:https://www.webjars.org
   即通过https://www.webjars.org网址找到所需的静态资源(如:jQuery)所对应的依赖,将其添加到pom文件中,从而引入静态资源的jar包,其对应的资源路径即为/META-INF/resources/webjars/静态资源,访问时即可通过http://localhost:8080/webjars/静态资源名  的方式来访问。

2)./**  访问当前项目的任何路径(资源)

若没有处理过,则将会去如下路径中找对应的资源。

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值