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+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>&nbsp;</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);   } }