程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> 利用freemarker來生成html文件

利用freemarker來生成html文件

編輯:J2EE

在我們做門戶型網站的時候,我常常對那些讀取很頻繁的數據實現頁面靜態化,這樣可以大大降低對數據庫的操作;但是對於一些不常變化的數據,我們常常用的是緩存來做優化,

這樣比起靜態頁面的速度還要快,這裡我主要說一下使用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中做一下數據的填充就可以了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved