SpingBoot框架自定义首页和静态资源加载

举报
多米诺的古牌 发表于 2021/07/02 17:32:17 2021/07/02
【摘要】 1.SpingBoot框架中的静态资源加载和导入静态资源一般是指客户端发送请求到web服务器,web服务器从内存在取到相应的文件,返回给客户端,客户端解析并渲染显示出来,这类主要包括图片、样式等(比如css、js、image、404页面、首页等)。我们探寻下web项目对应的WebMvcAutoConfiguration自动装配类,可以看出静态资源的加载分为三大类:1.1 自定义,如果配置了自...

1.SpingBoot框架中的静态资源加载和导入

静态资源一般是指客户端发送请求到web服务器,web服务器从内存在取到相应的文件,返回给客户端,客户端解析并渲染显示出来,这类主要包括图片、样式等(比如css、js、image、404页面、首页等)。

我们探寻下web项目对应的WebMvcAutoConfiguration自动装配类,可以看出静态资源的加载分为三大类:

1.1 自定义,如果配置了自定义配置就不会再查下面几种类型的文件下的静态资源,即在application配置文件中配置了spring.mvc.static-path-pattern并且给他赋值,则只会走这个地址查询静态资源,而不再会走其他的默认配置的地方去查找静态资源。

1.2 webjars/**下的配置,这种基本不用了,只要在webjars下配置相关资源,访问时如:localhost:8080/webjars/XXX就可以访问到

1.3 默认this.staticLocations 下的四个地方,主要是使用这类进行静态资源配置

      1.3.1 classpath:/META-INF/resources/,根目录下的资源

      1.3.2 classpath:/resources/,根目录下的resources文件下的资源

      1.3.3 classpath:/static/,根目录下的static文件下的资源,主要是使用这类进行静态资源配置

      1.3.4 classpath:/public/,根目录下的public文件下的资源

至此SpringBoot框架中的静态资源加载,静态资源导入问题我们基本就已经探析明白了。

public void addResourceHandlers(ResourceHandlerRegistry registry) {
    if (!this.resourceProperties.isAddMappings()) {
        logger.debug("Default resource handling disabled");
    } else {
        this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
        this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
            registration.addResourceLocations(this.resourceProperties.getStaticLocations());
            if (this.servletContext != null) {
                ServletContextResource resource = new ServletContextResource(this.servletContext, "/");
                registration.addResourceLocations(new Resource[]{resource});
            }

        });
    }
}

2.SpingBoot框架实现自定义首页

SpingBoot框架已经让配置变很简单了,很简单几个步骤就可以搭建一个web项目。那么web的首页应该如何配置呢?

首先我们探寻下web项目对应的WebMvcAutoConfiguration自动装配类,发现了一个方法public WelcomePageHandlerMapping welcomePageHandlerMapping(...){...}并且这个方法将这个欢迎页的处理映射注入到了bean里面,查看发现我们可以从默认配置中this.mvcProperties.getStaticPathPattern()获取:

this.staticPathPattern = "/**";

还可以通过this.getWelcomePage()获取this.staticLocations = CLASSPATH_RESOURCE_LOCATIONS;找到静态资源默认查找的这个几个地方获取:

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

获取index.xml文件并且映射到首页

private Resource getIndexHtml(Resource location) {
    try {
        Resource resource = location.createRelative("index.html");
        if (resource.exists() && resource.getURL() != null) {
            return resource;
        }
    } catch (Exception var3) {
    }

    return null;
}

至此就可以访问定制好的首页了,比如访问locahost:8080就会默认跳转到你所配置的首页index.html中了

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200