Velocity学习(三)中讨论了一下在SpringMVC环境中使用Velocity模板引擎的配置。在实际开发中除了使用HTML之外可能也会使用其他视图如JSP,除了Velocity模板也许会用到FreeMark模板。SpringMVC通过配置多个视图解析器ViewResolver解决上述问题。
在SpringMVC配置JSP视图解析器和Velocity视图解析器
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> <property name="order" value="1" /> </bean> <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="/WEB-INF/vm" /> <property name="configLocation" value="classpath:properties/velocity.properties"/> </bean> <bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="prefix" value="/WEB-INF/vm/"/> <property name="suffix" value=".html"/> <!--解决中文乱码--> <property name="contentType" value="text/html;charset=UTF-8" /> <!-- 配置 velocity工具类 --> <property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml"/> <!-- Spring4 支持 velocity-tools2.0 --> <property name="viewClass" value="org.lian.util.VelocityToolbox2View"/> <!-- 开放request属性 --> <property name="exposeRequestAttributes" value="true"/> <property name="requestContextAttribute" value="rc"/> <property name="order" value="0" /> </bean>
通过一个“order”属性来设置视图解析器使用的优先级,数值越小优先级越高。使用优先级配置有一个很重要的问题需要注意:InternalResourceViewResolver 解析器的优先级要设置在视图解析器链的最低(具体原因请参考其他博文或者查看源码)这里VelocityViewResolver使用优先级要高于InternalResourceViewResolver
在这种情况下JSP模板和Velocity模板可以正常解析,如果调换一下优先级那么JSP模板可以正常解析,而Velocity模板无法解析。