SpringMVC模式可以通过如下配置来支持多视图解析:
在spring 中,常用的ViewResolver 有如下几种:
InternalResourceViewResolver | 将逻辑视图名字解析为一个路径 |
BeanNameViewResolver | 将逻辑视图名字解析为bean的Name属性,从而根据name属性,找定义View的bean |
ResourceBundleResolver | 和BeanNameViewResolver一样,只不过定义的view-bean都在一个properties文件中,用这个类进行加载这个properties文件 |
XmlViewResolver | 和ResourceBundleResolver一样,只不过定义的view-bean在一个xml文件中,用这个类来加载xml文件 |
一、同一类型的页面(jsp)
1 WEB-INF/A/a.jsp
2 WEB-INF/B/b.jsp
配置了视图解析器:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="contentType" value="text/html"/>
<property name="prefix" value="/WEB-INF/A/"/>
<property name="suffix" value=".jsp"/>
//意思是对A或B开头的视图名进行处理,比如返回的视图名为A/a 那么会交给viewNames为A*的那个解析器处理
<property name="viewNames" value="A*"/>
<property name="order" value="0"></property>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="contentType" value="text/html"/>
<property name="prefix" value="/WEB-INF/B/"/>
<property name="suffix" value=".jsp"/>
//意思是对A或B开头的视图名进行处理,比如返回的视图名为B/b 那么会交给viewNames为B*的那个解析器处理
<property name="viewNames" value="B*"/>
<property name="order" value="1"></property>
</bean>
二、不同类型的页面
<!-- html视图解析器 先配置freemarkerConfig,html是没有prefix前缀属性的-->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath">
<value>/WEB-INF/view/html</value>
</property>
</bean>
<bean id="htmlviewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".html" />
<property name="order" value="0"></property>
<property name="contentType" value="text/html;charset=UTF-8"></property>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/jsp/" />
<property name="suffix" value=".jsp" />
<property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/> <!-- 不能用jstl的那个 -->
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="order" value="0"></property>
</bean>
配置不同类型视图解析器的时候,InternalResourceViewResolver必须放在最后