5月13日是一个特殊的日子,母亲节也是这一天
SpringMVC高级应用
springMVC的数据转换和格式化
在http请求到达DispatherServlet之前寻找相应的HandlerMapping→对应的HandlerAdapter执行
配置<mvc:annotation-driven> 或者添加@EnableWebMvc的时候
spring会自动生成一个FormattingConversionServiceFactoryBean→DefaultFormattingConversionService
顶级接口:ConversionService 实现了ConverterRegistry 和 FormatterRegistry接口
SpringMVC为了对应HTTP请求,定义了HttpMessageConverter
两类:Converter GenericConverter 作用:Java内部各种类型转换
真正用到的:MappingJackson2HttpMessageConverter
@ResponseBody 会把相应的数据转换成JSON格式 但是不会出现在ModelAndView中
格式化器 Formatter
@DateTimeFormat
@NumberFormat
给Controller添加通知
@ControllerAdvice
@InitBinder
@ExceptionHandler
@ModelAttribute
处理异常
可以在HttpStatus的源码中查看枚举类
@responseStatus
国际化(i18n)
LocaleResolver 决定UserLocale
DispatherServlet只能注册一个LocaleResolver
拓展了LocaleContetResolver:可以处理语言和时区的问题
CookieLocalResolver使Cookie实现国际化
Redis应用
解决互联网高并发难题
引入了NoSQL技术 是一种简易的数据库
基于内存 提供一定的持久化
使用最广泛的NoSQL:Redis 和 MongoDB
支持集群、分布式、主从同步
支持事务
由ANSI C语言编写 接近汇编语言,基于内存读写,所以速度非常快
只有6种数据类型 结构简单 规则少
一般存储命中率高的数据 效率远超只使用数据库
应用
缓存常用数据,在需要高速读写的场合使用
高并发核心问题:数据一致性、访问控制
80%的访问量集中在20%的时间上——著名的82定则
读操作一般远高于写操作
使用Redis存储数据的时候需要考虑3个问题
1.业务数据常用吗?命中率高吗?
2.读操作多,还是写操作多? 写操作比较频繁的话就不需要使用Redis
3.数据大小如何?太大的话会给缓存带来压力
483