Velocity 模板在java里应用

Velocity是一个基于java的模板引擎(模板引擎的作用就是取得数据并加以处理,最后显示出数据)。
     它允许任何人仅仅简单的使用模板语言来引用由java代码定义的对象。
    
主要应用在:
 1.Web应用的开发。
 2.作为模板产生SQL,XML或代码等。
 3.作为其他系统的集成组件使用。

 

当Velocity应用于application program或 a servlet,主要工作流程如下:
 1.初始化Velocity.
 2.创建Context对象
 3.添加数据到Context
 4.选择模板
 5.合并模板和数据产生输出页面

 

准备工作:导入相关依赖包,在下面附件中。

 

例1:应用程序事例

 

1.模板文件hellovelocity.vm文件

Java代码   收藏代码
  1. ##这是一行注释,不会输出  
  2. #*这是多行注释,不会输出  
  3.    多行注释*#  
  4. // ---------- 1.变量赋值输出------------  
  5. Welcome $name to Javayou.com!  
  6. today is $date.  
  7. tdday is $mydae.//未被定义的变量将当成字符串  
  8.   
  9. // -----------2.设置变量值,所有变量都以$开头----------------  
  10. #set( $iAmVariable = "good!" )  
  11. Welcome $name to Javayou.com!  
  12. today is $date.  
  13. $iAmVariable  
  14.   
  15. //-------------3.if,else判断--------------------------  
  16. #set ($admin = "admin")  
  17. #set ($user = "user")  
  18. #if ($admin == $user)  
  19. Welcome admin!  
  20. #else  
  21. Welcome user!  
  22. #end  
  23.   
  24. //--------------4.迭代数据List---------------------  
  25. #foreach( $product in $list )  
  26. $product  
  27. #end  
  28.   
  29. // ------------5.迭代数据HashSet-----------------  
  30. #foreach($key in $hashVariable.keySet() )    
  31. $key ‘s value: $ hashVariable.get($key)  
  32. #end  
  33.   
  34. //-----------6.迭代数据List Bean($velocityCount为列举序号,默认从1开始,可调整)  
  35. #foreach ($s in $listBean)  
  36. <$velocityCount> Address: $s.address  
  37. #end  
  38.   
  39. //-------------7.模板嵌套---------------------  
  40. #foreach ($element in $list)  
  41.     #foreach ($element in $list)  
  42.     inner:This is ($velocityCount)- $element.  
  43.     #end  
  44. outer:This is ($velocityCount)- $element.  
  45. #end  
  46.   
  47. //-----------8.导入其它文件,多个文件用逗号隔开--------------  
  48. #include("com/test2/test.txt")  

 

2.其它非模板文件text.txt

Java代码   收藏代码
  1. ======text.txt====================  
  2. this is test's content.yeah.  

 

3.客户端应用测试代码:

Java代码   收藏代码
  1. package com.test2;  
  2. import java.io.FileOutputStream;  
  3. import java.io.StringWriter;  
  4. import java.util.*;  
  5. import org.apache.velocity.app.Velocity;  
  6. import org.apache.velocity.app.VelocityEngine;  
  7. import org.apache.velocity.Template;  
  8. import org.apache.velocity.VelocityContext;  
  9.   
  10. public class HelloVelocity {  
  11.   
  12.     public static void main(String[] args) throws Exception {  
  13.   
  14.         // 初始化并取得Velocity引擎  
  15.         VelocityEngine ve = new VelocityEngine();  
  16.   
  17.         // 取得velocity的模版          
  18.         Properties p =new Properties();  
  19.         p.put(Velocity.FILE_RESOURCE_LOADER_PATH, "D:/myspace/VelocityTest/src");  
  20.         ve.init(p);  
  21.           
  22.         //取得velocity的模版   
  23.         Template t = ve.getTemplate("com/test2/hellovelocity.vm","utf-8");    
  24.   
  25.         // 取得velocity的上下文context  
  26.         VelocityContext context = new VelocityContext();  
  27.   
  28.         // 把数据填入上下文  
  29.         context.put("name""Liang");  
  30.         context.put("date", (new Date()).toString());  
  31.   
  32.         // 为后面的展示,提前输入List数值  
  33.         List temp = new ArrayList();  
  34.         temp.add("item1");  
  35.         temp.add("item2");  
  36.         context.put("list", temp);        
  37.         List tempBean = new ArrayList();  
  38.         tempBean.add(new UserInfo("1","张三","福建"));  
  39.         tempBean.add(new UserInfo("2","李四","湖南"));  
  40.         context.put("listBean", tempBean);  
  41.   
  42.         // 输出流  
  43.         StringWriter writer = new StringWriter();  
  44.         // 转换输出  
  45.         t.merge(context, writer);  
  46.         // 输出信息  
  47.         System.out.println(writer.toString());  
  48.           
  49.         // 输出到文件  
  50.         FileOutputStream of = new FileOutputStream("d:/velocity.txt");  
  51.                            of.write(writer.toString().getBytes("GBK"));   
  52.                            of.flush();  
  53.                            of.close();        
  54.     }  
  55. }  

 

4.UserInfo实体类

