JSP 和 Velocity
都用于显示层,但是都有自己的优缺点。
Velocity 比 Freemarker 快,而且语法也更舒服。
Velocity 的优点:
- 不能编写 Java 代码,可以实现
严格的 MVC 分离
,可维护性好
- 性能不错,比 JSP 快
- 对 JSP 标签支持良好
- 内置大量常用函数
- 宏定义非常简单(类似 JSP 标签)
- 使用表达式语言
- 美工和技术的工作分离(例如命名为 .htm 的格式,不需要经过 Server 就能在浏览器里看到效果,JSP 这一点不太方便)
Velocity 的缺点:
- 不是官方标准
- 用户群体和第三方标签库没有 JSP 多
Gradle 依赖
1 2
| compile 'org.apache.velocity:velocity:1.7' compile 'org.apache.velocity:velocity-tools:2.0'
|
在 spring-mvc.xml
里添加 Velocity 的配置
Order 值越小,查找 View 的优先级越高,如果找不到对应的 View,接着尝试下一个 order 值更高的视图解析器查找 View
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
| <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="WEB-INF/view/"/> <property name="velocityProperties"> <props> <prop key="directive.foreach.counter.name">loopCounter</prop> <prop key="directive.foreach.counter.initial.value">0</prop> <prop key="input.encoding">UTF-8</prop> <prop key="output.encoding">UTF-8</prop> </props> </property> </bean>
<bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="cache" value="true"/> <property name="order" value="0"/> <property name="contentType" value="text/html;charset=UTF-8"/> <property name="exposeRequestAttributes" value="true"/> <property name="requestContextAttribute" value="request"/>
<property name="attributes"> <props> <prop key="static">http://static-cdn.com</prop> </props> </property> </bean>
|
模版中使用 Model 的数据
1
| $variableName 或则 ${variableName}
|
模版里使用 contextPath
为了在模版里使用 HttpServletRequest,需要设置 velocityViewResolver 的 exposeRequestAttributes 和 requestContextAttribute
1 2
| <property name="exposeRequestAttributes" value="true"/> <property name="requestContextAttribute" value="request"/>
|
在模版里使用 Request: $request.contextPath
spring-mvc.xml 里定义 Velocity 的变量
需要配置 velocityViewResolver 的 attributes
属性
1 2 3 4 5 6
| <property name="attributes"> <props> <prop key="static">http://static-cdn.com</prop> </props> </property>
|
在模版里使用变量: $static