探索SpringMVC-组件之ViewResolver-创新互联

前言

ViewResolver也就是视图解析器,他将是我们《探索SpringMVC》系列要介绍的最后一个常用的组件。其他组件:MultipartResolver、LocaleResolver、ThemeResolver、RequestToViewNameTranslator、FlashMapManager,相对简单,大家可以自行了解。

公司主营业务:成都网站制作、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出南溪免费做网站回馈大家。ViewResolver

我们知道视图技术有很多种,例如:JSP、FreeMarker、Thymeleaf等。如果直接操作这些技术,那简直不要太糟糕。为了统一操作,SpringMVC抽象出来两个接口:ViewResolver和View。任何视图技术都需要实现这两个接口。

Spring源码中的定义

  • ViewResolver,即视图解析器,可以通过将viewName解析为View。
  • View,即视图,是Web交互的MVC的View。他的实现者负责渲染内容、暴露Model。(所谓暴露model,其实就是把model数据在页面中展示)

从上述定义,视图解析器需要创建View。而这意味着两个重要使命实例化和初始化。实例化,当然是创建对应的View实现对象。而初始化则负责将View与对应的实现技术进行绑定/衔接。

与视图技术的衔接

前面我们知道View才是真正渲染页面内容的,这意味着View才是视图技术的真正操作者。因此必须通过某种手段获得响应的配置或者重要的组件。而Spring提供的是WebApplicationObjectSupport。不管是ViewResolver,还是View都是基于该抽象类来实现获取ApplicationContext。

Spring的设计

为了便于各个视图技术厂商对接,Spring实际上构建了一套完整的体系(一系列抽象实现类),按需实现。
FreeMarkerViewResolver
这里重点提一下

  • UrlBaseViewResolver#applyLifecycleMethods
    这个方法是初始化View的关键方法,他通过ApplicationContext获取到AutowireCapableBeanFactory,并且直接调用其initializeBean方法进行初始化。而该方法就是我们bean生命周期中的关键方法,包括:Aware接口、BeanPostProcessor、InitializingBean都是由他负责。
FreeMarker的实现

前面我们说了,WebApplicationObjectSupport是重要的初始化接口。同样我们也说,是按需实现。

FreeMarkerViewResolver
从上面的类图看,FreeMarkerViewResolver似乎并没有使用到这个接口,但是其父类UrlBaseViewResolver使用到了。UrlBaseViewResolver通过WebApplicationObjectSupport才能获取到ApplicationContext。才有了后面对FreeMarkerView的初始化。

FreeMarkerView
通过该WebApplicationObjectSupport实现了与FreeMarker的衔接。

重点方法:

  • FreeMarkerView#initServletContext
    这个方法实际上是Aware接口扩展过来的,因此会被前面说的UrlBaseViewResolver#applyLifecycleMethods调用到。这里会通过ApplicationContext获取到FreeMarkerConfig。该类是SpringMVC与Freemarker衔接的类,他会持有FreeMarker的Configuration对象。通过Configuration对象,就能获得FreeMarker的Template类。
  • FreeMarkerView#buildTemplateModel
    该方法将Model转换为FreeMarker要求的数据格式。
  • FreeMarkerView#processTemplate
    该方法则是实际调用FreeMarker的Template,通过HttpServletResponse将视图渲染并响应了。

想看源码的同学,这里送一张简化版调用流程图
在这里插入图片描述
注意,该图不涉及分支流程,例如:缓存逻辑、重定向逻辑。

总结
  1. Spring为了统一视图技术的操作,抽象了ViewResolver和View。并提供了许多抽象接口,以便不同的视图技术进行实现。
  2. UrlBaseViewResolver通过WebApplicationObjectSupport获取到ApplicationContext对AbstractUrlBasedView进行初始化。AbstractUrlBasedView则通过InitializingBean实现对View的url进行校验。
  3. FreeMarkerView通过WebApplicationObjectSupport从容器中获取FreeMarkerConfig,实现与FreeMarker的衔接。
后记

ViewResolver相对简单。但我们重点要学会设计思想。SpringMVC设计了一层中间层,做了一层接口转换,换取统一接口、统一操作的便利,以及更多的扩展可能。
下一次,我们终于回到了DispatcherServlet了。忘记的同学,可以回去看看。

上一篇:
探索SpringMVC-组件之HandlerExceptionResolver
第一篇:
探索SpringMVC-web上下文
下一篇:
探索SpringMVC-DispatcherServlet

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

分享题目:探索SpringMVC-组件之ViewResolver-创新互联
文章位置:https://www.cdcxhl.com/article14/diioge.html

成都网站建设公司_创新互联,为您提供用户体验动态网站面包屑导航建站公司网站排名品牌网站制作

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设