Velocity自带的转义对中文的支持不好,我们自己就写了转义的代码。
public class WebEscapeHtmlReference extends EscapeHtmlReference {
@Override
protected String escape(Object text) {
return escapeHtml(text);
}
private static String escapeHtml(Object value) {
if (value == null)
return null;
if (value instanceof String) {
String result = value.toString();
// "'<>&
result = result.replaceAll("&", "&").replaceAll(">", ">")
.replaceAll("<", "<").replaceAll("\"", """);
return result;
} else {
return value.toString();
}
}
}
Veloctiy配置
<!-- Velocity config -->
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/views/" />
<property name="velocityPropertiesMap">
<props>
<prop key="input.encoding">utf-8</prop>
<prop key="output.encoding">utf-8</prop>
<prop key="eventhandler.referenceinsertion.class">org.jamie.demo.springweb.framework.mvc.WebEscapeHtmlReference</prop>
<prop key="eventhandler.escape.html.match">/^(?!\$\!?unesc_).*/</prop>
<prop key="velocimacro.library">macros.vm</prop>
</props>
</property>
</bean>
对于某些不需要转义的输出(你必须肯定这个输出不包含用户的输入,或者用户的输入已经转义过),velocity变量以unesc_作为前缀。
分享到:
相关推荐
5. **事件驱动的处理机制**:Velocity 提供了一套事件驱动的处理机制,允许用户自定义处理器对模板进行预处理或后处理,如自动转义特殊字符,防止XSS攻击。 **velocity-tools-2.0.jar** `velocity-tools-2.0.jar`...
- **Velocity**则相对简单,支持基本的字符转义。 7. **数据绑定**: - **FreeMarker**支持更灵活的数据绑定方式,能够轻松地访问和操作Java对象的属性。 - **Velocity**的数据绑定功能虽然不如FreeMarker强大,...
例如,可以使用Velocity的内置宏或者自定义函数来自动转义HTML特殊字符,如 `、`>`、`&` 和 `'`。 `EscapeRequestReference`可能是一个类,用于处理HTTP请求中的引用,并确保它们在被插入到Velocity模板中之前得到...
Velocity在Web开发中常被用来生成HTML、XML、CSV或其他格式的文档,将内容和表现分离,让开发者专注于业务逻辑而不用关心页面布局。在这个"velocity的学习资料"压缩包中,我们很可能会找到关于Velocity的基本概念、...
在Velocity的实现中,还可以通过转义字符实现对VTL特殊字符的转义,同时在输出文本时也可以使用转义字符以达到预期的显示效果。例如,可以使用转义字符来插入一个美元符号“$”而不引起变量解析。 VTL格式化问题...
此外,了解Velocity的内置工具和宏库,如Escaper工具,可以帮助你更好地处理HTML转义和防止XSS攻击。 这个压缩包中的“velocity学习资料”很可能包含以下内容: 1. 基本教程:介绍Velocity的概念、安装和基本用法。...
4. **内置方法**:Velocity提供了一些内置的方法,如`escape()`用于转义特殊字符,`format()`进行格式化输出。 **二、Velocity与Freemarker比较** 虽然Velocity和Freemarker都是视图模板引擎,但它们有各自的特性...
4. **逃逸机制(Escaping)**:Velocity 提供了 `##` 符号用于注释,`@` 符号用于转义特殊字符,防止变量或指令被误解析。 ** VelocityProject 示例** 在 "VelocityProject" 中,我们可能看到以下结构: - **...
4. **函数和宏**:Freemarker提供了内置函数,如`htmlEscape`用于转义HTML特殊字符,同时用户可以自定义宏来封装重复的模板片段。 5. **模板配置**:可以通过`freemarker.cfg.properties`文件配置模板解析的全局选项...
6. **自动转义(Auto-escaping)**:为了防止XSS攻击,Velocity提供了自动转义机制,确保模板中的动态内容安全输出。你可以根据需求开启或关闭这个功能。 在Velocity Demo中,你可能会看到以下的步骤: 1. **初始...
1. **模板(Template)**: 模板是Velocity的基石,它定义了HTML、XML或其他格式的静态文本结构,其中包含了一些特殊的指令(称为Velocity语句)来插入动态数据。 2. **上下文(Context)**: 上下文是模板和Java代码...
- **输出控制(Output Control)**: `#set` 用于设置变量,`#escape` 和 `#noescape` 控制 HTML 实体转义。 - **注释(Comments)**: `#comment` 和 `##` 分别用于单行和多行注释。 3. **最佳实践** - **保持...
Velocity会自动处理变量的转义和安全问题,确保模板的输出是安全的。 在实际应用中,Velocity通过一个上下文(Context)对象来传递数据到模板。开发者可以在Java代码中设置Context对象的属性,这些属性可以在模板中...
Velocity是Apache软件基金会的一个开源项目,它是一种基于Java的模板引擎,用于将HTML、XML等静态页面与动态数据分离,使得开发者能够专注于业务逻辑,而设计师可以专注于页面布局和样式设计。Velocity通过简单的...
1. **生成 Web 页面**:Velocity 可用于生成静态 HTML 页面或动态 Web 内容。 2. **SQL 生成**:它可以生成 SQL 查询,这对于数据库驱动的应用程序非常有用。 3. **PostScript 生成**:还可以生成 PostScript 文档,...
Velocity 还提供了对字符串、数值、范围操作的支持,以及对特殊字符的转义机制,确保模板的安全性和正确性。例如,货币符号和 VTL 引用的转义,以及大小写的替换。 在实际应用中,Velocity 不仅限于 Web 开发,还...
6. **Velocity工具**:Velocity提供了一些内置工具,如`esc`用于转义HTML实体,`date`和`number`用于格式化日期和数字。Struts2也提供了额外的工具集,如`servlet`和`field`,可以方便地访问HTTP请求和表单字段。 7...
在实际项目中,Velocity常用于生成电子邮件、报表、动态HTML页面等内容。例如,你可以根据用户数据动态生成个性化邮件,或者在网站上展示动态生成的商品详情页。 通过阅读这份中文版的Velocity用户手册,你将能够...
5. 渲染:当VTL遇到一个变量,它会尝试将其转换为字符串并输出到最终的HTML或其他输出格式。 除了基础语法,Velocity还提供了一系列指令,用于控制模板的逻辑结构: 1. `Set`:设置变量的值,如 `#set($var = ...