DispatcherServlet
DispatcherServlet请求的大致处理流程
绑定一些Attribute
- WebApplicationContext/LocalResolver/ThemeResolver
处理Multipart
- 如果是,则将请求转为MultipartHttpServletRequest
Handler处理
- 如果找到对应handler,执行Controller及前后置处理器逻辑
处理返回的Model,呈现视图
定义类型转换
自己实现WebMvcConfigurer
- SpringBoot在WebMvcAutoConfiguration中实现了一个。
- 添加自定义的Converter。
- 添加自定义的Formatter。
定义校验
- 通过Validator对绑定结果进行校验
- Hibernate Validator
- @Valid注解
- BindingResult
Multipart上传文件
-
配置MultipartResolver
- SpringBoot自动配置MultipartAutoConfiguration
-
支持类型multipart/form-data
-
MultipartFile类型
视图解析
ViewResolver与View接口
- AbstractCachingViewResolver
- UrlBasedViewResolver
- FreeMarkerViewResolver
- ContentNegotiatingViewResolver
- InternalResourceViewResolver
DispatcherServlet中的视图解析逻辑
-
initStrategies()
- initViewResolvers()初始化了对应的ViewResolver
-
doDispatch()
- processDispatchResult()
- 没有返回视图的话,尝试RequestToViewNameTranslator
- resolveViewName()解析View对象
- processDispatchResult()
使用@ResponseBody注解返回json的情况
- 在HandlerAdapter.hadle()中完成了Response输出。
- RequestMappingHandlerAdapter.invokeHandlerMethod()
- HandlerMethodReturnValueHandlerComposite.handleReturnValue()
- RequestResponseBodyMethodProcessor.handleReturnValue()
- HandlerMethodReturnValueHandlerComposite.handleReturnValue()
- RequestMappingHandlerAdapter.invokeHandlerMethod()
重定向
- redirect:
- forward:
配置MessageConverter
- 通过WebMvcConfigurer的configureMessageConverters()
- SpringBoot自动查找HttpMessageConverters()进行注册
SpringBoot中的静态资源配置
核心逻辑
- WebMvcConfigurer.addResourceHandlers()
常用配置
- spring.mvc.static-path-pattern=/**
- Spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/classpath:/static/,classpath:/public/
SpringBoot中的缓存配置
常用配置(默认时间单位都是秒)
- ResourceProperties.Cache
- spring.resources.cache.cachecontrol.max-age=时间
- spring.resources.cache.cachecontrol.no-cache=true/false
- spring.resources.cache.cachecontrol.s-max-age=时间
Controller中手工设置缓存
@GetMapping("/book")
public ResponseEntity<Book> showBook(){
Book book = Book.builder().name("java开发从入门到放弃").price(new BigDecimal("25.66").doubleValue()).build();
return ResponseEntity.ok().cacheControl(CacheControl.maxAge(30, TimeUnit.DAYS))
.eTag("1.1")
.body(book);
}
SpringMVC的异常解析
核心接口
- HandlerExceptionResolver
实现类
- SimpleMappingExceptionResolver
- DefaultHandlerExceptionResolver
- ResponseStatusExceptionResolver
- ExceptionHandlerExceptionResolver
SpringBoot中的RestTemplate
- SpringBoot中没有自动配置RestTemplate
- SpringBoot提供了RestTemplateBuilder.build()
常用方法
GET请求
- getForObject() / getForEntity()
POST请求
- postForObject() / postForEntity()
PUT请求
- put()
DELETE请求
- delete()
官方文档
-
https://docs.spring.io/spring/docs/5.1.6.RELEASE/spring-framework-reference/web.html#webmvc-client
-
Controller
- @RestController
-
@RequestMapping
- @GetMapping / @PostMapping
- @putMapping / @DeleteMapping
-
@RequestBody / @ResponseBody / @ResponseStatus
-
xxxResolver
- ViewResolver
- HandlerExceptionResolver
- MultipartResolver
-
HandlerMapping
Spring的应用程序上下文 ApplicationContext
-
BeanFactory
- DefaultListableBeanFactory
-
ApplicationContext
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
- AnnotationConfigApplicationContext
-
WebApplicationContext
注意点:
- Spring中的存在父子ApplicationContext.