文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot Web静态资源规则与定制化怎么处理

2023-07-02 13:11

关注

今天小编给大家分享一下SpringBoot Web静态资源规则与定制化怎么处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1.相关概念

2.静态资源目录

默认只要静态资源放在类路径(resources)下:

/static

/public

/resources

/META-INF/resources

浏览器访问: 当前项目根路径/ + 静态资源名

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面。

我们在controller里写个测试方法来测试一下

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

把controller里的方法注释后

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

也可以改变默认的静态资源路径,/static,/public,/resources, /META-INF/resources失效

application.properties

#静态资源路径
spring.resources.static-locations=classpath:/dir1/,classpath:/dir2/

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

3.静态资源访问前缀

application.properties

#静态资源访问前缀, 就是浏览器网址路径加前缀
spring.mvc.static-path-pattern=/res/**

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

4.欢迎页支持

就是网址上没有访问映射时, 会自动跳转到欢迎页,

静态资源路径下 index.html。

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

5.自定义favicon

指网页标签上的小图标。

favicon.ico 放在静态资源目录下即可。

SpringBoot Web静态资源规则与定制化怎么处理

SpringBoot Web静态资源规则与定制化怎么处理

6.源码分析

@AutoConfiguration(    after = {DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})@ConditionalOnWebApplication(    type = Type.SERVLET)@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})@AutoConfigureOrder(-2147483638)public class WebMvcAutoConfiguration {    public static final String DEFAULT_PREFIX = "";    public static final String DEFAULT_SUFFIX = "";    public static final PathPatternParser pathPatternParser = new PathPatternParser();    private static final String SERVLET_LOCATION = "/";    public WebMvcAutoConfiguration() {    }

给容器中配置的内容:

配置文件的相关属性的绑定:WebMvcProperties == spring.mvc、WebProperties==spring.web

    @Import({WebMvcAutoConfiguration.EnableWebMvcConfiguration.class})    @EnableConfigurationProperties({WebMvcProperties.class, WebProperties.class})    @Order(0)    public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {        private static final Log logger = LogFactory.getLog(WebMvcConfigurer.class);        private final Resources resourceProperties;        private final WebMvcProperties mvcProperties;        private final ListableBeanFactory beanFactory;        private final ObjectProvider<HttpMessageConverters> messageConvertersProvider;        private final ObjectProvider<DispatcherServletPath> dispatcherServletPath;        private final ObjectProvider<ServletRegistrationBean<?>> servletRegistrations;        private final WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer resourceHandlerRegistrationCustomizer;        private ServletContext servletContext;

配置类只有一个有参构造器

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

资源处理的默认规则

  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});                    }                });            }        }

根据上述代码,我们可以同过配置禁止所有静态资源规则。

application.properties

#禁用所有静态资源规则
spring.web.resources.add-mappings=false

静态资源处理规则:

 public static class Resources {        private static final String[] CLASSPATH_RESOURCE_LOCATIONS         = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};        private String[] staticLocations;        private boolean addMappings;        private boolean customized;        private final WebProperties.Resources.Chain chain;        private final WebProperties.Resources.Cache cache;

欢迎页处理规则:

        @Bean        public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext, FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {            WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern());            welcomePageHandlerMapping.setInterceptors(this.getInterceptors(mvcConversionService, mvcResourceUrlProvider));            welcomePageHandlerMapping.setCorsConfigurations(this.getCorsConfigurations());            return welcomePageHandlerMapping;        }
    WelcomePageHandlerMapping(TemplateAvailabilityProviders templateAvailabilityProviders, ApplicationContext applicationContext, Resource welcomePage, String staticPathPattern) {        if (welcomePage != null && "/**".equals(staticPathPattern)) {            logger.info("Adding welcome page: " + welcomePage);            this.setRootViewName("forward:index.html");        } else if (this.welcomeTemplateExists(templateAvailabilityProviders, applicationContext)) {            logger.info("Adding welcome page template: index");            this.setRootViewName("index");        }     }

以上就是“SpringBoot Web静态资源规则与定制化怎么处理”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