此段内容说明如何整合spring与velocity。
此文并不介绍如何使用velocity代替jsp作为页面渲染配置(参考:VelocityAndSpringStepByStep),仅仅只是输出特定格式的html、xml或文本等内容的整合实践。
一、配置spring mvc
首先,web.xml添加spring容器配置:spring-beans.xml, spring-mvc.xml.
velocity engine实例化
对于spring父容器spring-beans.xml,除开启注解,注入配置文件等基本配置外,向容器添加velocity engine对象定义,注入velocityEngine对象。
具体配置片段如下:
1 2 3 4
| <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> <property name="resourceLoaderPath" value="/WEB-INF/vm/" /> <property name="configLocation" value="classpath:velocity.properties" /> </bean>
|
其中,将velocity模板放置在/martinye-demo-spring-velocity/src/main/webapp/WEB-INF/vm目录,将velocity.properties文件放置在/martinye-demo-spring-velocity/src/main/resources目录。
注:vm模板也可以放置到src/main/resources目录下。
二、velocity配置
velocity.properties配置会覆盖默认配置。
默认配置文件的位置:velocity.jar包路径org.apache.velocity.runtime.defaults下(velocity.properties)。
更详细参数配置可参考:configuring_resource_loaders
根据需要我们自定义的配置文件内容,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
input.encoding=UTF-8 output.encoding=UTF-8 contentType=text/html;charset=UTF-8
file.resource.loader.cache=false file.resource.loader.modificationCheckInterval=1 velocimacro.library.autoreload=true
velocimacro.library=macro.vm
runtime.log=velocity.log runtime.log.logsystem.class=org.springframework.ui.velocity.CommonsLoggingLogSystem runtime.log.error.stacktrace=true runtime.log.warn.stacktrace=true runtime.log.info.stacktrace=false runtime.log.invalid.reference=true
|
三、简单模板
1 2 3 4 5 6 7 8 9 10 11 12 13
| <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>$!title</title> </head> <body> <h1>标题:$!title</h1> <div> <p>内容:$!content</p> <p>macro函数测试:#test()</p> </div> </body> </html>
|
四、模板渲染
使用VelocityEngineUtils能很方便的merge template。
需要准备一个Map,用于传递变量到VLT中。
代码样例:
1 2 3 4 5
| Map<String, Object> model = Maps.newHashMap(); model.put("title", "Velocity Template"); model.put("content", "Content in Velocity Template");
String text = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "test.vm", Constants.ENCODING, model);
|
五、参考文档
- VelocityAndSpringStepByStep
- velocity.properties配置说明
- springmvc 3.1整合velocity
- configuring_resource_loaders