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