【java工具类】对velocity的封装

下面是对velocity的封装,参考了这篇文章:

http://kodak-zhou.iteye.com/blog/970682


【VelocityHelper】

package Easis.ViewEngine;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Properties;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

public class VelocityHelper {
private String _tplRoot="";
private VelocityContext _context=new VelocityContext();

    public VelocityContext getVelocityContext(){
        return _context;
    }

    public void clear(){
        _context=new VelocityContext();

    }


 public VelocityHelper(String tplRootPath){
     _initialization("utf-8", "utf-8", tplRootPath);
 }

    public VelocityHelper(String input_encoding,String output_encoding,String tplRootPath){
        _initialization(input_encoding, output_encoding, tplRootPath);
    }

    public boolean put(String key,Object value){
        if(_context.containsKey(key)==true){
            _context.remove(key);
            _context.put(key,value);
        }
        else{
            _context.put(key,value);
        }
        return true;
    }

    public boolean remove(String key){
        if(_context.containsKey(key)==false){
            return false;
        }
        _context.remove(key);
        return true;
    }


private void _initialization(String input_encoding,String output_encoding,String tplRootPath){
        /* first, we init the runtime engine.  Defaults are fine. */
    this._tplRoot=tplRootPath==null?"":tplRootPath;
    Properties p = new Properties();
    //设置输入输出编码类型。和这次说的解决的问题无关
    p.setProperty(Velocity.INPUT_ENCODING, input_encoding);
    p.setProperty(Velocity.OUTPUT_ENCODING, output_encoding);
    //这里加载类路径里的模板而不是文件系统路径里的模板
    p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
    //也可以用下面方法指定一个绝对路径,不过这样要求你所有的模板都放在该路径下,是有局限的
    //p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "模板路径");
    try
    {
        Velocity.init(p);
    }
    catch(Exception e)
    {
        System.out.println("Problem initializing Velocity : " + e );
        e.printStackTrace();
        return;
    }

}
    public String parseTempalte(String tplName,String encoding){
        try{
            String tplroot_and_tplName="";
            if(_tplRoot.trim().length()>0){
               tplroot_and_tplName=_tplRoot.trim()+"/"+tplName.trim();

            }
            else{
            tplroot_and_tplName=tplName.trim();    }
            tplroot_and_tplName=tplroot_and_tplName.replaceAll("/+","/");
            StringWriter sw=new StringWriter();
            Velocity.mergeTemplate(tplroot_and_tplName,encoding,_context,sw);
            String res=sw.toString();
            sw.close();
            return res;

        }
        catch (Exception e){

            return e.toString();
        }


    }
    public String evaluate(String velocityTplStrContent){
        try{
            StringWriter sw=new StringWriter();

            Velocity.evaluate(_context,sw,"Use the velocity as str replacer.",velocityTplStrContent);


            String res=sw.toString();
            sw.close();
            return res;

        }
        catch (Exception e){

            return e.toString();
        }


    }





}

【如何使用?】

模板文件放在src下面的tpl,名称为:test.vm,里面就一句话。

okkkkkk



package TestCase;
import Easis.ViewEngine.VelocityHelper;
public class testVelocityHelper {

    public static void main(String[] args){
        VelocityHelper  _ve=new VelocityHelper("/tpl");
        String str1= _ve.parseTempalte("test.vm","utf-8");
        System.out.println(str1);

    }
}



算起来,freemarker我封装了,velocity我封装了,javascript的encodeURI encodeURIComponent我参考其他人实现了,数据库连接池直接用网上,properties文件读写也封装了,html的解码编码形式:8xxx̕也完成,仿照asp.net的datatable,datacolumn,datarow也完成,对http协议的字符解析与参数,文件上传解析也完成,

最近做的工具也算很多了。

下一篇将描述如何编写自己的代码生成器,附带源代码及生成器采用的模板一份。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值