apache的开源项目-模板引擎(Velocity)(转)

然后修改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。

 

 

前言:最近在用velocity开发个东西,但其vm页面的输出总是会乱码,在网上找了很多资料,还是不能解决,最终在一篇网上的文章的启发下,http://www.javaeye.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" 。

http://it.chinawin.net/softwaredev/article-16fb6.html

 

 

首先,如果你对Velocity不是很了解,还是建议你去apache的官方网站上去走走....

这是velocity的官网:http://velocity.apache.org/

当然如果你对英文文档不是很感冒,这里也有好的资料:

Velocity 文档(1)
Velocity 文档(2)
Velocity 文档(3)

下面我就正式说说我做的项目啦...

项目结构:

运行"helloWorld.vm"模板效果:

运行"userInfo.vm"模板效果:

运行"emailTemplate.vm"模板效果:

==============================================================

代码部分:

==============================================================

/Apache-Velocity-java/src/com/b510/velocity/test/VelocityTest.java

  1 /**
  2  *
  3  */
  4 package com.b510.velocity.test;
  5
  6 import java.io.StringWriter;
  7 import java.text.SimpleDateFormat;
  8 import java.util.Date;
  9
 10 import org.apache.velocity.Template;
 11 import org.apache.velocity.VelocityContext;
 12 import org.apache.velocity.app.VelocityEngine;
 13
 14 import com.b510.velocity.bean.Mail;
 15 import com.b510.velocity.bean.User;
 16
 17 /**
 18  * 测试类
 19  *
 20  * @author hongten<br>
 21  * @date 2013-3-9
 22  */
 23 public class VelocityTest {
 24
 25     public static final String HELLO_WORLD_VM_PATH = "vms/helloWorld.vm";
 26     public static final String USER_INFO_VM_PATH = "vms/userInfo.vm";
 27     public static final String EMAIL_TEMPLATE_VM_PATH = "vms/emailTemplate.vm";
 28
 29     public static void main(String[] args) throws Exception {
 30         sayHelloFromVM(HELLO_WORLD_VM_PATH);
 31         testUser(USER_INFO_VM_PATH);
 32         testEmail(EMAIL_TEMPLATE_VM_PATH);
 33     }
 34
 35     /**
 36      * 简单的hello world
 37      *
 38      * @param fileVM
 39      * @throws Exception
 40      */
 41     public static void sayHelloFromVM(String fileVM) throws Exception {
 42         VelocityEngine ve = new VelocityEngine();
 43         ve.init();
 44         Template t = ve.getTemplate(fileVM);
 45         VelocityContext context = new VelocityContext();
 46         context.put("hello", "Hello world!!");
 47         StringWriter writer = new StringWriter();
 48         t.merge(context, writer);
 49         System.out.println(writer.toString());
 50     }
 51
 52     /**
 53      * test User
 54      *
 55      * @param fileVM
 56      * @throws Exception
 57      */
 58     public static void testUser(String fileVM) throws Exception {
 59         VelocityEngine ve = new VelocityEngine();
 60         ve.init();
 61
 62         Template template = ve.getTemplate(fileVM);
 63         VelocityContext velocityContext = new VelocityContext();
 64         User user = new User();
 65         user.setEmail("hongtenzone@foxmail.com");
 66         user.setName("hongten");
 67         user.setBirthday("1990-11-18");
 68         velocityContext.put("user", user);
 69         StringWriter stringWriter = new StringWriter();
 70         template.merge(velocityContext, stringWriter);
 71
 72         System.out.println(stringWriter.toString());
 73     }
 74
 75     /**
 76      * test email
 77      *
 78      * @param fileVM
 79      * @throws Exception
 80      */
 81     public static void testEmail(String fileVM) throws Exception {
 82         VelocityEngine velocityEngine = new VelocityEngine();
 83         velocityEngine.init();
 84
 85         Template template = velocityEngine.getTemplate(fileVM);
 86         VelocityContext velocityContext = new VelocityContext();
 87         Mail mail = new Mail();
 88         mail.setContent("2013年腾讯开发者新扶持政策解读及创业机会所在");
 89         mail.setReceiverMail("hongtenzone@foxmail.com");
 90         mail.setReceiverName("Hongten");
 91         mail.setSenderMail("opensns_noreply@tencent.com");
 92         mail.setSenderName("腾讯开放平台");
 93         mail.setSenderWebSite("open.qq.com");
 94         SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
 95                 "yyyy-MM-dd HH:mm:ss");
 96         mail.setDate(simpleDateFormat.format(new Date()));
 97         velocityContext.put("mail", mail);
 98         StringWriter stringWriter = new StringWriter();
 99         template.merge(velocityContext, stringWriter);
100
101         System.out.println(stringWriter.toString());
102     }
103 }

