视图解析器

视图和视图解析器
在这里插入图片描述

请求处理方法执行完成之后,最终返回的是一个ModelAndView对象,对于那些返回String,View或者ModelMap等类型的处理方法,SpringMVC也会在内部将它们装配成一个ModelAndView对象,它包含了逻辑名和模型对象的视图。
SpringMVC接触视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是JSP,也可能是EXCEL、JFreeChart等各种表现是形式的视图
对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器工作重点聚焦在生产模型数据的工作上,从而实现MVC的充分解耦。

视图(View)
视图的作用使渲染模型数据,将模型里的数据以某种形式呈现给客户。为了实现视图模型和具体实现技术的解耦,Spring在org.springframework.web.servlet包中定义了一个高度抽象的View接口
在这里插入图片描述
视图对象由视图解析器负责实例化,由于视图是无状态的,所以它们不会有现成安全的问题。

视图解析器(ViewResolver)
SpringMVC为逻辑视图名的解析提供了不同的策略,可以在Spring Web上下文中配置一种或多种解析策略,并制定它们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。
视图解析器的作用比较单一:将逻辑视图解析为一个具体的视图对象。所有的视图解析器都必须实现ViewResolver接口。
在这里插入图片描述

org.springframework.web.servlet.view.InternalResourceViewResolver用于JSP解析。
	<bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

若项目中使用了JSTL,则SpringMVC会自动把视图由InternalResourceView转化为JstlView。若使用JSTL的fmt标签,则需要在SpringMVC的配置文件中配置国际化资源文件

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="i18n"></property>
</bean>

如果希望直接相应通过SpringMVC渲染的页面而不经过Handler处理,那么可以使用mvc:view-controller标签实现,比如直接访问/success,不经过Handler而直接访问success。jsp页面,由视图解析器解析为相应的jsp页面。首先需导入MVC命名空间,如下配置
在这里插入图片描述

<mvc:view-controller path="/success" view-name="success"/>
//为了保证原先的请求能够正确找到相应的页面,必须配置以下代码,才能够正常
<mvc:annotation-driven></mvc:annotation-driven>

自定义视图解析器
首先需要创建视图解析器类,是实现View接口,并且需要由Spring容器管理

@Component
public class MyView implements View {

	public String getContentType() {
		// TODO Auto-generated method stub
		return "text/html";
	}

	public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("*********");
		response.getWriter().write("this is 自定义视图!");
	}

}

配置视图解析器,BeanNameViewResolver根据视图名字解析视图

//通过order属性指定视图解析器的优先级,值越小优先级越高,
//开始配置的InternalResourceViewResolver默认是最大的,为Integer.MAX_VALUE
 <bean  class="org.springframework.web.servlet.view.BeanNameViewResolver">
		<property name="order" value="100"></property>
	</bean>

编写Handler中的处理方法
//返回值是自定义视图解析器的类名第一个字母小写的名字

    @RequestMapping("/testView")
	public String testView() {
		return "myView";
	}

重定向:
一般情况系啊,控制器方法返回字符串类型的值会被当成逻辑视图名处理,如果返回的字符串中带forward:或redirect:前缀时,SpringMVC会对他们进行特殊处理。将forward:和redirect:当成指示符,其后的字符串作为URL来处理。
redirect:success.jsp : 会完成一个到success.jsp的重定向的操作
forward:success.jsp : 会完成一个到success.jsp的转发操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值