利用freemarker來生成html文件

在咱們作門戶型網站的時候,我經常對那些讀取很頻繁的數據實現頁面靜態化,這樣能夠大大下降對數據庫的操做;可是對於一些不常變化的數據,咱們經常用的是緩存來作優化,
 
這樣比起靜態頁面的速度還要快,這裏我主要說一下使用freemarker來如何生成html頁面
 
1:首先把相關的jar文件考到lib目錄中
 
2:編寫咱們生成html的工具類  這裏爲了方便我直接用一個內部類把對freemarker的相關參數設置好
 
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
 
import com.jun.oa.beans.PublicMessage;
 
import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
/**
 * 利用freemarker模板生成html靜態頁面
 * @author liuwenjun
 * @time 4:19:55 PM
 */
public class FreeMarkerBuildHtmlFile {
 /**
  * 爲message提供生成靜態頁面的方法
  * @param message 公共信息實體類
  * @param saveDir 保存文件路徑
  */
 public static void createPubMessageHtml(PublicMessage message, File saveDir){
  try {
   if(!saveDir.exists()) saveDir.mkdirs();
   Configuration cfg = FreeMarkerManager.getConfiguration();
   Template template = cfg.getTemplate("message/messageview.ftl");
   FileOutputStream outStream = new FileOutputStream(new File(saveDir, message.getId()+".html"));
   OutputStreamWriter writer =  new OutputStreamWriter(outStream,"GBK");
   BufferedWriter sw = new BufferedWriter(writer);
   Map<String, PublicMessage> rootMap = new HashMap<String, PublicMessage>();
   rootMap.put("message", message);
   //模板引擎解釋模板
   template.process(rootMap, sw);
   sw.flush();
   sw.close();
   outStream.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
}
 
class FreeMarkerManager {
 
 private static Configuration cfg = new Configuration();
 
 static {
  //定義模板的位置,從類路徑相對FreeMarkerManager所在的模板加載路徑
  cfg.setTemplateLoader(new ClassTemplateLoader(FreeMarkerManager.class,"/ftl"));
  
  //設置對象的包裝器
  cfg.setObjectWrapper(new DefaultObjectWrapper());
  
  //設置異常處理器
  //這樣的話就能夠${a.b.c.d}即便沒有屬性也不會出錯
  cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
 }
 
 public static Configuration getConfiguration() {
  return cfg;
 }
}
 
3:編寫咱們模版文件ftl  message.ftl
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<style>
.tdEditTitle{
 font-size: 12px;
 color: #003366;
 FONT-WEIGHT: bold;
 BACKGROUND-COLOR: #E6F5FC;
 text-align:center;
 height:24px;
}
.tableEdit{
 background-color:white;
}
.MyButton{
 BORDER-RIGHT: #707070 1px solid; 
 PADDING-RIGHT: 2px; 
 BORDER-TOP: #707070 1px solid; 
 PADDING-TOP: 2px; 
 BORDER-LEFT: #707070 1px solid;
 PADDING-LEFT: 2px; 
 BORDER-BOTTOM: #707070 1px solid
 FONT-SIZE: 12px;  
 CURSOR: hand; 
 COLOR: black; 
}
</style>
<title>公共信息明細</title>
</head>
<body>
<center>
<TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:580px;">
 <TBODY>
  <TR>
   <!-- 這裏是添加、編輯界面的標題 -->
   <td align="center" class="tdEditTitle">${message.title}</TD>
  </TR>
  <TR>
   <td>
   <!-- 主輸入域開始 -->
 
<table class="tableEdit" style="width:580px;" cellspacing="0" border="0" cellpadding="0">
 <tr>
  <td colspan="3" align="left">${message.content }
  </td>
 </tr>
</table>
   <!-- 主輸入域結束 -->
   </td>
  </TR>
 </TBODY>
</TABLE>
 
<TABLE>
  <TR align="center">
   <TD colspan="3" bgcolor="#EFF3F7">
   <input type="button" class="MyButton"
    value="關閉窗口" onclick="window.close()">
   </TD>
  </TR>
</TABLE>
</center>
</body>
</html>
 
4:咱們在咱們相關的添加修改刪除的action中作一下數據的填充就能夠了
相關文章
相關標籤/搜索