/Apache-Velocity-java/src/com/b510/velocity/bean/User.java

 1 /**
 2  *
 3  */
 4 package com.b510.velocity.bean;
 5
 6
 7 /**
 8  * 用户实体类
 9  *
10  * @author hongten<br>
11  * @date 2013-3-9
12  */
13 public class User {
14
15     /**
16      * 用户编号
17      */
18     private Integer id;
19     /**
20      * 用户名称
21      */
22     private String name;
23     /**
24      * 密码
25      */
26     private String password;
27     /**
28      * 生日
29      */
30     private String birthday;
31     /**
32      * 邮箱
33      */
34     private String email;
35
36     public Integer getId() {
37         return id;
38     }
39
40     public void setId(Integer id) {
41         this.id = id;
42     }
43
44     public String getName() {
45         return name;
46     }
47
48     public void setName(String name) {
49         this.name = name;
50     }
51
52     public String getPassword() {
53         return password;
54     }
55
56     public void setPassword(String password) {
57         this.password = password;
58     }
59
60     public String getBirthday() {
61         return birthday;
62     }
63
64     public void setBirthday(String birthday) {
65         this.birthday = birthday;
66     }
67
68     public String getEmail() {
69         return email;
70     }
71
72     public void setEmail(String email) {
73         this.email = email;
74     }
75
76 }

/Apache-Velocity-java/src/com/b510/velocity/bean/Mail.java

  1 /**
  2  *
  3  */
  4 package com.b510.velocity.bean;
  5
  6 /**
  7  * 邮件
  8  *
  9  * @author hongten<br>
 10  * @date 2013-3-9
 11  */
 12 public class Mail {
 13
 14     private Integer id;
 15     /**
 16      * 发件人
 17      */
 18     private String senderName;
 19     /**
 20      * 发件人邮箱
 21      */
 22     private String senderMail;
 23     /**
 24      * 发件人网址
 25      */
 26     private String senderWebSite;
 27     /**
 28      * 收件人
 29      */
 30     private String receiverName;
 31     /**
 32      * 收件人邮箱
 33      */
 34     private String receiverMail;
 35     /**
 36      * 内容
 37      */
 38     private String content;
 39     /**
 40      * 日期
 41      */
 42     private String date;
 43
 44     public Integer getId() {
 45         return id;
 46     }
 47
 48     public void setId(Integer id) {
 49         this.id = id;
 50     }
 51
 52     public String getSenderName() {
 53         return senderName;
 54     }
 55
 56     public void setSenderName(String senderName) {
 57         this.senderName = senderName;
 58     }
 59
 60     public String getSenderMail() {
 61         return senderMail;
 62     }
 63
 64     public void setSenderMail(String senderMail) {
 65         this.senderMail = senderMail;
 66     }
 67
 68     public String getReceiverName() {
 69         return receiverName;
 70     }
 71
 72     public void setReceiverName(String receiverName) {
 73         this.receiverName = receiverName;
 74     }
 75
 76     public String getReceiverMail() {
 77         return receiverMail;
 78     }
 79
 80     public void setReceiverMail(String receiverMail) {
 81         this.receiverMail = receiverMail;
 82     }
 83
 84     public String getContent() {
 85         return content;
 86     }
 87
 88     public void setContent(String content) {
 89         this.content = content;
 90     }
 91
 92     public String getDate() {
 93         return date;
 94     }
 95
 96     public void setDate(String date) {
 97         this.date = date;
 98     }
 99
100     public String getSenderWebSite() {
101         return senderWebSite;
102     }
103
104     public void setSenderWebSite(String senderWebSite) {
105         this.senderWebSite = senderWebSite;
106     }
107
108 }

/Apache-Velocity-java/vms/helloWorld.vm

1 ##test hello world!
2
3 $hello

/Apache-Velocity-java/vms/userInfo.vm

 1 ##测试User
 2
 3 A: what's your name?
 4 B: $user.name
 5
 6 A: what's your birthday?
 7 B: $user.birthday
 8
 9 A: what's your email address?
10 B: $user.email
11
12 A: good!

/Apache-Velocity-java/vms/emailTemplate.vm

 1 ##测试 email
 2
 3 $mail.senderName message notification
 4 Sender       :   $mail.senderName<$mail.senderMail>
 5 Date         :   $mail.date
 6 Receiver     :   $mail.receiverName<$mail.receiverMail>
 7
 8 Dear $mail.receiverMail:
 9 $mail.senderName send a message notification as following:
10
11 $mail.content
12
13 please quick login the $mail.senderWebSite message center and have a look.
14
15                                                       $mail.senderName Team
16            

因为velocity源码中默认的编码为:

 

1 # ----------------------------------------------------------------------------
2 # T E M P L A T E  E N C O D I N G
3 # ----------------------------------------------------------------------------
4
5 input.encoding=ISO-8859-1
6 output.encoding=ISO-8859-1

 

