Spring实战-读书笔记(六)-渲染Web视图

渲染Web视图理解视图解析我们知道Controller方法返回逻辑视图的名称,DispatcherServlet将视图逻辑名称传递给视图实现类处理获得物理视图资源。Controller并不直接返回物理视图,而是返回逻辑视图名称,这样就很好的实现了解耦,保证了在不影响请求处理逻辑的情况下维护和修改视图。那么视图实现如果根据逻辑视图名称解析物理视图资源呢?Spring自带了13个视图解析器,能
摘要由CSDN通过智能技术生成

渲染Web视图

理解视图解析

我们知道Controller方法返回逻辑视图的名称,DispatcherServlet将视图逻辑名称传递给视图实现类处理获得物理视图资源。Controller并不直接返回物理视图,而是返回逻辑视图名称,这样就很好的实现了解耦,保证了在不影响请求处理逻辑的情况下维护和修改视图。那么视图实现如果根据逻辑视图名称解析物理视图资源呢?Spring自带了13个视图解析器,能够将逻辑视图名转换为物理实现。

BeanNameViewResolver 
将视图解析为Spring应用上下文中的bean,其中bean的ID与视图的名字相同

ContentNegotiatingViewResolver 
通过考虑客户端需要的内容类型来解析视图,委托给另外一个能够产生对应内容类型的视图解析器

FreeMarkerViewResolver 
将视图解析为FreeMarker模板

InternalResourceViewResolver 
将视图解析为Web应用的内部资源(一般为JSP)

JasperReportsViewResolver 
将视图解析为JasperReports定义

ResourceBundleViewResolver 
将视图解析为资源bundle(一般为属性文件)

TilesViewResolver
将视图解析为Apache Tile定义,其中tileID与视图名称相同。注意有两个不同的TilesViewResolver实现,分别对应于Tiles 2.0和Tiles 3.0

UrlBasedViewResolver 
直接根据视图的名称解析视图,视图的名称会匹配一个物理视图的定义

VelocityLayoutViewResolver 
将视图解析为Velocity布局,从不同的Velocity模板中组合页面

VelocityViewResolver 
将视图解析为Velocity模板

XmlViewResolver 
将视图解析为特定XML文件中的bean定义。类似于BeanName-ViewResolver

XsltViewResolver 
将视图解析为XSLT转换后的结果
以上所有的视图实现类都是些了ViewResolver接口。这个接口的作用就是根据逻辑视图名称返回物理视图(即View接口)。
package org.springframework.web.servlet;

import java.util.Locale;

public interface ViewResolver {
	View resolveViewName(String viewName, Locale locale) throws Exception;
}
View接口的任务就是接受模型以及Servlet的request和response对象,并将输出结果渲染到response中。View接口有两个核心方法:
String getContentType();

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

InternalResourceViewResolver视图实现

我们在java中最常用的视图技术就是jsp。InternalResourceViewResolver视图实现的作用就是将逻辑视图名称解析成一个jsp资源。我么看一下如果在Spring MVC中使用InternalResourceViewResolver。
	/**
	 * 配置视图解析器
	 * 
	 * @return
	 */
	@Bean
	public ViewResolver viewResolver() {
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		viewResolver.setPrefix("/WEB-INF/views/"); 	// 在视图路径添加前缀
		viewResolver.setSuffix(".jsp"); 		// 在视图路径添加后缀
		viewResolver.setExposePathVariables(true);
		viewResolver.setExposeContextBeansAsAttributes(true);
		viewResolver.setViewClass(JstlView.class); 	//jsp中使用JSTL,将物理视图解析成JstlView
		return viewResolver;
	} 
我们对InternalResourceViewResolver的配置都很基础和简单。它最终会将逻辑视图名解析为InternalResourceView实例,这个实例会引用JSP文件。但是如果这些JSP使用JSTL标签来处理格式化和信息的话,那么我们会希望InternalResourceViewResolver将视图解析为JstlView。JSTL的格式化标签需要一个Locale对象,以便于恰当地格式化地域相关的值,如日期和货币。信息标签可以借助Spring的信息资源和Locale
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值