前言
沒有美工的時代自然少不了對應的模板視圖開發,jsp時代我們用起來也很爽,物極必反,項目大了,數據模型復雜了jsp則無法勝任。
開發環境
idea2016、jdk1.8、tomcat8.0.35
spring 4.3.6、velocity1.6、velocity-tools 2.0
SpringMVC集成velocity
1、VelocityViewResolver。
<!--VelocityViewResolver視圖配置--> <!--<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">--> <!--<property name="suffix" value=".vm"/>--> <!--<property name="prefix" value=""/>--> <!--<property name="contentType" value="text/html;charset=UTF-8"/>--> <!--</bean>-->
2、VelocityLayoutViewResolver。也就是可以自定義模板布局。和VelocityViewResolver相比較的話多了一個layout.vm,在WEB-INF/views/layout/layout.vm配置。
<!--VelocityLayoutViewResolver--> <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver"> <property name="suffix" value=".vm"/> <property name="prefix" value=""/> <property name="contentType" value="text/html;charset=UTF-8"/> <property name="layoutUrl" value="layout/layout.vm"/> </bean>
3、完整的springmvc-servlet.xml
<context:component-scan base-package="com.autohome.controller" /> <!-- 注解驅動 --> <mvc:annotation-driven /> <!--velocity模板配置--> <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="/WEB-INF/views/"/> <property name="configLocation" value="classpath:velocity.properties"/> <property name="velocityProperties"> <props> <prop key="input.encoding">UTF-8</prop> <prop key="output.encoding">UTF-8</prop> </props> </property> </bean> <!--VelocityViewResolver視圖配置--> <!--<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">--> <!--<property name="suffix" value=".vm"/>--> <!--<property name="prefix" value=""/>--> <!--<property name="contentType" value="text/html;charset=UTF-8"/>--> <!--</bean>--> <!--VelocityLayoutViewResolver--> <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver"> <property name="suffix" value=".vm"/> <property name="prefix" value=""/> <property name="contentType" value="text/html;charset=UTF-8"/> <property name="layoutUrl" value="layout/layout.vm"/> </bean>
4、pom.xml
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.6.RELEASE</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-tools</artifactId> <version>2.0</version> </dependency> </dependencies>
我的layout.vm. 視圖頁嵌套的內容就在$screen_content中渲染
<html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body> <div>header</div> <div> $screen_content </div> <div>footer</div> </body> </html>
index.vm
<h2>${msg}</h2>
layout.vm的渲染結果
總結
1、pom下載spring-context.jar包時並沒有自動加載spring-context-support.jar 然后我在springmvc-servlet編寫velocityconfig VelocityConfigurer類時找不到configLocation屬性。后加上spring-context jar包后OK。
2、既然在velocity.properties文件中已經配置了編碼格式,還要在velocityconfig中繼續配置編碼方式,如果不配置的話則拋一個spring.vm相關的異常, 不知道這個設計何為。
參考資料
http://shishi11.iteye.com/blog/869290