欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot自定义静态资源映射方法

程序员文章站 2022-07-08 23:29:08
...

本文欢迎转载,转载请注明出处,谢谢! http://blog.csdn.net/colton_null 作者:喝酒不骑马 Colton_Null from CSDN


为什么要自定义静态资源映射?

SpringBoot默认将静态资源映射到resources目录下的public、resources、static等目录。
如果是web静态资源例如html、css、js、网站插图等静态资源,是可以放在这些目录下的。

然而,对于用户上传来的文件,放在resources目录下是有问题的。如果程序是以jar包形式运行的话,总不能每次发布打包都要把用户上传的文件也一并打进jar吧?这显然不是一个好方法。

那能不能将一些动态维护的文件,放在服务器磁盘的某个目录下(项目目录之外),并且通过SpringBoot服务进行访问呢?答案是可以的。

如何做?

只需要实现类继承WebMvcConfigurerAdapter并重写方法addResourceHandlers,将磁盘上文件存放的绝对路径映射,就可以通过访问SpringBoot服务来访问文件了。

新建一个WebAppConfig类如下

@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/myTest/**").addResourceLocations("file:D:/test/");
        super.addResourceHandlers(registry);
    }
}

这样就将D盘上的test目录映射到myTest路径下。
现在在D盘test目录下有一个test.jpg图片,那么通过访问http://localhost:8080/myTest/test.jpg就可以访问到该图片了

提高用户体验之自定义错误界面

如果现在我访问http://localhost:8080/myTest/test222.jpg(实际上没有这个文件),那么页面会报Whitelabel Error Page。这对普通用户来说极其不友好。

我们可以通过自定义错误页面,当用户访问错误路径时,则跳到自定义的错误界面给予友好提示,来提高用户的体验。

在WebAppConfig类中,再添加如下方法

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
   return new EmbeddedServletContainerCustomizer() {
      @Override
      public void customize(ConfigurableEmbeddedServletContainer container) {
         ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html");
         ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");
         ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");
         container.addErrorPages(error401Page, error404Page, error500Page);
      }
   };
}

错误界面所在目录如下
SpringBoot自定义静态资源映射方法

这样,在访问错误路径时候,就可以跳转到自定义的友好界面了。
SpringBoot自定义静态资源映射方法