JAVAテンプレート技術
9852 ワード
/************
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+BEGIN ” + handle + “\\s+–>([\\s\\S.]*)<!–\\s+END ” + handle + “\\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\
\\}]+\\}”);
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(“<b>Halted.</b>”);
//System.exit(0);
}
}
private void haltmsg(String msg)
{
System.out.println(“<b>Template Error:</b>
“+msg+” <br>
”);
}
}
/***************** index.html **********************/
<html>
<head>
<meta
HTTP-EQUIV=”Content-Type” CONTENT=”text/html; charset=GBK”></meta>
<title>untitled1</title>
</head>
<body>
<P>{HEAD}</P>
<P>{CONTENT}{UNDEFINED}</P>
<table cellspacing=”2″
cellpadding=”3″ border=”1″ width=”100%”>
<!– BEGIN BROW –>
<tr>
<!– BEGIN BCOL –>
<td>{NUMBER}</td>
<!– END BCOL –>
</tr>
<!– END BROW –>
</table>
<P> </P>{FOOT}
</body>
</html>
/******************
head.html *************************/
<html>
<head>
<meta
HTTP-EQUIV=”Content-Type” CONTENT=”text/html;
charset=GBK”></meta>
<title>untitled1</title>
</head>
<body> ,{NAME}
</body>
</html>
/*******************
foot.html *************************/
<html>
<head>
<meta
HTTP-EQUIV=”Content-Type” CONTENT=”text/html;
charset=GBK”></meta>
<title>untitled1</title>
</head>
<body> :{COMPANY}
</body>
</html>
/********************
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);
}
}