|
天生静态页最核心的方法,使用freemarker:
/**
* 天生静态页面主方法
* @param context ServletContext
* @param data 一个Map的数据结果集
* @param templatePath ftl模版路径
* @param targetHTMLPath 天生静态页面的路径
*/
publicstaticvoid crateHTML(ServletContext context,Map<String,Object> data,String templatePath,String targetHtmlPath){
Configuration freemarkerCfg =new Configuration();
//加载模版
freemarkerCfg.setServletContextForTemplateLoading(context, "/");
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
try {
//指定模版路径
Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8");
template.setEncoding("UTF-8");
//静态页面路径
String htmlPath = context.getRealPath("/html")+"/"+targetHtmlPath;
File htmlFile =new File(htmlPath);
Writer out =new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
//处理模版
template.process(data, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
实在很简朴,只要Google一下就有良多这方面的代码。我也是Google的代码然后自己再根据实际情况修改。简朴说明一下参数:
ServletContext :这个不用说了吧。做Java Web的应该都知道,只不外struts2中这样获取ServletActionContext.getServletContext()
Map<String,Object> data : 模版的数据来源。freemarker通过一个Map给ftl模版送数据。
现在已友情链接为列子具体先容静态页面如何天生。其他模块以此类推。
String templatePath : ftl所在的路径。我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。
String targetHtmlPath : 最后天生静态页的路径:我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。
友情链接根据这段代码<jsp:include page="/html/index_link.html" flush="true"></jsp:include>我们需要freemarker天生一个index_link.html文件。友情链接数据来源通过数据库查询获取。
然后再写一个方法专门天生友情链接静态页面:
/**
* 天生友情链接的静态页index_link.html
* @param context
* @param data
*/
publicstaticvoid createIndexFriendLink(ServletContext context,Map<String,Object> data){
crateHTML(context,data,"index_link.ftl","index_link.html");
}
此方法调用上面的createHTML方法。
然后根据以上方法我们就可以再Struts2的action里面从数据库查询数据放入map调用createIndexFriendLink()方法天生静态页了。
这是action中的一个方法:
/**
* 天生友情链接静态页index_link.html
* @return
*/
public String createLink(){
//权限验证
if(!this.isAccess())
return"error";
try{
//得到友情链接
List links = friendLinkDAO.findAll();
//预备数据
HashMap<String,Object> data =new HashMap<String,Object>();
data.put("links", links);
//调用静态页面方法
HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data);
addActionMessage("静态页面天生成功!");
return"message";
}catch(Exception e){
e.printStackTrace();
return"failure";
}
}
List links = friendLinkDAO.findAll();通过spring注入action的hiberate DAO获取数据给list然后通过以下代码
HashMap<String,Object> data = new HashMap<String,Object>();
data.put("links", links);
预备数据调用createIndexFriendLink()方法。
以下是:ftl模版源码:
<#if links?size !=0>
<div class="link">
<strong>友情链接:</strong>
<#list links as link>
<a href="${link.linkUrl}" target="_blank" title="${link.linkName}">${link.linkName}</a>
</#list>
</div>
<#else>
<div class="link"></div>
</#if>
这样友情链接静态页就天生了。然后其他静态页依此葫芦画瓢。
总结:固然静态页访问速度快和其他的好处,但实现起来究竟仍是很麻烦了,维护也是一个麻烦事情。假如您的站点更新速度快那么就需要在你的后台数据更新部门调用相应的createHTML方法实时的天生静态页面。假如更新速度不慢可以在后台手动更新或者利用操纵系统的定时任务功能去执行你的静态页面天生程序 |
|