后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节10(核心对象,视图解析器,BeanNameViewResolver)

1、概念

  当使用BeanNameViewResolver时,viewName的含义为bean的ID或name,返回值为View对象或它的子类。

  它会从上下文中根据viewName获取View对象,默认的上下文有两个WebApplicationContext,ApplicationContext。ApplicationContext为WebApplicationContext的父上下文。

  WebApplicationContext,它根据spring-mvc的配置信息创建。

  ApplicationContext,它是配置数据源,事务,注入Service等,它是根据application-context的配置信息创建。

2、使用

  第一步,使用内置的View对象或者实现View接口自定义View对象。

  第二步,在上下文中注入View对象,在webApplicationContext,ApplicationContext二者之间选择其一。

  第三步,注册BeanNameViewResolver对象,

  第四步,handler的返回值为View对象的标识,id,name,alias都可

3、示例

  1、第一步,注入BeanNameViewResolver,调用registry的beanName方法。

/**
 * 配置视图解析器
 */
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
	// 注册BeanNameViewResolver
	registry.beanName();
	// 注册
	registry.viewResolver(getInternalResourceViewResolver());
}

  2、第二步,编写自定义视图类MyView实现View接口。

public class MyView implements View {

	@Override
	public String getContentType() {
		return "text/html";
	}

	@Override
	public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		response.setContentType(getContentType());
		response.setCharacterEncoding("UTF-8");
		PrintWriter writer = response.getWriter();
		writer.println("<h3>测试BeanNameViewResolver</h3>");
	}
}

  3、第三步,注入MyView,bean的名称为”testMyView”(名称是任意的); 可以注入到webApplicationContext或ApplicationContext

/**
 * 配置视图解析器
 */
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
	// 注册BeanNameViewResolver
	registry.beanName();
}

  4、第四步,验证,handler方法中返回”testMyView”字符串即可。

原文地址:https://www.cnblogs.com/rain144576/p/12903052.html