Spring in Acton 4读书笔记之视图解析

什么是视图解析

浏览器只识别静态的html文件。MVC中,controller并不直接生成html文件,而只负责为model填充数据,然后将model转给视图(view)。并且controller只知道视图的逻辑名称,并不负责视图的内容。这样,就将转发请求和解析视图这两件事在Spring MVC中进行了解耦。controller和view之间的耦合只在于对model中数据的定义。
由于controller只提供了视图的逻辑名称,Spring要知道怎样渲染视图,就需要视图解析器的帮助。视图解析器定义了视图模板文件所在的目录和后缀,和视图逻辑名称拼接之后,就构成了视图完整的路径。

Spring MVC中定义的视图解析器接口和视图接口如下:

public interface ViewResolver {
  View resolveViewName(String viewName, Locale locale)
    throws Exception;
}

public interface View {
  String getContentType();
  void render(Map<String, ?> model,
              HttpServletRequest request,
              HttpServletResponse response) throws Exception;
}

ViewResolver解析视图名称,并返回View。View则根据model(数据)以及request渲染出response。只要实现了代码中的两个方法,就可以解析视图了。然而在Spring MVC中,一般不需要再这样做,因为Spring MVC为各种常用视图框架提供了视图解析器的实现。

视图解析器描述
InternalResourceViewResolver将视图解析为Web应用的内部资源(一般为JSP)
TilesViewResolver将视图按Apache Tile定义进行解析,Tiles 2.0和Tiles 3.0分别有一个TilesViewResolver实现。
FreeMarkerViewResolver将视图按FreeMarker模板解析
ThymeleafViewResolver将视图按Thymeleaf模板解析
ResourceBundleViewResolver将视图解析为ResourceBundle(一般是属性文件)
UrlBasedViewResolver根据视图名称直接解析
VelocityViewResolver根据Velocity模板解析
VelocityLayoutViewResolver根据Velocity布局,找到对应定义进行解析
BeanNameViewResolver将视图解析成Spring应用上下文中的bean,bean的id和视图一样
XmlViewResolver解析XML,和BeanNameViewResolver类似
XsltViewResolver解析XSLT
ContentNegotiatingViewResolver根据视图的类型将视图转发给相应的另一个视图解析器
JasperReportsViewResolver将视图按JasperReports定义解析

其中,InternalResourceViewResolver一般用来解析JSP,TilesViewResolver用来解析Apache Tile,FreeMarkerViewResolver用来解析FreeMarker,ThymeleafViewResolver用来解析Thymeleaf。ResourceBundleViewResolver一般用来解析属性文件。在一个项目中,可以同时使用多个视图解析器,解析不同类型的文件。

创建JSP视图

使用InternalResourceViewResolver解析jsp模板文件很简单,只需要配置前缀和后缀。

@Bean
public ViewResolver viewResolver() {
  InternalResourceViewResolver resolver =
      new InternalResourceViewResolver();
  resolver.setPrefix("/WEB-INF/views/");
  resolver.setSuffix(".jsp");
  return resolver;
}

经过这样配置后,home将会解析到/WEB-INF/views/home.jsp

小结

本文讲解了视图解析,以及如何创建JSP视图,将在后续文章中讲解如何解析其它视图模板。

欢迎扫描下方二维码关注微信公众号【谈谈IT】,第一时间获取最新文章。
欢迎关注同名公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值