`
ok0932
  • 浏览: 5894 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

velocity中文乱码最终解决方案[转]

阅读更多
前言:最近在用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" 。

分享到:
评论

相关推荐

    sitemesh2 集成velocity 装饰页面乱码

    解决页面乱码问题的关键在于确保整个应用链路中的字符编码一致。通过正确配置项目、服务器、模板、sitemesh和HTTP响应头,我们可以有效地避免乱码问题,实现流畅的页面装饰效果。对于`VelocityView.java`的具体功能...

    velocity中文文档 教程

    3. **合并上下文和模板**:通过`VelocityTemplate.merge(context, writer)`方法,将上下文中的数据与模板结合,生成最终的输出。 4. **输出结果**:生成的输出可以写入到文件、流或其他输出设备。 **Velocity的优势...

    velocity中faile to load source 和中文乱码问题

    在使用Velocity时,可能会遇到一些常见的问题,如“无法加载资源'hello.vm'”以及中文乱码问题,下面将详细解释这两个问题的成因及解决方法。 首先,"unable to find resource 'hello.vm' in any resource loader...

    velocity中文

    **Velocity中文手册与学习资料详解** Velocity是一款基于Java的模板引擎,它允许开发者将HTML页面设计与业务逻辑相分离,让网页设计人员专注于页面布局,而程序员则专注于编写控制逻辑。Velocity通过简单的语法使得...

    简单的velocity工程

    这个"简单的velocity工程"应该是包含了一个基本的Velocity模板语言(VTL)使用示例,便于初学者理解和实践。 Velocity工程的核心是Velocity模板文件(通常以`.vm`为扩展名),它与Java代码相结合,允许开发者将逻辑...

    Velocity_中文手册

    Velocity是一个基于Java的模板引擎,它的主要用途是将动态内容嵌入到Web页面中。模板引擎是一种将模板(template)和数据结合生成文档的软件。Velocity通过使用简单而功能强大的脚本语言——Velocity模板语言...

    《Velocity java开发指南》中文版

    Velocity是一个用于生成静态或动态内容的模板解决方案,尤其适用于Java开发者。它能够帮助开发者将静态页面元素与动态数据相结合,以生成定制化的输出,如HTML、XML等格式。 在模板引擎的基本操作中,Velocity的...

    Velocity文档中文版

    Velocity 文档中文版 Velocity 是一个基于 Java 的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由 Java 代码定义的对象。 Velocity 的能力远不止 web 站点开发这...

    velocity 中文开发文档

    ### Velocity 中文开发文档知识点详解 #### 一、Velocity 概述 - **定义与功能**:Velocity 是一款基于 Java 的模板引擎 (template engine),它允许开发者或非程序员通过简单的模板语言来引用 Java 代码中定义的...

    velocity精典中文帮助文档

    velocity精典中文帮助文档

    Velocity用户手册_中文.docVelocity用户手册_中文.doc

    【Velocity】 Velocity 是一个基于 Java 的模板引擎,它允许开发者使用模板语言(Template Language)来引用由 Java 代码定义的对象。...无论是小型项目还是大型企业级应用,Velocity 都能作为一个优秀的模板解决方案。

    velocity文档(Velocity1.4java开发指南中文版,Velocity1.4模板使用指南中文版中文版)

    提供的 "Velocity1.4java开发指南中文版.pdf" 和 "Velocity1.4柾斅巊梡巜撿拞暥斉拞暥斉.pdf" 应该是 Velocity 1.4 的中文版开发文档和使用教程。通过阅读这两份文档,你可以深入学习如何配置 Velocity,如何编写...

    velocity-1.5.jar,velocity-1.6.2-dep.jar,velocity-tools-1.3.jar

    这整个过程是完全独立于具体的服务器环境的,使得Velocity成为一种跨平台的解决方案。 总的来说,Velocity和Velocity Tools是Java Web开发中的重要组件,它们帮助开发者构建高效、可维护的Web应用,同时保持前后端...

    velocity中文资料以及实例详解

    Velocity 是一个基于Java的模板引擎,它允许网页设计师在页面中嵌入动态内容,而无需直接接触Java代码。...无论你是新手还是经验丰富的开发者,这份Velocity中文资料都将是你理解和掌握Velocity的强大工具。

    velocity语法中文版

    velocity语法中文版,还有详细例子解析。

    velocity中文手册

    Velocity中文手册提供了关于Velocity模板引擎的详细信息,它是一个基于Java的模板技术,主要用于Web页面开发,让设计者和程序员可以并行开发遵循MVC模式的网站。通过Velocity,Java代码与HTML页面分离,增强了代码的...

    Velocity用户手册 中文版

    这个用户手册中文版详细介绍了Velocity的使用方法和语法特性。 ** Velocity 的基本概念 ** 1. **模板(Template)**:模板是Velocity的核心,它是HTML或XML等静态页面中嵌入了Velocity指令的文件,用于生成最终的...

    itext+velocity 填充字段 html转pdf

    在“itext+velocity 填充字段 html转pdf”的应用场景中,首先会创建一个HTML模板,其中包含预定义的占位符或变量。这些变量是用Velocity语法标记的,如`${variable}`。然后,使用Velocity将这些模板与数据源(如...

    Velocity用户手册(中文)

    **Velocity简介** Velocity是一款强大的Java模板引擎,由Apache软件基金会开发并维护,是Apache Jakarta项目的一部分。它旨在将呈现逻辑从应用程序代码中分离出来,使开发者可以专注于业务逻辑,而设计师则可以专注...

    velocity-1.7-API文档-中文版.zip

    包含翻译后的API文档:velocity-1.7-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.apache.velocity,artifactId:velocity,version:1.7 使用方法:解压翻译后的API文档,用浏览器打开“index....

Global site tag (gtag.js) - Google Analytics