SpringBoot的静态资源处理(群姨妈问题)

2019-01-29 11:02:03

SpringBoot的静态资源处理(群姨妈问题)

关于这个问题,群里每个月,周都有人问,总是有人访问不到springboot的静态资源。所以,我把我熟悉的处理方法写出来。不对的地方,还望指教。

SpringBoot的版本(撰写本文时最新版本)

  1. 2.1.2.RELEASE

application.yml 配置

  1. spring:
  2. mvc:
  3. static-path-pattern: /static/**
  4. resources:
  5. static-locations:
  6. - classpath:/static/
  7. - file:D:\\static
  • spring.mvc.static-path-pattern 配置的是,访问静态资源的uri
  • spring.resources.static-locations 配置的是一个或者多个静态资源路径(文件夹)
    • 可以是classpath目录下的资源,使用classpath:开头
    • 可以是本地目录下的资源,使用file:开头

程序配置方式

其实我几乎没使用过这种方式,都是采用配置文件的方式来设置静态资源的映射

SpringBoot2.x建议实现接口WebMvcConfigurer来处理mvc相关的配置

  1. @Override
  2. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  3. registry.addResourceHandler("/static/**")
  4. .addResourceLocations("classpath:/static/")
  5. .addResourceLocations("file:D:/static/");
  6. }

访问classpath资源

访问本地目录资源

拦截器会拦截静态资源

如果拦截器的拦截规则是 /**,也就是拦截所有的请求,那么也会拦截到静态资源的请求

处理办法

  1. // 读取到配置里面的静态资源访问路径
  2. @Value("${spring.mvc.static-path-pattern}")
  3. private String staticPathPattern;
  4. @Override
  5. public void addInterceptors(InterceptorRegistry registry) {
  6. registry.addInterceptor(new HandlerInterceptor() {
  7. @Override
  8. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {
  9. System.out.println("拦截:" + request.getRequestURI());
  10. return HandlerInterceptor.super.preHandle(request, response, handler);
  11. }
  12. }).addPathPatterns("/**").excludePathPatterns(this.staticPathPattern); // 当拦截所有请求时,排除掉静态资源的uri
  13. }

请求静态资源,没有发生拦截

如果你有更好的方法,欢迎告诉我。

最后

你现在知道咋处理静态资源了么?能力一般,水平有限,不正的地方还望指出。


0
0
0

添加评论

正在回复:
取消
3
0
0
0