Java代码   收藏代码
  1. package com.test2;  
  2.   
  3. public class UserInfo {  
  4.       
  5.     private String userId;  
  6.     private String userName;  
  7.     private String address;   
  8.       
  9.     public UserInfo(String userId, String userName, String address) {  
  10.         super();  
  11.         this.userId = userId;  
  12.         this.userName = userName;  
  13.         this.address = address;  
  14.     }  
  15.     public String getUserId() {  
  16.         return userId;  
  17.     }  
  18.     public void setUserId(String userId) {  
  19.         this.userId = userId;  
  20.     }  
  21.     public String getUserName() {  
  22.         return userName;  
  23.     }  
  24.     public void setUserName(String userName) {  
  25.         this.userName = userName;  
  26.     }  
  27.     public String getAddress() {  
  28.         return address;  
  29.     }  
  30.     public void setAddress(String address) {  
  31.         this.address = address;  
  32.     }  
  33. }  

 

例2:Web应用事例

 

1.在web-inf目录下建立velocity目录,建立一模板文件velocity.vm。

Java代码   收藏代码
  1. <html>  
  2. <title>hello!Lizhiwo_wo!</title>  
  3. <body>  
  4. #set($foo = "Velocity")  
  5. Hello $foo World!  欢迎您~~~~~~~~~~~~  
  6. <table>  
  7.     <tr>  
  8.         <td>ID</td><td>姓名</td><td>地址</td>  
  9.     </tr>  
  10.     #foreach ($s in $listBean)    
  11.         <tr>  
  12.         <td>$s.userId</td><td>$s.userName</td><td>$s.address</td>  
  13.         </tr>  
  14.     #end  
  15. </table>  
  16. </body>  
  17. </html>  

 

2.在web-inf目录下建立velocity.properties属性文件

Java代码   收藏代码
  1. resource.loader = file  
  2. file.resource.loader.path = /WEB-INF/velocity  
  3. file.resource.loader.cache = true  
  4. file.resource.loader.modificationCheckInterval = 300  

 

3.建立Servlet文件VelocityServletTest.java

Java代码   收藏代码
  1. package servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.StringWriter;  
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7. import javax.servlet.ServletConfig;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10. import org.apache.commons.collections.ExtendedProperties;  
  11. import org.apache.velocity.Template;  
  12. import org.apache.velocity.app.Velocity;  
  13. import org.apache.velocity.context.Context;  
  14. import org.apache.velocity.tools.view.servlet.VelocityViewServlet;  
  15.   
  16. import com.test2.UserInfo;  
  17.   
  18.     public class VelocityServletTest extends VelocityViewServlet{  
  19.       
  20.     private static final long serialVersionUID = 1L;      
  21.       
  22.     //第一步 加载配置文件这个方法会在VelocityServlet的初始化方法init()中被调用  
  23.     protected ExtendedProperties loadConfiguration(ServletConfig config) throws IOException  
  24.     {  
  25.         ExtendedProperties p = super.loadConfiguration(config);  
  26.   
  27.         // 获取velocity.properties中配置的velocity模板路径  
  28.         String velocityLoadPath = p.getString(Velocity.FILE_RESOURCE_LOADER_PATH);          
  29.      
  30.         if (velocityLoadPath != null) {  
  31.           
  32.             // 获取模板路径的绝对路径  
  33.             velocityLoadPath = getServletContext().getRealPath(velocityLoadPath);  
  34.             if (velocityLoadPath != null) {  
  35.                 //重新设置模板路径  
  36.                  System.out.println("vMPath2:"+velocityLoadPath);  
  37.                 p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, velocityLoadPath);                 
  38.             }  
  39.         }  
  40.         return p;  
  41.     }  
  42.   
  43.     protected Template handleRequest(HttpServletRequest req,   
  44.                                      HttpServletResponse res,   
  45.                                      Context context)  
  46.                                      throws Exception{  
  47.           
  48.         //字符编码  
  49.         req.setCharacterEncoding("gb2312");  
  50.         res.setCharacterEncoding("gb2312");  
  51.         //页面输出  
  52.         res.setContentType("text/html;charset=" + "gb2312");  
  53.           
  54.         List tempBean = new ArrayList();  
  55.         tempBean.add(new UserInfo("1","张三","福建"));  
  56.         tempBean.add(new UserInfo("2","李四","湖南"));  
  57.         context.put("listBean", tempBean);  
  58.           
  59.         String templateName = "velocity.vm";          
  60.         // 测试信息输出  
  61.         Template t= getTemplate(templateName, "utf-8");       
  62.         StringWriter writer = new StringWriter();  
  63.         // 转换输出  
  64.         t.merge(context, writer);  
  65.         // 输出信息  
  66.         System.out.println(writer.toString());        
  67.         // 获取模板页面展示  
  68.             return templateName != null ? getTemplate(templateName, "utf-8") : null;          
  69.     }  
  70. }  

 

 4.在web.xml文件中进行配置

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.       
  8.     <servlet>  
  9.         <servlet-name>velocityServletTest</servlet-name>  
  10.         <servlet-class>servlet.VelocityServletTest</servlet-class>  
  11.         <init-param>  
  12.             <param-name>org.apache.velocity.properties</param-name>  
  13.             <param-value>/WEB-INF/velocity.properties</param-value>  
  14.         </init-param>  
  15.         <load-on-startup>1</load-on-startup>  
  16.     </servlet>  
  17.     <servlet-mapping>  
  18.         <servlet-name>velocityServletTest</servlet-name>  
  19.         <url-pattern>/velocityServletTest</url-pattern>  
  20.     </servlet-mapping>  
  21. </web-app>  

 

5.将其部署到tomcat下,页面访问
  http://localhost:8080/VelocityTest/velocityServletTest
  输出页面如下:

Java代码   收藏代码
  1. Hello Velocity World! 欢迎您~~~~~~~~~~~~   
  2. ID  姓名  地址  
  3. 1   张三  福建  
  4. 2   李四  湖南 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值