springMVC4(13)视图解析器分类详解

《springMVC4(7)模型视图方法源码综合分析》 一文中,我们介绍了ModelAndView的用法,它会在控制层方法调用完毕后作为返回值返回,里面封装好了我们的业务逻辑数据和视图对象或视图名
。下一步,视图对象往往会对模型进一步渲染,再由视图解析器进一步解析并向前端发出响应。在下面,我们详细介绍视图和视图解析器的各种分类。
在View接口中,定义了一个核心方法是:

void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception;

它的作用主要是渲染模型数据,整合web资源,并以特定形式响应给客户,这些形式可以是复杂JSP页面,也可以是简单的json、xml字符串。
针对不同的响应形式,spring为我们设计了不同的View实现类:

这里写图片描述

针对不同的视图对象,我们使用不同的视图解析器来完成实例化工作。我们可以在Spring上下文配置多个视图解析器,并通过order属性来指定他们之间的解析优先级顺序,order 越小,对应的 ViewResolver 将有越高的解析视图的权利。当一个 ViewResolver 在进行视图解析后返回的 View 对象是 null 的话就表示该 ViewResolver 不能解析该视图,这时候就交给优先级更低的进行解析,直到解析工作完成,如果所有视图解析器都不能完成将解析,则会抛出异常。
类似于视图,Spring也为我们提供了众多的视图解析器实现类:
这里写图片描述

1. AbstractCachingViewResolver

这是一个抽象类,这种视图解析器会把它曾经解析过的视图保存起来,然后每次要解析视图的时候先从缓存里面找,如果找到了对应的视图就直接返回,如果没有就创建一个新的视图对象,然后把它放到一个用于缓存的 map 中,接着再把新建的视图返回。使用这种视图缓存的方式可以把解析视图的性能问题降到最低。

2. UrlBasedViewResolver

继承了AbstractCachingViewResolver ,通过prefix、suffix**拼接 URL** 的方式来解析视图,支持返回的视图名称中包含 redirect: 、forward等前缀进行重定向或转发。使用 UrlBasedViewResolver 的时候必须指定属性 viewClass ,表示解析成哪种视图,一般使用较多的就是 InternalResourceView ,利用它来展现 jsp ,但是当我们使用 JSTL 的时候我们必须使用 JstlView 。下面是一段 UrlBasedViewResolver 的实例定义:

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
   <property name="prefix" value="/WEB-INF/" />
   <property name="suffix" value=".jsp" />
   <property name="viewClass"
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值