/************
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);
}
}