SpringMVC 流程(5)-- 视图解析器

本文介绍了SpringMVC中视图解析器的概念,作为匹配视图名与资源的组件,它运用策略模式允许灵活替换不同解析器。默认配置包括InternalResourceViewResolver,同时支持配置多个解析器。常见的视图解析器如JSP,以及可选的FreeMarker和Velocity。重点在于理解其策略模式和如何根据需求选择或更换解析器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



一. 视图解析器概念

          视图解析器主要是用来匹配名字和具体的视图资源。通俗的讲就是我们在控制层返回一个ModelAndView对象,然后我们会在这个对象中setViewName("xx");那么就是匹配这个ViewName和具体的视图。
当然,它也用了策略模式,这样我们也可以根据实际需求更换不同的视图解析器。
         视图解析器在DispatcherServlet中会有默认的配置,如下代码:
   
   
protected void initStrategies(ApplicationContext context) {
initMultipartResolver(context);
initLocaleResolver(context);
initThemeResolver(context);
initHandlerMappings(context);
initHandlerAdapters(context);
initHandlerExceptionResolvers(context);
initRequestToViewNameTranslator(context);
initViewResolvers(context);
initFlashMapManager(context);
}
再看具体的代码:
   
   
private void initViewResolvers(ApplicationContext context) {
this.viewResolvers = null;
 
if (this.detectAllViewResolvers) {
// Find all ViewResolvers in the ApplicationContext, including ancestor contexts.
Map<String, ViewResolver> matchingBeans =
BeanFactoryUtils.beansOfTypeIncludingAncestors(context, ViewResolver.class, true, false);
if (!matchingBeans.isEmpty()) {
this.viewResolvers = new ArrayList<ViewResolver>(matchingBeans.values());
// We keep ViewResolvers in sorted order.
OrderComparator.sort(this.viewResolvers);
}
}
else {
try {
ViewResolver vr = context.getBean(VIEW_RESOLVER_BEAN_NAME, ViewResolver.class);
this.viewResolvers = Collections.singletonList(vr);
}
catch (NoSuchBeanDefinitionException ex) {
// Ignore, we'll add a default ViewResolver later.
}
}
 
// Ensure we have at least one ViewResolver, by registering
// a default ViewResolver if no other resolvers are found.
if (this.viewResolvers == null) {
this.viewResolvers = getDefaultStrategies(context, ViewResolver.class);
if (logger.isDebugEnabled()) {
logger.debug("No ViewResolvers found in servlet '" + getServletName() + "': using default");
}
}
}

从上面的代码的第8到12行,可以知道,我们还可以配置多个视图解析器。

二. 视图解析器种类
如下为官网的介绍的视图解析器种类图:

像我们一般使用的是:
   
   
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
也就是说适合普通的 jsp。 以后我们就可以根据需要比如说需要更换freemarker,或者是velocity,就在这里更换配置相对应的视图解析器。


最后:这里具体是怎么解析其实还没有分析到。只是个人觉得不是特别的重要,我们目前需要知道的是 
1. 学习它的策略模式,怎么才可以在不改变源码的情况下更换我们自己的视图解析器。
2. 知道有哪些视图解析器,以方便我们以后更换。不然需要用到也不知道原来spring自己是有的。



参考:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值