java 模板技术_JAVA模板技术

/************

Template.java ****************/

package

com.youngor;

import java.io.*;

import java.util.*;

import java.util.regex.*;

/**

* file:Template.class JAVA模板类

* author:伍子

* website:http://www.54youngor.com

* reference:phplib

*/

public class Template

{

private String

classname=”Template”;

private boolean debug=false;

private HashMap file=new HashMap();

private String root=”";

private HashMap varkeys=new  HashMap();

private HashMap varvals=new  HashMap();

private String

unknowns=”remove”;

private String

halt_on_error=”yes”;

private String last_error=”";

public Template()

{

}

/**

* 设置模板文件根目录

* @param root

*/

public void set_root(String root)

{

if(!is_dir(root))

{

halt(“set_root:”+root+” is not a directory.”);

}

this.root=root;

}

/**

* 设定对未知模板变量的处理办法

* @param unknowns

*/

public void set_unknowns(String

unknowns)

{

this.unknowns=unknowns;

}

/**

* 设定模板文件

* @param handle

* @param filename

*/

public void set_file(String

handle,String filename)

{

file.put(handle,filename(filename));

}

/**

* 设定模板变量

* @param varname

* @param value

*/

public void set_var(String

varname,String value)

{

if(!varkeys.containsKey(varname))

{

varkeys.put(varname,varname(varname));

}

if(!varvals.containsKey(varname))

{

varvals.put(varname,value);

}

else

{

varvals.remove(varname);

varvals.put(varname,value);

}

//System.out.println(varname+”==================”+value);

}

/**

* 设定块变量

* @param parent

* @param handle

* @param name

*/

public void set_block(String

parent,String handle,String name)

{

if(!loadfile(parent))

{

halt(“subst:unable to load

“+parent);

}

if(name==”")

{

name=handle;

}

String str=get_var(parent);

Pattern

p=Pattern.compile(“([\\s\\S.]*)”);

Matcher m=p.matcher(str);

boolean rs=m.find();

String t=m.group(m.groupCount());

set_var(handle,t);

str=m.replaceAll(“\\{“+name+”\\}”);

set_var(parent,str);

}

/**

* 进行变量替换

* @param handle

* @return

*/

public String subst(String handle)

{

if(!loadfile(handle))

{

halt(“subst:unable to load

“+handle);

}

String str=get_var(handle);

Set keys=varkeys.keySet();

Iterator keyIter=keys.iterator();

while(keyIter.hasNext())

{

String key=(String)keyIter.next();

Pattern p=Pattern.compile((String)varkeys.get(key));

Matcher m=p.matcher(str);

str=m.replaceAll((String)varvals.get(key));

}

//System.out.println(handle+”++++++++++++++++++”+str);

return str;

}

/**

* 进行变量复制

* @param target

* @param handle

* @param append

*/

public void parse(String target,String

handle,boolean append)

{

String str=subst(handle);

if(append)

{

set_var(target,get_var(target)+str);

}

else

{

set_var(target,str);

}

}

/**

* 返回替换后的文件

* @param varname

* @return

*/

public String p(String varname)

{

return finish(get_var(varname));

}

/**

* parse()和p()的合并

* @param target

* @param handle

* @param append

* @return

*/

public String pparse(String

target,String handle,boolean append)

{

parse(target,handle,append);

return p(target);

}

/**

* 加载模板文件

* @param handle

* @return

*/

private boolean loadfile(String handle)

{

if(varkeys.containsKey(handle)

&& varvals.get(handle)!=null)

{

return true;

}

if(!file.containsKey(handle))

{

halt(“loadfile:”+handle+” is not a valid handle.”);

return false;

}

String

filename=(String)file.get(handle);

if(!file_exists(filename))

{

halt(“loadfile:while loading

“+handle+”,”+filename+” does not exist.”);

return false;

}

try

{

FileReader fr=new

FileReader(filename);

StringBuffer sb=new

StringBuffer(“”);

int ch=0;

while((ch=fr.read())!=-1)

{

sb.append((char)ch);

}

String s=sb.toString();

if(s==”")

{

halt(“loadfile:while loading

“+handle+”,”+filename+” is empty.”);

return false;

}

fr.close();

set_var(handle,s);

}

catch(Exception e)

{

}

return true;

}

/**

* 获取变量

* @param varname

* @return

*/

private String get_var(String varname)

{

if(varvals.containsKey(varname))

return

(String)varvals.get(varname);

else

return “”;

}

/**

* 判断目录

* @param path

* @return

*/

private boolean is_dir(String path)

{

File dir=new File(path);

if(dir.isDirectory())

return true;

else

return false;

}

/**

* 判断文件

* @param filename

* @return

*/

private boolean file_exists(String

filename)

{

File file=new File(filename);

if(file.isFile())

return true;

else

return false;

}

/**

* 文件名处理

* @param filename

* @return

*/

private String filename(String

filename)

{

if(!file_exists(root+filename))

{

halt(“filename:file

“+filename+” does not exist.”);

}

return root+filename;

}

/**

* 变量名处理

* @param varname

* @return

*/

private String varname(String varname)

{

return “\\{“+varname+”\\}”;

}

/**

* 完成字符串的处理

* @param str

* @return

*/

private String finish(String str)

{

Pattern p=Pattern.compile(“\\{[^ \\t\\r\\n\\}]+\\}”);

Matcher m=p.matcher(str);

if(unknowns==”remove”)

{

str=m.replaceAll(“”);

}

else

if(unknowns==”comment”)

{

str=m.replaceAll(“

Template Variable undefined –>”);

}

else

{

;

}

return str;

}

private void halt(String msg)

{

last_error=msg;

if(halt_on_error!=”no”)

{

haltmsg(msg);

}

if(halt_on_error==”yes”)

{

System.out.println(“Halted.”);

//System.exit(0);

}

}

private void haltmsg(String msg)

{

System.out.println(“Template Error:

“+msg+” 
\n”);

}

}

/***************** index.html **********************/

HTTP-EQUIV=”Content-Type” CONTENT=”text/html; charset=GBK”>

untitled1

{HEAD}

{CONTENT}{UNDEFINED}

cellpadding=”3″ border=”1″ width=”100%”>

{NUMBER}

/******************

head.html *************************/

HTTP-EQUIV=”Content-Type” CONTENT=”text/html;

charset=GBK”>

untitled1

/*******************

foot.html *************************/

HTTP-EQUIV=”Content-Type” CONTENT=”text/html;

charset=GBK”>

untitled1

/********************

AbstractServlet.java ****************/

package

com.youngor;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.PrintWriter;

import java.io.IOException;

public

class AbstractServlet extends HttpServlet

{

private static final String

CONTENT_TYPE = “text/html; charset=GB2312″;

public void init(ServletConfig config)

throws ServletException

{

super.init(config);

}

public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException

{

response.setContentType(CONTENT_TYPE);

process(request,response);

}

public void doPost(HttpServletRequest

request, HttpServletResponse response) throws ServletException, IOException

{

response.setContentType(CONTENT_TYPE);

process(request,response);

}

public void process(HttpServletRequest

request,HttpServletResponse response)throws ServletException,IOException

{

}

}

/**********************

Index.java ***********************/

package

com.youngor;

import java.io.*;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public

class Index extends AbstractServlet

{

public Index()

{

}

public void process(HttpServletRequest

request,HttpServletResponse response)throws ServletException,IOException

{

Template tp=new Template();

String realPath =

getServletConfig().getServletContext().getRealPath(“/”);

tp.set_root(realPath);

//tp.set_unknowns(“keep”);

tp.set_file(“fh”,”tpl/index.html”);

tp.set_file(“head”,”tpl/head.html”);

tp.set_file(“foot”,”tpl/foot.html”);

tp.set_block(“fh”,”BROW”,”row”);

tp.set_block(“BROW”,”BCOL”,”col”);

tp.set_var(“NAME”,”朋友“);

tp.set_var(“CONTENT”,”JAVA模板技术,支持模板嵌套,块操作“);

for(int i=0;i<10;i++)

{

tp.set_var(“col”,”");

for(int j=0;j<10;j++)

{

tp.set_var(“NUMBER”,String.valueOf(i)+String.valueOf(j));

tp.parse(“col”,”BCOL”,true);

}

tp.parse(“row”,”BROW”,true);

}

tp.set_var(“COMPANY”,”youngor-studio”);

tp.parse(“HEAD”,”head”,false);

tp.parse(“FOOT”,”foot”,false);

//tp.parse(“out”,”fh”,false);

String s=tp.pparse(“out”,”fh”,false);

PrintWriter out;

out=response.getWriter();

out.println(s);

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值