ViewResolver

用来将视图名(viewName)和Locale解析为View类型的视图;

resolveViewName(String viewName, Locale locale);

 

Locale用来表示不同的区域;

ViewResolver用来选择用哪种模板以及何种方式填入数据到模板中;

 

四种类型:

AbstractCachingViewResolver、BeanNameViewResolver

ContentNegotiatingViewResolver、ViewResolverComposite

 

BeanNameViewResolver:

1、实现了Order接口,可以进行排序;

2、方法:resolveViewName,从applicationContext中获取名字为viewName的Bean;

3、applicationContext是从WebApplicationObjectSupport中获取的;

 

ViewResolverComposite:

1、实现了Order接口,可以排序;

2、实现了InitializingBean接口,可以调用afterPropertiesSet方法;

3、实现ApplicationContextAware,setApplicationContext获取到当前ApplicationContext;

4、实现ServletContextAware,setServletContext获取当前的ServletContext;

5、内部容器List<ViewResolver> viewResolvers,存放ViewResolver;

6、resolveViewName方法,循环判断viewResolvers中,返回能解析的解析器,否则返回null;

 

ContentNegotiatingViewResolver:

1、在别的解析器解析的结果上增加了对MediaType和后缀的支持;

2、属性List<ViewResolver> viewResolvers

①用来循环解析视图,解析成功即返回;

②初始化方式分为手动和自动;initServletContext;

3、实现InitializingBean,初始化ContentNegotiationManager;

4、属性ContentNegotiationManagerFactoryBean,用来初始化第3点;

5、实现Order接口,排序;

6、resolveViewName,根据MediaType以及ViewResolver选出View,进而选出bestViewResolver;

 

AbstractCachingViewResolver:

1、提供统一的缓存功能,只要视图被解析过一次就会被缓存起来;

2、子类:ResourceBoundleViewResolver、XmlViewResolver、UrlBasedViewResolver;

3、属性viewAccessCache、viewCreationCache,用来缓存解析过的视图;

①先查询viewAccessCache(底层为ConcurrentHashMap)缓存,再查询viewCreationCache(由LinkedHashMap实现);

②viewAccessCache查询速度快,viewCreationCache用来控制缓存的数量;

③为什么viewCreationCache能够控制缓存的数量?

LinkedHashMap重写了afterNodeInsertion,viewCreationCache重写了removeEldestEntry;

 

InternalResourceViewResolver:

1、默认的实现类;

2、用来解析jsp类型的视图;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值