FreeMarker模板语言解析:基础语法与指令详解

需积分: 20 4 下载量 171 浏览量 更新于2024-08-02 收藏 460KB DOCX 举报
FreeMarker是一个强大的、轻量级的模板引擎,广泛应用于Java Web开发中,特别是与MVC框架如Struts2配合使用。它允许开发者将业务逻辑与视图层分离,通过模板文件来动态生成HTML或其他类型的输出。 FreeMarker模板文件主要由四部分构成: 1. **文本**:这是模板文件中直接被输出的部分,可以是HTML代码、文本内容等。 2. **注释**:以`<#--`开始,`-->`结束的注释块,这些内容在渲染时不会出现在最终输出中。 3. **插值**:FreeMarker提供了两种插值语法:`${expression}`和`#{expression}`。前者在输出时会尝试将表达式的结果转换为字符串,而后者通常用于输出HTML转义的文本,以防止XSS攻击。例如,`${user}`会替换为数据模型中`user`属性的值。 4. **FTL指令**:FreeMarker定义了一系列指令,它们以`#`开头,如`#if`, `#foreach`, `#include`等,用于控制流程、迭代、包含其他模板等。它们在解析时被执行,而不是在浏览器端。例如,`<#list animals as being>`会遍历`animals`列表,并对每个元素执行循环体内的代码。 FTL指令的规则: - **开始标签**:`<#directivename parameter>` - **结束标签**:`</#directivename>` - **空标签**:`<#directivename parameter/>` 某些自定义指令使用`@`代替`#`,以区分内置指令。标签的嵌套应当正确,如同XML一样,避免交叉使用。错误的指令会导致FreeMarker报错并停止处理模板。FreeMarker会忽略FTL标签内的空白字符,且`<`, `/`, 和指令名之间不允许有空格。 **插值规则**: FreeMarker的插值语法允许开发者插入动态数据到模板中。除了基本的`${expression}`和`#{expression}`,还有几种特殊的插值形式: - `${!expression}`:如果表达式结果为`null`,则输出空字符串。 - `${expression?string}`:强制将表达式结果转换为字符串。 - `${expression?c}`:转换为“安全”字符串,自动处理日期、数字等类型。 - `${expression?html}`:将输出进行HTML转义,防止XSS攻击。 FreeMarker还支持条件语句(`#if`, `#else`, `#elseif`),循环(`#list`,`#foreach`),以及包括其他模板(`#include`,`#import`)等高级功能。 通过理解这些基本语法和组成,开发者可以有效地构建FreeMarker模板,生成根据数据动态变化的输出,提高代码的可维护性和可读性。在实际项目中,结合控制器提供的数据模型,FreeMarker模板能轻松地生成复杂的Web页面,实现灵活的视图呈现。