SpringBoot------Web开发静态资源导入(九)

Web开发

web开发要解决的问题:
1.导入静态资源
2.首页
3.jsp,模板引擎Thymeleaf
4.装配扩展SpringMVC
5.增删改查
6.拦截器
7.国际化

1.导入静态资源

代码层面分析:
查看WebMvcAutoConfiguration配置类。
这个类里有WebMvcAutoConfigurationAdapter静态内部类。

    @Configuration(
        proxyBeanMethods = false
    )
    @Import({
    
    WebMvcAutoConfiguration.EnableWebMvcConfiguration.class})
    @EnableConfigurationProperties({
    
    WebMvcProperties.class, ResourceProperties.class, WebProperties.class})
    @Order(0)
    public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer {
    
    
        private final WebMvcProperties mvcProperties;
        private final ListableBeanFactory beanFactory;
        private final ObjectProvider<HttpMessageConverters> messageConvertersProvider;
        private final ObjectProvider<DispatcherServletPath> dispatcherServletPath;
        private final ObjectProvider<ServletRegistrationBean<?>> servletRegistrations;
        final WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer resourceHandlerRegistrationCustomizer;

        public WebMvcAutoConfigurationAdapter(WebProperties webProperties, WebMvcProperties mvcProperties, ListableBeanFactory beanFactory, ObjectProvider<HttpMessageConverters> messageConvertersProvider, ObjectProvider<WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider, ObjectProvider<DispatcherServletPath> dispatcherServletPath, ObjectProvider<ServletRegistrationBean<?>> servletRegistrations) {
    
    
            this.mvcProperties = mvcProperties;
            this.beanFactory = beanFactory;
            this.messageConvertersProvider = messageConvertersProvider;
            this.resourceHandlerRegistrationCustomizer = (WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer)resourceHandlerRegistrationCustomizerProvider.getIfAvailable();
            this.dispatcherServletPath = dispatcherServletPath;
            this.servletRegistrations = servletRegistrations;
            this.mvcProperties.checkConfiguration();
        }

在这个类中有加载静态资源的方法addResourceHandlers。

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

                });
            }
        }

第一种能拿到web资源的方式

什么是webjars?
在这里插入图片描述
可以在webjars的官网首页找到许多web端所需要的插件,对应的maven坐标。将它的依赖放到pom文件中即可导入。但是这种方法比较笨【不推荐】
在这里插入图片描述
此时就拿到这个文件,并且能够通过浏览器访问到。
在这里插入图片描述

在这里插入图片描述

第二种方式:

获取静态资源的路径

 this.mvcProperties.getStaticPathPattern()
 --
 再进一步深入,发现staticPathPattern为
  this.staticPathPattern = "/**";
 -------
 private static final String[] CLASSPATH_RESOURCE_LOCATIONS = 
 new String[]{
    
    "classpath:/META-INF/resources/",
  "classpath:/resources/", 
  "classpath:/static/",
   "classpath:/public/"};

一共有5个位置,支持静态资源位置。
在这里插入图片描述

由此可见,这5个目录都能都访问到。
在这里插入图片描述
经过试验,
“classpath:/resources/”, 优先级最高
“classpath:/static/”, 优先级第二【默认使用】
“classpath:/public/” 优先级第三
直接在resources下方静态资源并不能够访问到。

第三种方式【不推荐】

在yaml文件中自定义路径。

spring:
  mvc:
    static-path-pattern: 

Guess you like

Origin blog.csdn.net/cz_chen_zhuo/article/details/117080476