上一篇:《SpringBoot对Spring MVC都做了哪些事?(一)》

静态内容

默认情形下,Spring Boot从类路径中名为/static(或/public或/resources或/META-INF/resources)的目录或ServletContext的根目录供应静态内容。
它利用Spring MVC中的ResourceHttpRequestHandler,因此你可以通过添加自己的WebMVCConfiguer并重写addResourceHandlers方法来修正该行为。

在一个独立的web运用程序中,容器中的默认servlet也被启用,并作为备用,如果Spring决定不处理它,则从ServletContext的根供应内容。
大多数情形下,这不会发生(除非你修正默认的MVC配置),由于Spring始终可以通过DispatcherServlet处理要求

springmvc同时支持jsp和vmSpringBoot对Spring MVC都做了哪些事二 CSS

默认情形下,资源映射到/,但你可以通过spring.mvc.static-path-pattern属性进行调度。
例如,可以通过以下办法将所有资源重新定位到/resources/中:

spring: mvc: static-path-pattern: "/resources/"

你也可以通过spring.web.resources.static-locations属性实行设置静态资源的位置。
Servlet的根高下文路径“/”也会自动添加为一个位置。

除了前面提到的“标准”静态资源位置之外,Webjars内容还有一种分外情形。
任何路径在/webjars/的资源都是从jar文件中供应的,如果它们被打包成webjars格式的话。

Spring Boot还支持Spring MVC供应的高等资源处理特性,许可利用缓存毁坏静态资源或为webjar利用版本无关url等用例。

要对webjar利用版本不愿定的url,须要添加Webjars-locator-core依赖。
然后声明你的Webjar。
以jQuery为例,添加“/Webjar/jQuery/jQuery.min.js”,得到“/Webjar/jQuery/x.y.z/jQuery .min.js”,个中x.y.z是Webjar版本。

欢迎页

Spring Boot支持静态和模板欢迎页面。
它首先在配置的静态内容位置中查找index.html文件。
如果没有找到,它将查找索引模板。
如果找到个中一个,它将自动用作运用程序的欢迎页面。

路径匹配和内容协商

Spring MVC可以通过查看要求路径并将其与运用程序中定义的映射(例如,Controller方法上的@GetMapping注释)来将传入的HTTP要求映射到处理程序。

默认情形下,Spring Boot选择禁用后缀模式匹配,这意味着像“GET /projects/spring-boot”这样的要求。
json"不会匹配@GetMapping("/projects/spring-boot")映射。
这被认为是Spring MVC运用程序的最佳实践。
这个特性紧张是在过去的HTTP客户端没有发送精确的“Accept”要求头的时候有用;我们须要确保向客户端发送精确的内容类型。
如今,内容协商更加可靠。

还有其他方法来处理HTTP客户端不一致地发送精确的“Accept”要求头。
不该用后缀匹配,我们可以利用查询参数来确保像“GET /projects/spring-boot?”format=json"将被映射到@GetMapping("/projects/spring-boot"):

示例:

@GetMapping("/format")public Map<String, Object> format() { Map<String, Object> result = new HashMap<>() ; result.put("name", "张三") ; return result ; }

如上接口,在正常要求的情形下返回:

再次测试,这次我们将Accept要求Header做下修正如下:

要求失落败了,你客户端能吸收的是text/html,但是做事端天生的application/json类型,以是客户端是无法解析处理的。

对做事端做如下配置:

spring: mvc: contentnegotiation: favor-parameter: true

在要求中这次添加一个format参数:

成功,如果你将format值改成其它又会缺点。

修正参数名:

spring: mvc: contentnegotiation: favor-parameter: true parameter-name: akf

通过parameter-name将默认的format修正为akf

自定义要求header类型

spring: mvc: contentnegotiation: media-types: cnn: app/cnn

这时候我们的Accept也是可以吸收app/cnn的要求类型的

ConfigurableWebBindingInitializer

Spring MVC利用WebBindingInitializer为特定的要求初始化WebDataBinder。
如果你创建了自己的ConfigurableWebBindingInitializer @Bean, Spring Boot会自动配置Spring MVC来利用它。

模版引擎

除了REST web做事之外,还可以利用Spring MVC来供应动态HTML内容。
Spring MVC支持各种模板技能,包括thymleaf、FreeMarker和jsp。
此外,许多其他模板引擎也包含它们自己的Spring MVC集成。

Spring Boot包括对以下模板引擎的自动配置支持:

FreeMarkerGroovyThymeleafMustache

如果可能的话,该当避免利用jsp。
当将它们与嵌入式servlet容器一起利用时,有几个已知的限定。

当你利用这些带有默认配置的模板引擎之一时,你的模板将自动从src/main/resources/templates中获取。

完毕!