在之前的文章(springboot配置静态资源访问路径)中说过,springboot默认的加载静态资源的地方是在resources目录下的static文件夹下,其实除了resources目录下得static文件夹可以被访问,在resources目录下创建resources文件夹、public文件夹、META-INF/resources文件夹都是可以被访问到的,只不过springboot默认推荐我们使用static文件夹,而且查找的优先级是META-INF/resources》public》resources》static。

当我们要修改springboot默认的静态资源加载路径的时候,我们可以直接在配置文件properties、yml中直接设置,或者找个配置类(使用@configuration注解的类)使其继承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter或者org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport并重写addResourceHandlers(ResourceHandlerRegistry registry)方法,这个方法在WebMvcConfigurerAdapter和WebMvcConfigurationSupport中都是空实现。

在此,建议在springboot 1.x版本使用WebMvcConfigurerAdapter这个类,2.x版本实现WebMvcConfigurer 接口,不推荐使用WebMvcConfigurationSupport和@EnableWebMvc注解。因为springboot默认会给我们添加一个配置类WebMvcAutoConfiguration,但是这个配置类的加载是有条件的( @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)),只有缺少WebMvcConfigurationSupport配置类才会生效,当我们使用继承WebMvcConfigurationSupport或者@EnableWebMvc注解(这个注解会导入DelegatingWebMvcConfiguration,这个类继承自WebMvcConfigurationSupport

)时,springboot的就不会帮我们加载WebMvcAutoConfiguration这个配置类了,这个时候就需要我们进行一些webmvc的配置。而且比较坑的是如果我们使用继承WebMvcConfigurationSupport这种方式,不能多次使用,也就是说如果我们有两个及以上配置类继承WebMvcConfigurationSupport时,只会有一个生效;当我们即使用@EnableWebMvc又有配置类继承WebMvcConfigurationSupport时,我们的配置类是会生效的。

@EnableWebMvc、WebMvcConfigurationSupport、WebMvcConfigurerAdapter这三个使用效果:

  1. 使用WebMvcConfigurerAdapter  =====》全部生效
  2. 使用WebMvcConfigurationSupport(多个)   ====》某一个生效,其他不生效
  3. 使用WebMvcConfigurerAdapter + WebMvcConfigurationSupport       ====》WebMvcConfigurationSupport生效
  4. 使用@EnableWebMvc+ WebMvcConfigurationSupport       ====》WebMvcConfigurationSupport生效
  5. 使用@EnableWebMvc+ WebMvcConfigurerAdapter     ====》WebMvcConfigurerAdapter 不生效

springboot关于webmvc配置问题记录的更多相关文章

  1. hadoop离线计算项目上线配置问题记录

    最近上线一个hadoop离线处理项目,因为在低配置(8G,4核)的时候装的CDH,后来集群配置(64G,16核)上来了,但许多参数不会自动修改,需要自己调整,处理过程中遇到的配置问题记录下. 1.hi ...

  2. SpringBoot使用logback日志记录

    在resources里的配置文件: logback-spring.xml <?xml version="1.0" encoding="UTF-8" ?&g ...

  3. Spring-Boot + MyBatis-Plus 踩坑记录

    这两天在学SpringBoot+MyBatis的开发,配置开发环境和DEMO的过程中踩了很多坑,在这里记录一下. 我的开发环境是idea + JDK 1.8.0.211. 首先展示一下demo的项目整 ...

  4. SpringBoot学习(学习过程记录)

    关于微服务和SOA 这,仅是我学习过程中记录的笔记.确定了一个待研究的主题,对这个主题进行全方面的剖析.笔记是用来方便我回顾与学习的,欢迎大家与我进行交流沟通,共同成长.不止是技术. 官网教程学习ht ...

  5. SharePoint 2013 Workflow 分布式配置问题记录

    SharePoint 2013 发布已经有一段时间,前段事件主要是做财务项目,用到Oracle和HFM,由于从来没了解过这两个软件,把大部分时间用在了学习Oracle和HFM的API,目前对HFM的A ...

  6. springboot添加fluent日志记录

    istio默认会进行日志的记录,但是仅仅记录到服务.以及服务之间调用的信息,不记录业务日志. 如: 所以需要添加业务日志记录. 1.引入依赖 <dependency>     <gr ...

  7. springBoot的搭建使用记录

    一: 首次搭建:https://blog.csdn.net/u013187139/article/details/68944972 整合mybatis: https://www.jianshu.com ...

  8. Servlet3.0使用@WebServlet注解配置问题记录

    文档说@WebServlet的配置属性都是可选的,不是必需的. 经实践,将一个Servlet配置成load-on-startup的Servlet时,若只添加loadOnStartup属性,该Servl ...

  9. SpringBoot 整合RabbitMQ错误记录

    1. 控制台报错:Exception in thread "main" java.io.IOException…… Caused by: com.rabbitmq.client.S ...

随机推荐

  1. BFC的理解与应用

    什么是BFC(Block formatting contexts) BFC的通俗理解: 首先BFC是一个名词,是一个独立的布局环境,我们可以理解为一个箱子(实际上是看不见摸不着的),箱子里面物品的摆放 ...

  2. vue中 使用SVG实现鼠标点击绘图 提示鼠标移动位置 显示绘制坐标位置

    <div class="div1"> <svg id="svg1" xmlns="http://www.w3.org/2000/sv ...

  3. 学习Saleforce | 业内第一份Salesforce学习者数据报告

    自从自由侠部落这个Salesforce中文学习平台成立以来,我们接触到了越来越多的Salesforce的学习者,由衷感觉到这个学习生态圈愈发蓬勃发展. 为了了解Salesforce学习者的基本情况.现 ...

  4. A - Oil Deposits DFS

    The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...

  5. 【JAVA】并发-基础IO

    一.java.io包支持.java的IO流有输入.输出两种,每种输入.输出流又可分为字节流.字符流两大类,字节流以字节为单位处理IO操作,字符流以字符为单位处理IO操作 JDK 1.4以后有java. ...

  6. OpenAL试水

    参考了https://wysaid.org/976.html. 这个博客给了一个EGE+OpenAL的demo和源代码.一开始没注意,博主也没有给EGE相关信息.会找不到EGE相关头文件,建议如果要二 ...

  7. Ubuntu上mysql, 通过python连接报错Can't connect to MySQL server on xxx (10061)

    通过sqlyog连接ubuntu上的mysql报错 试了试python直接连接也报同样的错 那应该就是ubuntu上mysql服务自己的问题了 查看mysql 版本 mysql -V root@clo ...

  8. Unity 游戏框架搭建 2019 (三十、三十一) MenuItem 显示顺序问题 & 类的提取

    在上一篇,我们得出了两个核心的学习思路: 根据问题去学习,并收集. 主动学习,并思考适用场景. 我们今天解决 MenuItem 显示顺序问题. 目前 MenuItem 显示如图所示: 我们来看下 Me ...

  9. SQL Server 之T-SQL基本语句 (1)

    花了一天的时间看完了一本<SQL必知必会>,举个范例,来总结一下零碎的知识点.一般关于数据库操作的项目都会涉及到数据库的基本查询语句.在这里面就主要讲解一些基本常用的sql使用方法. 注: ...

  10. 白话理解https

    为什么需要加密? 因为http的内容是明文传输的,传输过程有可能被劫持或被篡改(中间人攻击),如何解决? 当然是加密.最简单的方式就是对称加密(快). 对称机密 就是一个密钥,可以理解为一把钥匙,我们 ...