Spring Boot Web开发之web相关配置——SpringMVC自动配置(二)
Spring Boot自动配置SpringMVC(一) - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)讲述了关于DispatcherServlet注册到诸如tomcat容器中的自动配置过程。那么Spring Boot究竟提供了关于Spring MVC的哪些配置,即我们可以直接使用的?
通过源码分析,依据之前的经验可以找到WebMvcAutoConfiguration的源码,其提供了如下配置
1、自动配置的ViewReResovler
如上图可知默认配置了3个ViewReResovler:
1)ContentNegotiatingViewResolver:这是一个特殊的ViewReResovler——其不是自己处理View而是代理给不同的ViewReResovler来处理不同的View,它有着最高的优先级。
2)BeanNameViewReResovler:在控制器中的一个方法的返回值的字符串(视图名)会根据BeanNameViewReResovler去查找Bean的名称为返回字符串的View来渲染视图。
3)InternalResourceViewResolver:这个就比较常用了——主要通过设置前后缀以及控制器中方法返回视图名的字符串以得到实际页面。在Spring MVC项目中通常自定义ViewResolver使用的。
2、自动配置的静态资源(类路径和webjar)
1)类路径:把类路径下的/static、/public、/resources和/META-INF/resources文件夹下的静态文件直接映射为/**,可以通过http://localhost:8080/**来访问。
2)webjar:什么是webjar?就是将常用的脚本框架封装在jar包中的jar,更多关于webjar的内容可以访问https://www.webjars.org/。
把webjar的/META-INF/resources/webjars/下的静态文件映射为/webjar/**,可以通过http://localhost:8080/webjar/**访问。
3、自动配置Formatter和Converter
对于Converter可以参考Spring MVC参数绑定(如何接收请求参数及返回参数)中日期类型转化部分。
4、自动配置的HttpMessageConverters
5、静态首页的支持
把静态index.html文件防止在如下目录:
1)classpath:/META-INF/resources/index.html
2)classpath:/resources/index.html
3)classpath:/static/index.html
4)classpath:/public/index.html
当我们访问应用根目录http://localhost:8080时,会直接映射。
对于以上Spring Boot提供的默认配置,如果不符合需求的要求怎么解决呢?当然可以接管Spring Boot的Web配置:通过@Configuration和@EnableWebMvc注解可以实现完全由开发者接管控制的MVC配置。
但在实际生产中Spring Boot提供的配置大部分是符合开发者需求的,对于额外需要添加的配置可以定义一个配置类并实现WebMvcConfigurer而无需使用@EnableWebMvc注解。这样既可以保留Spring Boot提供的功能,亦可以扩展Mvc的功能。