当前位置: 首页 > 科技观察

SpringBoot对SpringMVC做了什么?(2)_0

时间:2023-03-17 18:47:11 科技观察

上一篇:《??SpringBoot对Spring MVC都做了哪些事?(一)??》静态内容默认情况下,SpringBoot从类路径或ServletContext的根目录中名为/static(或/public或/resources或/META-INF/resources)的目录中读取目录提供静态内容。它使用SpringMVC中的ResourceHttpRequestHandler,因此您可以通过添加自己的WebMVCConfiguer并覆盖addResourceHandlers方法来修改该行为。在一个独立的web应用程序中,容器中的默认servlet也被启用并充当后备,如果Spring决定不处理它,则从ServletContext的根提供内容。大多数时候,这不会发生(除非你修改默认的MVC配置),因为Spring总是可以通过DispatcherServlet来处理请求。默认情况下,资源映射到/**,但您可以通过spring.mvc.static-path-pattern属性进行调整。例如,可以通过以下方式将所有资源重新定位到/resources/**:spring:mvc:static-path-pattern:"/resources/**"您还可以通过spring.web.resources.static-locations属性执行集静态资源的位置。Servlet的根上下文路径“/”也会自动添加为一个位置。除了前面提到的“标准”静态资源位置之外,Webjars内容还有一个特例。如果以webjars格式打包,则路径在/webjars/**中的任何资源都是从jar文件提供的。SpringBoot还支持SpringMVC提供的高级资源处理功能,允许使用缓存破坏静态资源或为webjars使用版本无关的url等用例。要为webjars使用版本不确定的url,您需要添加Webjars-locator-core依赖项。然后声明你的webjar。以jQuery为例,添加“/Webjar/jQuery/jQuery.min.js”得到“/Webjar/jQuery/x.y.z/jQuery.min.js”,其中x.y.z为Webjar版本。欢迎页面SpringBoot支持静态和模板欢迎页面。它首先在配置的静态内容位置查找index.html文件。如果没有找到,它会寻找一个索引模板。如果找到其中之一,它将自动用作应用程序的欢迎页面。路径匹配和内容协商SpringMVC可以将传入的HTTP请求映射到处理程序,方法是查看请求路径并将其映射到应用程序中定义的映射(例如,控制器方法上的@GetMapping注释)。默认情况下,SpringBoot选择禁用后缀模式匹配,这意味着像“GET/projects/spring-boot”这样的请求。json"将不匹配@GetMapping("/projects/spring-boot")映射。这被认为是SpringMVC应用程序的最佳实践。此功能主要是在过去当HTTP客户端没有发送正确的“接受”时请求标头;我们需要确保向客户端发送正确的内容类型。如今,内容协商更加可靠。还有其他方法可以处理HTTP客户端不一致地发送正确的“接受”请求标头。而不是使用后缀匹配,我们可以使用查询参数来确保诸如“GET/projects/spring-boot?”之类的东西format=json”将被映射到@GetMapping(“/projects/spring-boot”):示例:@GetMapping("/format")publicMapformat(){Mapresult=newHashMap<>();result.put("姓名","张三");返回结果;如上界面,在正常请求的情况下Nextreturn:再次测试,这次我们修改AcceptrequestHeader如下:请求失败,你的客户端可以收到text/html,但是服务端生成的application/json类型,所以客户端无法解析和处理。服务端配置如下:spring:mvc:contentnegotiation:favor-parameter:true这次在请求中添加一个格式参数:success,如果把格式值改成其他的就会出错。修改参数名:spring:mvc:contentnegotiation:favor-parameter:trueparameter-name:akf通过parameter-name修改默认格式为akf。自定义请求头类型spring:mvc:contentnegotiation:media-types:cnn:app/cnn这时候我们的Accept也可以接收到app/cnn的请求类型。ConfigurableWebBindingInitializerSpringMVC使用WebBindingInitializer为特定请求初始化WebDataBinder。如果您创建自己的ConfigurableWebBindingInitializer@Bean,SpringBoot将自动配置SpringMVC以使用它。除了RESTWeb服务之外,模板引擎还可以使用SpringMVC来提供动态HTML内容。SpringMVC支持各种模板技术,包括thymleaf、FreeMarker和jsp。此外,许多其他模板引擎包括它们自己的SpringMVC集成。SpringBoot包括对以下模板引擎的自动配置支持:如果可能,应避免使用FreeMarkerGroovyThymeleafMustachejsp。将它们与嵌入式servlet容器一起使用时有几个已知的限制。当您使用这些模板引擎之一的默认配置时,您的模板将自动从src/main/resources/templates中获取。