所以,如果出现乱码我们可以设置velocity的编码格式:

1     VelocityEngine velocityEngine = new VelocityEngine();
2     velocityEngine.setProperty("input.encoding", "UTF-8");
3     velocityEngine.setProperty("output.encoding", "UTF-8");
4     velocityEngine.init();

这样就可以解决velocity的乱码问题啦...

 

源码下载:http://files.cnblogs.com/hongten/Apache-Velocity-java.rar

 

时间: 2024-10-28 14:15:36

apache的开源项目-模板引擎(Velocity)(转)的相关文章

Tiny模板引擎(Velocity Plus)应用示例

把TinyTemplate当成是Velocity的升级版其实也是可以的,毕竟它的语法是基到Veloccity扩展而来的,兼容度在80%以上. 至于TinyTemplate的实例是怎样的,且看下面: 宏的可变参数 在Java中的可变参数使用起来非常方便,Tiny模板也对可变参有一定支持. ? 1 2 3 4 5 6 7 8 #macro hello() ParameterList: ${helloParameterList.size()}     #for(para:helloParameterL

用Apache Velocity模板引擎速造网站

apache|模板 基于Java的网站开发,很多人都采用JSP作为前端网页制作的技术,尤其是在国内.这种技术通常会存在一些问题,可以通过简单地分析网站开发过程来看看这些问题.通常网站开发采用以下两种方式: ◆ 网站功能确定后,由美工设计网页的UI(界面)部分,然后由程序员在其上加入代码显示逻辑(比如循环.判断显示数据结果).这就是通常的JSP页面制作,当然这部分可以由美工完成模板,然后由JSP工程师以它为原型创建相应的JSP页面. ◆ 网站功能确定后,由美工设计网页的UI(界面)部分,然后由网页

atlas-怎么学习正在孵化中的Apache开源项目?

问题描述 怎么学习正在孵化中的Apache开源项目? 最近需要学习一个apache的开源项目atlas,目前还在孵化中,才刚有0.7版本,但是资料特别少,不知如何学习 也看了官方的一些文档(http://atlas.apache.org/),但是特别少,很多东西说得不明不白 同时也上了 incubator.apahce.org/projects/atlas.html, 也说得不明不白的 有人说可以去开源社区,但开源社区在哪呢? 有人说可以用mail list,这个怎么用呢? 有人说在github

值的关注的Java开源项目(原创)

项目|原创 值的关注的Java开源项目   名称 资料 概况 OFBiz http://ofbizchina.com:8080/ http://www.ofbiz.org/ https://ofbiz.dev.java.net/ OFBiz是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系统的框架.     OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序

如何使用 velocity 模板引擎开发网站

模板 开发网站-velocity模板引擎">基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI(界面)部分,然后由程序员在其上加入代码显示逻辑(比如循环,判断显示数据结果).也就是通常的 jsp 页面制作,当然这部分可以由美工完成模板,然后由 jsp 工程师再继续以它为原型创建相应的 jsp 页面. 2:功能确定后,由美工设计网页的UI(界面)

velocity 模板引擎

freemarker等的同类产品,可脱离web环境使用. 在web项目中与springMVC搭配,可参考<spring mvc中的视图框架> 它是一个apache的项目,地址为:http://velocity.apache.org/engine/1.7/user-guide.html 1.依赖 <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity --> <dependency> <

JAVA velocity模板引擎使用实例_JSP编程

velocity使用1.7版本. 在win7下使用intelliJ IDEA建立一基于tomcat的web app项目,命名为todo_web,设置path为/todo,导入velocity相关jar包.只导入velocity-1.7.jar这个包可能会报错,根据提示再导入velocity自带的其他包. 项目结构如下: 测试Tomcat index.jsp内容如下: 复制代码 代码如下: <%-- Created by IntelliJ IDEA. --%><%@ page conten

RocketMQ成为Apache软件基金会顶级开源项目

9月25日,Apache软件基金会官方宣布,阿里巴巴捐赠给Apache社区的开源项目RocketMQ从Apache社区正式毕业,成为Apache顶级项目(TLP).自此,Apache RocketMQ成为国内首个非Hadoop生态体系.国内首个互联网中间件的Apache顶级项目. "从孵化器中毕业是一个重要的里程碑" Apache RocketMQ孵化器导师.SAP Hybris研发总监.Apache ActiveMQ副主席Bruce Snyder先生对此评价道,"这是对Ro

velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools

通常velocity是配合spring mvc之类的框架在web中使用,但velocity本身其实对运行环境没有过多的限制,在单独的java application中也可以独立使用,下面演示了利用velocity模板引擎生成 『每日发货单』邮件内容: 一.先定义邮件内容模板:mail-template.vm <string>用户,您好:</string> <h2>以下是 $date.format('yyyy-MM-dd',$model.deliverDate,$conv