深入探索Velocity、FreeMarker与Tiles模板技术
立即解锁
发布时间: 2025-08-19 02:32:47 阅读量: 4 订阅数: 11 


Spring框架下的Java开发实践与进阶
# 深入探索 Velocity、FreeMarker 与 Tiles 模板技术
## 1. Velocity 和 FreeMarker 概述
### 1.1 模板工具特性
FreeMarker 和 Velocity 是与 JSP 目标不同的模板工具。它们基于 Java 编写的专有引擎,提供了复杂的模板语言。与 JavaServer Pages 不同,这两种工具尽可能地将逻辑与展示分离,模板中甚至不允许包含 Java 代码。在职责严格分离的团队中,有图形设计师和 HTML 程序员时,选择 FreeMarker 或 Velocity 更合适,因为它们提供更面向 HTML 的模板语言,避免 Java 开发者在模板中添加 Java 代码。
### 1.2 Spring 支持
Spring 通过 `org.springframework.web.servlet.view.freemarker` 和 `org.springframework.web.servlet.view.velocity` 包分别支持基于 FreeMarker 和 Velocity 的视图。由于 Spring 集成它们的功能非常相似,所以将一起介绍。
### 1.3 应用场景
Velocity 和 FreeMarker 不仅可用于生成浏览器显示的 HTML 页面,还可用于基于模板发送电子邮件。
## 2. 配置视图解析器
### 2.1 配置 Velocity
#### 2.1.1 配置 VelocityEngine
使用 `org.springframework.web.servlet.view.velocity.VelocityConfigurer` 配置 `VelocityEngine`,最简单的配置如下:
```xml
<bean id="velocityConfigurer"
class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath"><value>WEB-INF/views/</value></property>
</bean>
```
也可以通过 `configLocation` 属性引用 Properties 文件进行配置:
```xml
<bean id="velocityConfigurer"
class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="configLocation"><value>WEB-INF/velocity.properties</property>
</bean>
```
#### 2.1.2 配置视图解析器
添加 `ViewResolver` 完成 Velocity 在应用中的集成:
```xml
<bean id="viewResolver"
class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="suffix"><value>.vm</value></property>
</bean>
```
#### 2.1.3 日期和数字格式化工具
`VelocityViewResolver` 类提供两个属性来启用日期和数字格式化工具:
```xml
<bean id="viewResolver">
class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="numberToolAttribute"><value>numbertool</value></property>
<property name="dateToolAttribute"><value>datetool</value></property>
</bean>
```
在 Velocity 模板中格式化日期示例:
```
$date.format("yyyy-MM-dd", $currentDate)
```
### 2.2 配置 FreeMarker
#### 2.2.1 基本配置
在应用上下文中包含 `org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer` 和 `org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver` 即可添加 FreeMarker 支持:
```xml
<bean id="freemarkerConfigurer"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath"><value>/WEB-INF/templates/</value></property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix"><value>.ftl</value></property>
</bean>
```
#### 2.2.2 用于电子邮件模板
Spring 的 FreeMarker 支持提供了 `FreeMarkerConfigurationFactoryBean`,允许开发者将 `freemarker.template.Configuration` 对象外部化,用于电子邮件模板和 Web MVC 应用模板。示例如下:
```xml
<bean class="example.mail.TemplateMailSender">
<property name="freemarkerConfiguration">
<ref bean="freemarkerConfig"/>
</property>
</bean>
<bean class="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
</bean>
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurationFactoryBean">
<property name="templateLoaderPath"><value>/WEB-INF/templates/</value></property>
<property name="dateFormat"><value>MM/dd/yyyy</value></property>
<property name="timeFormat"><value>MM/dd/yyyy HH:mm</value></property>
</bean>
```
Spring 会自动处理创建 FreeMarker 配置的工厂。
## 3. 使用表单简化宏
### 3.1 宏的作用
Spring 对 Velocity 和 FreeMarker 的支持提供了一组表单简化宏,方便创建表单和使用 Spring 的命令控制器,在一定程度上类似于 JSP 中的自定义标签,但有一些额外功能。
### 3.2 配置模板使用宏
可以使用 `exposeSpringHelperMacros` 属性指定是否在 `FreeMarkerView` 和 `VelocityView` 中包含宏。例如,使用 `ResourceBundleViewResolver`:
```xml
<bean id="viewResolver"
class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename"><value>views</value></property>
</bean>
```
结合 `/WEB-INF/classes` 中的 `views.properties` 文件:
```properties
showForm.class=org.springframework.web.servlet.view.velocity.VelocityView
showForm.url=show-form.vm
showForm.exposeSpringMacroHelpers=true
confirmReservation.class=org.springframework.web.servlet.view.fr
```
0
0
复制全文
相关推荐









