前言:最近在用velocity开发个东西,但其vm页面的输出总是会乱码,在网上找了很多资料,还是不能解决,最终在一篇网上的文章的启发下,http://www.iteye.com/post/540300,终于搞定了这个问题。
好,废话少说,下面是解决办法。
在这里,我的配置是全部采用GBK这种编码,若要采用其他编码,是同理的。我的开发环境是windows XP,MYEclipse6.0,MyEclipse自带的Tomcat,MySql数据库,项目用到 的技术是Velocity+servlet+javaBean。
1.首先要确保开发工具(如MyEclipse),WEB服务器(如Tomcat),数据库 (如 MySql)采用的是同一种编码。
1.1 MyElcipse的配置:
对着工程项目按右键,点属性-->资源,在text file encoding里选GBK。
1.2 MyEclipse自带的Tomcat的配置:
强烈建议先装一个Apache Tomcat6.0,再把安装目录下的conf文件夹复制,放到MYEclipse的工程文件里的.data下的.plugins下的 com.genuitec.eclipse.easie.tomcat.myeclipse下的tomcat,把Tomca下的conf覆盖掉。
注:这是解决MyEclipse自带的Tomcat乱码问题最有效的解决办法。
然后修改conf文件下的server.xml文件,在server.xml里的
<Connector port="8080" .... />字段后
增加对GET方法获取数据时的编码设置参数 URIEncoding="GBK"
增加对Post方法获取数据时的编码设置参数 useBodyEncodingForURI="true" 即<Connector port="8080" ... URIEncoding="GBK" useBodyEncodingForURI="true"/>
若是用Apache Tomcat去运行Web程序,同理也是像上面一样修改。
1.3 修改MySql的编码:
建议下一个MySql Gui工具,打开MySql adminstrator ,在startup variables
项里的advanced下的Def.char Set里写进GBk。
2.设置velocity的编码设置
2.1 这里有两种方法,网上的文章一般是讲这些。
方法一:修改Veloicity.properties配置文件,加入以下信息
input.encoding=GBK
output.encoding=GBk
方法二:写到这里,顺便把velocity经常找不到vm文件的解决方法也加进去了
在关键servelt类里定义一个私有对象
private VelocityEngine velo; //velocity引擎对象
再在servelt类里的init()方法里加入以下语句去加入一些属性设置
velo = new VelocityEngine();
//设置vm模板的装载路径
Properties prop = new Properties();
String path = this.getServletContext().getRealPath("/");
//"template/" 是指定你的vm文件放在WEBROOT下的template,根据
// 你工程的vm文件位置的不同而作相应的变化
prop.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path + "template/");
//设置velocity的编码
prop.setProperty(Velocity.ENCODING_DEFAULT, "GBK");
prop.setProperty(Velocity.INPUT_ENCODING, "GBK");
prop.setProperty(Velocity.OUTPUT_ENCODING, "GBK");
try {
//初始化设置,下面用到getTemplate("*.vm")输出时
//一定要调用velo对象去做,即velo.getTemplate("*.vm")
velo.init(prop);
} catch (Exception e1) {
e1.printStackTrace();
}
2.2 接着,就是整个问题解决的关键之处了,在doGet()和doPost()方法的最初加入两条语句
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
为什么要加入这两句呢?因为Velocity源码中根本就没这两个参数,加入以后,无论是请求或回应,都会按GBK的编码去传递了。
3.当然,在所有的vm文件和JSP文件里也要加入 pageEncoding="GBK" 。
分享到:
相关推荐
解决页面乱码问题的关键在于确保整个应用链路中的字符编码一致。通过正确配置项目、服务器、模板、sitemesh和HTTP响应头,我们可以有效地避免乱码问题,实现流畅的页面装饰效果。对于`VelocityView.java`的具体功能...
3. **合并上下文和模板**:通过`VelocityTemplate.merge(context, writer)`方法,将上下文中的数据与模板结合,生成最终的输出。 4. **输出结果**:生成的输出可以写入到文件、流或其他输出设备。 **Velocity的优势...
在使用Velocity时,可能会遇到一些常见的问题,如“无法加载资源'hello.vm'”以及中文乱码问题,下面将详细解释这两个问题的成因及解决方法。 首先,"unable to find resource 'hello.vm' in any resource loader...
**Velocity中文手册与学习资料详解** Velocity是一款基于Java的模板引擎,它允许开发者将HTML页面设计与业务逻辑相分离,让网页设计人员专注于页面布局,而程序员则专注于编写控制逻辑。Velocity通过简单的语法使得...
这个"简单的velocity工程"应该是包含了一个基本的Velocity模板语言(VTL)使用示例,便于初学者理解和实践。 Velocity工程的核心是Velocity模板文件(通常以`.vm`为扩展名),它与Java代码相结合,允许开发者将逻辑...
Velocity是一个基于Java的模板引擎,它的主要用途是将动态内容嵌入到Web页面中。模板引擎是一种将模板(template)和数据结合生成文档的软件。Velocity通过使用简单而功能强大的脚本语言——Velocity模板语言...
Velocity是一个用于生成静态或动态内容的模板解决方案,尤其适用于Java开发者。它能够帮助开发者将静态页面元素与动态数据相结合,以生成定制化的输出,如HTML、XML等格式。 在模板引擎的基本操作中,Velocity的...
Velocity 文档中文版 Velocity 是一个基于 Java 的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由 Java 代码定义的对象。 Velocity 的能力远不止 web 站点开发这...
### Velocity 中文开发文档知识点详解 #### 一、Velocity 概述 - **定义与功能**:Velocity 是一款基于 Java 的模板引擎 (template engine),它允许开发者或非程序员通过简单的模板语言来引用 Java 代码中定义的...
velocity精典中文帮助文档
【Velocity】 Velocity 是一个基于 Java 的模板引擎,它允许开发者使用模板语言(Template Language)来引用由 Java 代码定义的对象。...无论是小型项目还是大型企业级应用,Velocity 都能作为一个优秀的模板解决方案。
提供的 "Velocity1.4java开发指南中文版.pdf" 和 "Velocity1.4柾斅巊梡巜撿拞暥斉拞暥斉.pdf" 应该是 Velocity 1.4 的中文版开发文档和使用教程。通过阅读这两份文档,你可以深入学习如何配置 Velocity,如何编写...
这整个过程是完全独立于具体的服务器环境的,使得Velocity成为一种跨平台的解决方案。 总的来说,Velocity和Velocity Tools是Java Web开发中的重要组件,它们帮助开发者构建高效、可维护的Web应用,同时保持前后端...
Velocity 是一个基于Java的模板引擎,它允许网页设计师在页面中嵌入动态内容,而无需直接接触Java代码。...无论你是新手还是经验丰富的开发者,这份Velocity中文资料都将是你理解和掌握Velocity的强大工具。
velocity语法中文版,还有详细例子解析。
Velocity中文手册提供了关于Velocity模板引擎的详细信息,它是一个基于Java的模板技术,主要用于Web页面开发,让设计者和程序员可以并行开发遵循MVC模式的网站。通过Velocity,Java代码与HTML页面分离,增强了代码的...
这个用户手册中文版详细介绍了Velocity的使用方法和语法特性。 ** Velocity 的基本概念 ** 1. **模板(Template)**:模板是Velocity的核心,它是HTML或XML等静态页面中嵌入了Velocity指令的文件,用于生成最终的...
在“itext+velocity 填充字段 html转pdf”的应用场景中,首先会创建一个HTML模板,其中包含预定义的占位符或变量。这些变量是用Velocity语法标记的,如`${variable}`。然后,使用Velocity将这些模板与数据源(如...
**Velocity简介** Velocity是一款强大的Java模板引擎,由Apache软件基金会开发并维护,是Apache Jakarta项目的一部分。它旨在将呈现逻辑从应用程序代码中分离出来,使开发者可以专注于业务逻辑,而设计师则可以专注...
包含翻译后的API文档:velocity-1.7-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.apache.velocity,artifactId:velocity,version:1.7 使用方法:解压翻译后的API文档,用浏览器打开“index....