美文网首页杂记
servlet 以及spring boot 对静态资源的处理

servlet 以及spring boot 对静态资源的处理

作者: 嘿嘿_信我者得永生 | 来源:发表于2018-08-20 14:50 被阅读0次
  1. 默认情况下spring.resources.add-mappings 的属性为true
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
public class ResourceProperties {

    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
            "classpath:/META-INF/resources/", "classpath:/resources/",
            "classpath:/static/", "classpath:/public/" };

此时在这些目录的资源当将被当成静态资源,直接访问

如果需要自定义添加其他资源,则可以扩展WebMvcConfigurer

@Configuration
public class SwaggerConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        registry.addResourceHandler("/swagger/**").addResourceLocations("classpath:/static/swagger/");
        registry.addResourceHandler("/static/**").addResourceLocations("/static/"); //自定义一个资源目录,用来放置静态资源
    }
  1. spring.static-path-pattern: /static/** 该属性的作用是将该地址转发到 上面的静态资源目录,如果设定了该值,则在访问路径中必须加入该值,才能访问到静态资源,如果不设置该值,则放在静态资源目录的所有资源可以在根目录下面访问到

  2. 假设 /catalog 是 Context Path ,则访问 /catalog/index.html 时,Web容器可以通过以下情况下满足这个请求:

在一个 Web 应用程序的基础目录里有一个 index.html 文件 (这个优先级最高)
或者在 WEB-INF/lib 目录的 jar 包里的 META-INF/resources 目录下有 index.html 文件
特殊的目录 : WEB-INF 。该目录下的大部分文档并不是 public 的,除了在 WEB-INF/lib 目录下的 jar 文件里的 META-INF/resources 的静态文件或JSP 文件。

但是,WEB-INF 目录的内容,可以通过 servlet 代码 ServletContext 对象的 getResource 和 getResourceAsStream 方法来访问。

由于匹配资源的请求映射是大小写敏感的,客户端请求 /WEB-INF/foo /WEb-iNf/foo ,它们不应该返回这些内容,也不应该返回任何的目录列表。

Web应用程序的 class loader 必须首先加载 WEB-INF/classes 目录,然后再到 WEB-INF/lib 目录。除了 Jar 包文件里的静态资源外,其他任何从客户端的请求访问 WEB-INF 目录,必须返回 404 。

相关文章

网友评论

    本文标题:servlet 以及spring boot 对静态资源的处理

    本文链接:https://www.haomeiwen.com/subject/afhliftx.html