`
phantom
  • 浏览: 162440 次
社区版块
存档分类
最新评论

Velocity 中执行业务

阅读更多

package com.jh.core.util;

import java.io.StringWriter;
import java.util.Map;
import java.util.Properties;

import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;

import com.jh.app.util.Globle;

public class VelocityUtil
{
   static VelocityEngine ve=null;
   public static VelocityEngine velocity()
   {
   if(ve!=null){
    return ve;
   }
      ve = new VelocityEngine();
      Properties p = new Properties();
      p.setProperty(Velocity.RUNTIME_LOG, "velocity_jh.log");
      p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, Globle.VM_PATH);
      try
      {
         ve.init(p);
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
      return ve;
   }

   public static void main(String args[])
   {
      try
      {
         Velocity.init();
      }
      catch(Exception e)
      {

         System.out.println("Problem initializing Velocity : " + e);
         return;
      }
      VelocityContext context = new VelocityContext();
       TTT tt= new TTT();
       tt.setSs("vvvvvvvv");
       tt.setQq("qqq");
      context.put("tt", tt);
      context.put("name", "Velocity");
      context.put("project", "Jakarta");
     
      StringWriter w = new StringWriter();
//      try
//      {
//         velocity().mergeTemplate("example2.vm", context, w);
//      }
//      catch(Exception e)
//      {
//         System.out.println("Problem merging template : " + e);
//      }
      System.out.println(" template : " + w);
     // String s = "We are using $project $name to render this.\n #parse(\"example2.vm\")";
      String s = " ${tt.qq}_dd  ";
     
      w = new StringWriter();
      try
      {
         velocity().evaluate(context, w, "mystring", s);
      }
      catch(ParseErrorException pee)
      {
         System.out.println("ParseErrorException : " + pee);
      }
      catch(MethodInvocationException mee)
      {
         System.out.println("MethodInvocationException : " + mee);
      }
      catch(Exception e)
      {
         System.out.println("Exception : " + e);
      }
      System.out.println(" string : " + w);
   }

   public static String evaluate(String vmText, Map map, String logTag)
   {
      // System.out.println(vmText);
      StringWriter w = new StringWriter();
      VelocityContext context = new VelocityContext();
      if(map != null)
      {
         java.util.Iterator it = map.keySet().iterator();
         while(it.hasNext())
         {
            Object obj = it.next();
            if(obj instanceof String)
               context.put((String) obj, map.get(obj));
         }
      }
      try
      {
         velocity().evaluate(context, w, logTag, vmText);
      }
      catch(ParseErrorException pee)
      {
         System.out.println("ParseErrorException : " + pee);
      }
      catch(MethodInvocationException mee)
      {
         System.out.println("MethodInvocationException : " + mee);
      }
      catch(Exception e)
      {
         System.out.println("Exception : " + e);
      }
      return w.toString();
   }

   public static String mergeVM(String vmFile, Map map)
   {
      StringWriter w = new StringWriter();
      VelocityContext context = new VelocityContext();
      if(map != null)
      {
         java.util.Iterator it = map.keySet().iterator();
         while(it.hasNext())
         {
            Object obj = it.next();
            if(obj instanceof String)
               context.put((String) obj, map.get(obj));
         }
      }
      try
      {
         velocity().mergeTemplate(vmFile, context, w);
      }
      catch(ParseErrorException pee)
      {
         System.out.println("ParseErrorException : " + pee);
      }
      catch(MethodInvocationException mee)
      {
         System.out.println("MethodInvocationException : " + mee);
      }
      catch(Exception e)
      {
         System.out.println("Exception : " + e);
      }
      return w.toString();
   }

}

 

 

package com.jh.app.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ResourceNotFoundException;

 

public class VelocityUtil
{
 public  static String GLOBLE_VM_PATH = "/usr/bj_app/ROOT";
    private static VelocityEngine ve =null;
    synchronized public  static VelocityEngine velocity()
 {
   if(ve!=null) return ve;
   ve = new VelocityEngine();
  Properties p = new Properties();
  p.setProperty(Velocity.RUNTIME_LOG, "velocity_jh.log");
  p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, GLOBLE_VM_PATH);
  try
  {
   ve.init(p);
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  return ve;
 }
    public static void main(String args[]){
     Map map=new HashMap();
     map.put("Name", "王立昌");
     map.put("util", new UtilObj());
     System.out.println(evaluate("Hello $Name !" +
       "" +
       "  #set ( $dao = $util.getDao(\"cms\") )  \n"+
       "  #set ( $sql = \"select * from News_tab  order by NewsId desc limit 10  \")  \n"+
       "  #set ( $className = \"com.jh.app.tag.app.News\")  \n"+
       "     #set ( $clazz = $util.classForName($className) )  \n" +
       "         $sql \n"+
       "     #set ( $list = $dao.getObjList( $sql,$clazz))      \n"+
       "     #foreach( $obj in $list )  \n"+
       "      $obj.Title \n"+
       "  #end \n"+
       "       \n"
      
       ,map,"test"));
    }


 public static String evaluate(String vmText, Map map, String logTag)
 {
  
  System.err.println("########################");
  System.err.println(vmText);
  System.err.println("########################");
  StringWriter w = new StringWriter();
  VelocityContext context = new VelocityContext();
  if (map != null)
  {
   java.util.Iterator it = map.keySet().iterator();
   while (it.hasNext())
   {
    Object obj = it.next();
    if (obj instanceof String)
     context.put((String) obj, map.get(obj));
   }
  }

  try
  {
   velocity().evaluate(context, w, logTag, vmText);
  }
  catch (ResourceNotFoundException e)
  {
   //该处理是为了避免包含的文档不存在而做的处理.
   String msg = "org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource ";
   String str = e.toString();
   if (str.indexOf(msg) < 0)
    return "";
   str = str.replaceAll(msg, "");
   str = str.replaceAll("'", "");
   String fileName = GLOBLE_VM_PATH + "/" + str;
   writeStrFile(fileName, "");
   return evaluate(vmText, map, logTag);
  }  
  catch (Exception e)
  {
   e.printStackTrace();
  }
  return w.toString();
 }

 public synchronized static boolean writeStrFile(String strFileName, String strContent)
 {
  if (strFileName.trim().equals(""))
   return true;

  int indx = strFileName.lastIndexOf("/");
  if (indx >= 0)
  {
   String strDir = strFileName.substring(0, indx);
   File f = new File(strDir);
   if (!f.exists())
    f.mkdirs();
  }
  
  try
  {
   FileOutputStream fos = new FileOutputStream(strFileName);
   try
   {
    OutputStreamWriter o = new OutputStreamWriter(fos, "GBK");
    o.write(strContent);
    fos.flush();
    o.close();
   }
   finally
   {
     fos.close();
   }
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  
  return true;
 }

 public static String mergeVM(String vmFile, Map map)
 {
  StringWriter w = new StringWriter();
  VelocityContext context = new VelocityContext();
  if (map != null)
  {
   java.util.Iterator it = map.keySet().iterator();
   while (it.hasNext())
   {
    Object obj = it.next();
    if (obj instanceof String)
     context.put((String) obj, map.get(obj));
   }
  }
  try
  {
   velocity().mergeTemplate(vmFile, context, w);
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  return w.toString();
 }

}

分享到:
评论

相关推荐

    velocity中文文档 教程

    2. **高效性能**: Velocity在编译时生成Java源码,执行效率高。 3. **良好的分离**:通过VTL,可以实现表现层和业务逻辑的彻底分离,提高代码的可维护性。 4. **强大的社区支持**:由于Apache的背景,Velocity有...

    velocity中文

    Velocity的性能优化包括合理设置缓存策略、避免在模板中执行复杂逻辑以及优化VTL表达式。理解 Velocity的内部工作原理,例如模板加载机制和指令处理流程,可以帮助我们更好地优化性能。 总之,Velocity是一个强大的...

    Velocity_中文手册

    在MVC模式下,Velocity允许界面设计人员专注于页面的显示效果,而Java程序开发人员则可以专注于业务逻辑编码,从而实现了前后端的分离。这种分离有助于维护网站的长期发展,为程序员和设计师之间的协作提供了便利,...

    velocity 中文开发文档

    - **变量 (Reference)**:变量是一种参考类型,在 Velocity 中用来引用 Java 代码中定义的对象或其他 VTL 语句的值。变量以 `$` 字符开头。 - **示例**:`&lt;html&gt;&lt;body&gt;Hello $customer.Name!&lt;/body&gt;&lt;/html&gt;`。在这个...

    velocity的所有jar包

    在Velocity中,它可能被用来增强数据结构的操作,如集合的排序、过滤或转换。 2. **velocity-1.4.jar**:这是Velocity的主要库文件,包含了 Velocity Engine的核心实现。它负责解析模板,执行嵌入的Java代码,并...

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

    在Web开发中,Velocity 提供了Velocity Template Language(VTL),使得页面设计人员可以专注于页面布局和样式,而Java程序员则处理业务逻辑。例如,在一个在线MUD商店的场景中,Velocity 可以根据用户的购买历史...

    velocity的jar包

    2. **模板语言**:Velocity模板语言(VTL)是 Velocity 的核心,它允许开发者在模板中嵌入Java代码,但不直接执行Java代码,而是通过VelocityEngine编译并执行。 3. **上下文(Context)**:Velocity中的Context对象...

    Velocity用户手册(中文)

    3. **高性能**: 由于Velocity在编译时将模板转换为Java源代码,运行时执行的是已编译的Java代码,因此其性能表现优秀。 4. **可扩展性**: Velocity支持自定义指令和宏,可以轻松地扩展功能以满足特定需求。 5. **...

    velocity-1.7.jar

    在1.7版本中,Velocity提供了一种简洁、高效的模板语言,使得非程序员(如内容创作者)也能方便地修改页面布局,而程序员则负责处理数据和业务逻辑。 **核心概念和特点:** 1. **模板语言**:Velocity使用自己的...

    Velocity中文指南

    Velocity的核心优势在于它能够将Java代码从Web页面中分离,让设计师专注于页面布局与视觉效果,同时让开发者专注于业务逻辑的编写,遵循MVC模式,大大提升了项目的可维护性和开发效率。 #### 二、Velocity的功能与...

    Velocity中文学习指南

    这种能力使得 Velocity 成为了一个强大的工具,在多个场景中发挥着重要作用。 - **Web 开发:** 当 Velocity 应用于 Web 开发时,它支持界面设计师与 Java 程序员同步开发基于 MVC 架构的 Web 站点。页面设计师专注...

    velocity+ssi整合

    整合的关键在于如何在Velocity中解析和执行SSI指令。这可能涉及到自定义 Velocity工具或者中间件,使得Velocity引擎能够识别并处理SSI标签,然后将其转换为Velocity语法执行。 例如,我们可以创建一个 ...

    Velocity

    **Velocity**是一个强大的Java模板引擎,它允许开发者将HTML页面中的显示逻辑与业务逻辑分离,使得Web开发更加高效和简洁。Velocity源自Apache软件基金会,是Apache Jakarta项目的一部分,被广泛应用于各类Web应用和...

    Velocity中文手册

    **Velocity** 是一款基于 Java 的模板引擎,它提供了一种简洁高效的语法——**Velocity 模板语言 (VTL)**,用于引用 Java 代码中定义的对象。这使得页面设计者能够专注于页面布局和样式,而 Java 开发人员则负责业务...

    struts2整合velocity

    Velocity模板语言(VTL)允许开发者在模板中插入Java表达式,但模板本身并不执行Java代码,而是由Velocity引擎解析并执行。这样做的好处是提高了安全性,降低了模板被恶意修改的风险。Velocity支持控制结构(如if、...

    velocity入门使用教程

    - **MVC模式的应用**:Velocity遵循MVC设计模式,Model负责业务逻辑,View负责展示,Controller则将两者关联起来,Velocity主要关注View部分。 - **自定义指令(Custom Directives)**:如果内置的指令不能满足需求...

    SpringBoot Velocity 代码生成模板

    SpringBoot集成Velocity代码生成模板是现代Java开发中的一个重要工具,它极大地提高了开发效率,尤其是在处理大量数据表映射到业务层代码时。Spring Boot作为一款轻量级的框架,简化了初始化和配置过程,而Velocity...

    JAVA的Velocity语法学习

    5. 调试和错误处理:使用Velocity的`#debug`指令可以帮助调试模板,查看变量的状态和执行流程。 ** 学习资源 ** 提供的《Velocity_java开发指南》和《Java的模板引擎Velocity初体验》两本书籍是学习Velocity的好...

    Velocity语法以及整合struts2总结

    3. **Action类处理**:Action类中需要定义业务逻辑,返回的数据可以通过getter和setter方法供Velocity模板访问。 **三、Velocity基本语法** 1. **引用变量**:在Velocity模板中,可以使用`${variable}`来引用Java...

Global site tag (gtag.js) - Google Analytics