Spring MVC(四)——配置视图解析器

Spring MVC中所有的控制器(controller)方法都必须返回一个逻辑视图的名字(也许是显示返回:比如返回一个String,View,ModelAndView等,也可能是隐式返回:比如基于约定的返回)。在Spring中,视图是由一个视图名标识,并且在视图解析器中渲染。
一下是一些spring提供的视图解析器:

视图解析器 描述
AbstractCachingViewResolver 一个抽象的视图解析器类,提供了缓存视图的功能。通常视图在能够被使用之前需要经过准备。继承这个基类的视图解析器即可以获得缓存视图的能力。
XmlViewResolver 视图解析器接口ViewResolver的一个实现,该类接受一个XML格式的配置文件。该XML文件必须与Spring XML的bean工厂有相同的DTD。默认的配置文件名是/WEB-INF/views.xml。
ResourceBundleViewResolver 视图解析器接口ViewResolver的一个实现,采用bundle根路径所指定的ResourceBundle中的bean定义作为配置。一般bundle都定义在classpath路径下的一个配置文件中。默认的配置文件名为views.properties。
UrlBasedViewResolver ViewResolver接口的一个简单实现。它直接使用URL来解析到逻辑视图名,除此之外不需要其他任何显式的映射声明。如果你的逻辑视图名与你真正的视图资源名是直接对应的,那么这种直接解析的方式就很方便,不需要你再指定额外的映射。
InternalResourceViewResolver UrlBasedViewResolver的一个好用的子类。它支持内部资源视图(具体来说,Servlet和JSP)、以及诸如JstlView和TilesView等类的子类。
VelocityViewResolver / FreeMarkerViewResolver UrlBasedViewResolver下的实用子类,支持Velocity视图VelocityView(Velocity模板)和FreeMarker视图FreeMarkerView以及它们对应子类。
ContentNegotiatingViewResolver 视图解析器接口ViewResolver的一个实现,它会根据所请求的文件名或请求的Accept头来解析一个视图。

示例

在webapp目录下,新建一个views文件夹,然后将所有的JSP页面都放在该文件夹下面,这样的话,我们的controller返回的逻辑视图中,就会加上相同的前缀名:/views和后缀名.jsp。此时可以配置一个视图解析器来避免这种重复的工作:

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix">
		<value>/viewsvalue>
	property>
	<property name="suffix">
		<value>.jspvalue>
	property>
bean>

这样,controller中的代码:

@GetMapping("page/test")
public String toPageTest() {
     
	String viewName = "/test/testPage";
	return viewName;
}

这样的话,返回的逻辑视图名,最终就是:/views/test/testPage.jsp。

视图解析器链

spring mvc支持配置多个视图解析器链,通过org.springframework.core.Ordered接口中,getOrder方法,将这些视图解析器组成一条链。
也就是说,我们在配置多个视图解析器的时候,为了指定各个解析器的先后顺序,可以配置order属性,order值越大,该解析器越靠后。
另外,在这个视图解析器链中,有一个规则:从org.springframework.web.servlet.ViewResolver的源码注释中,可以知道视图解析器是可以返回null的。如果返回null,说明找不到对应的视图,那么这时就会执行视图解析器链的下一个视图解析器;如果不返回空,说明找到了对应的视图,则不会执行后续的视图解析器了。
因此,需要注意:org.springframework.web.servlet.view.InternalResourceViewResolver总是会返回一个视图。所以,该视图解析器如果配置在视图链中,那么应该将它的order值设置为最大:Ordered.LOWEST_PRECEDENCE(也就是默认的值);


源码地址:https://gitee.com/fyk_wq/spring-stuty

你可能感兴趣的:(Spring,MVC,spring,mvc,视图解析)