视图解析器ViewResolver接口负责将处理结果生成View视图。常用的实现类有四种。
1.InternalResourceViewResolver视图解析器
该视图解析器用于应用的内部内部资源的封装与跳转。而对于内部查找规则是将逻辑视图名称配置为前缀与后缀的方式,即前缀 + 视图名称 + 后缀。
该视图解析器将处理器方法返回的模型属性放入request中,并将请求转发到目标URL。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">2.BeanNameViewResolver视图解析器
<property name="prefix" value="/WEB-INF/pages/">
<property name="suffix" value=".jsp" />
</bean>
InternalResourceViewResolver视图解析器存在两个问题,使用极其不灵活,只可以完成将内部资源封装完成后跳转。但无法转向外部资源,如外部网页。
对于内部资源定义,也只定义一种格式的资源:对一目录下的同一种类型的文件。
而BeanNameViewReslolver视图解析器,可以在xml配置中,定义多个内部资源或外部资源的view视图,处理器方法中ModelAndView的视图名称映射到视图解析器bean的Id属性值完成资源的封装与跳转
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>3.XmlViewReslover视图解析器
<bean id="baidu" class="org.springframework.web.servlet.view.RedirectView">
<property name="url" value="https://www.baidu.com"/>
</bean>
<bean id="welcome" class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="/WEB-INF/welcome.jsp"/>
</bean>
当需要定义很多视图解析器时,SpringMVC的xml配置难免有些臃肿,使用XmlViewReslover可以将视图资源注册到另一个xml配置里,该xml需要Spring配置文件中的bean约束
<bean class="org.springframework.web.servlet.view.XmlViewResolver" >4.ResourceBundleViewResolver视图解析器
<property name="location" value="classpath:views.xml"/>
</bean>
对于veiw视图对象的注册不仅可以在xml中配置,也可以在properties文件中配置,此时应该使用ResourceBoundleViewResolver解析器。
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver" >
<property name="basename" value="views"/>
</bean>
格式要求:
资源名称.(class)=封装资源的View全限定性类名
资源名称.url=资源路径
示例
jsonView.(class)=org.springframework.web.servlet.view.json.MappingJackson2JsonView
baidu.(class)=org.springframework.web.servlet.view.RedirectView
baidu.url=https://www.baidu.com