在咱們作門戶型網站的時候,我經常對那些讀取很頻繁的數據實現頁面靜態化,這樣能夠大大下降對數據庫的操做;可是對於一些不常變化的數據,咱們經常用的是緩存來作優化, 這樣比起靜態頁面的速度還要快,這裏我主要說一下使用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中作一下數據的填充就能夠了