Spring MVC

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对象

使用@ResponseBody注解返回json的情况

  • 在HandlerAdapter.hadle()中完成了Response输出。
    • RequestMappingHandlerAdapter.invokeHandlerMethod()
      • HandlerMethodReturnValueHandlerComposite.handleReturnValue()
        • RequestResponseBodyMethodProcessor.handleReturnValue()

重定向

  • 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()

官方文档

Spring的应用程序上下文 ApplicationContext
  • BeanFactory

    • DefaultListableBeanFactory
  • ApplicationContext

    • ClassPathXmlApplicationContext
    • FileSystemXmlApplicationContext
    • AnnotationConfigApplicationContext
  • WebApplicationContext

注意点:

  1. Spring中的存在父子ApplicationContext.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值