Freemarker网站静态化的实现

最近自己做了一个做网络广告的网站叫全方位商机平台的项目,由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态jsp页面的话那么数据库查询将是巨大的开销,会导致首页访问速度的下降。于是考虑将这个首页全部静态化。
整个网站才用struts2 + spring + hibernate + freemarker + urlrewrite完成。首页纯静态化,频道及其他页面通过urlrewrite伪静态。现在废话少说。我先给出首页jsp body源代码:
Java代码
<body>
<div id=”wrap”>
<!–头部开始–>
<jsp:include page=”/html/top.html” flush=”true”></jsp:include>
<!–头部结束–>
<!–导航开始–>
<jsp:include page=”/html/channel.html” flush=”true”></jsp:include>
<!–导航结束–>
<jsp:include page=”/html/center.html” flush=”true”></jsp:include>
<!–友情连接开始–>
<jsp:include page=”/html/index_link.html” flush=”true”></jsp:include>
<!–友情结束–>
<!–底部开始–>
<jsp:include page=”/html/bottom.html” flush=”true”></jsp:include>
<!–底部结束–>
</div>
</body>

<body>
<div id=”wrap”>
<!–头部开始–>
<jsp:include page=”/html/top.html” flush=”true”></jsp:include>
<!–头部结束–>
<!–导航开始–>
<jsp:include page=”/html/channel.html” flush=”true”></jsp:include>
<!–导航结束–>
<jsp:include page=”/html/center.html” flush=”true”></jsp:include>
<!–友情连接开始–>
<jsp:include page=”/html/index_link.html” flush=”true”></jsp:include>
<!–友情结束–>
<!–底部开始–>
<jsp:include page=”/html/bottom.html” flush=”true”></jsp:include>
<!–底部结束–>
</div>
</body>

整个网站首页的基本结构是通过jsp的include标签将所有通过freemarker生成的静态页面组织起来。后台控制各个部分的静态页生成。这样做将首页进行了拆分,便于了静态页面的维护,当我们需要生成“友情链接”部分的时候就只生成友情链接部分,而不需要将整个页面都从新生成一次。
以下是我生成静态页最核心的方法,使用freemarker。
Java代码
/**
* 生成静态页面主方法
* @param context ServletContext
* @param data 一个Map的数据结果集
* @param templatePath ftl模版路径
* @param targetHtmlPath 生成静态页面的路径
*/
ublic static void 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();
}

/**
* 生成静态页面主方法
* @param context ServletContext
* @param data 一个Map的数据结果集
* @param templatePath ftl模版路径
* @param targetHtmlPath 生成静态页面的路径
*/
public static void 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文件。友情链接数据来源通过数据库查询获取。
然后再写一个方法专门生成友情链接静态页面:
Java代码
/**
* 生成友情链接的静态页index_link.html
* @param context
* @param data
*/
ublic static void createIndexFriendLink(ServletContext context,Map<String,Object> data){
crateHTML(context,data,”index_link.ftl”,”index_link.html”);

/**
* 生成友情链接的静态页index_link.html
* @param context
* @param data
*/
public static void createIndexFriendLink(ServletContext context,Map<String,Object> data){
crateHTML(context,data,”index_link.ftl”,”index_link.html”);
}

此方法调用上面的createHTML方法。
然后根据以上方法我们就可以再Struts2的action里面从数据库查询数据放入map调用createIndexFriendLink()方法生成静态页了。
这是action中的一个方法:
Java代码
/**
* 生成友情链接静态页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”;
}
}

/**
* 生成友情链接静态页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模版源码:
Java代码
<#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>

<#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方法实时的生成静态页面。如果更新速度不慢可以在后台手动更新或者利用操作系统的定时任务功能去执行你的静态页面生成程序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网站演示:http://qywz.wrzc.net 界面预览:http://down.wrzc.net/qywzwrzcnet.jpg 软件介绍:公司网站管理系统商业版源码下载,中文版免费企业网站管理系统,生成静态html文件的漂亮蓝色风格网页模板免费下载,企业网站模板,公司网站模板下载,公司网页模板,后台地址/admin/Login.asp,后台帐号admin密码为admin 网软志成企业网站管理系统V2030生成HTML静态页面版新增功能: 1.全站使用DIV+CSS排版,极大提升网站速度,更有利于搜索引擎收录数量和网店排名; 2.能在后台自动生成前台静态html网页,提升网站访问速度,兼容目前主流浏览器,提高搜索引擎收录数量和网店排名; 3.全站使用UTF-8国际编码,不管在国内的中文环境还是在国外的英文环境,网站都能正常显示; 4.使用了全新的产品图片浏览效果; 5.新增企业视频广告功能; 6.前后台进行了全新的优和美,更加适合当前主流的高分辨率显示; 7.更新了在线资讯功能,除了QQ增加了MSN,淘宝旺旺,同时都可在后台管理; 8.网站搜索功能进行了整合; 9.首页模板布局做了全新的调整; 10.新增企业地址导航地图; 11.后台新增网站推广功能,更有利于企业网站的排名和收录; 12.对全站进行了SEO优; 13.修复了以往发现的BUG. 网软志成中英文双语企业网站管理系统,生成静态html文件的企业门户网站系统免费下载,后台自动生成前台静态html网页,公司网站主页模板,企业网站首页模板下载,asp生成html的,网软志成企业网站管理系统生成html正式版源码下载,有宣传,介绍,展示,推广,销售公司企业的产品与服务,开展企业网上电子商务业务的,实现营利,是整站系统设计功能的最终目标.可自助建立栏目菜单,可无限制扩展栏目分类的企业网站后台管理系统,咨询服务公司,中介公司,教育公司有限公司,公司注册公司,企业认证,商标专利公司整站代码,金融,保险,中介公司网站系统,维修安装,装饰公司网站asp版本,餐饮公司,展览公司,翻译公司网页模版,会计公司,软件公司网站生成html静态全站程序,公司网站自助建站程序,任意设置的会员级别和浏览权限精确到每条记录,这对于希望不同内容针对不查看对象开放来讲,无疑是最佳解决方案。企业网站智能建站系统,独具创意的其他信息无限扩展栏,对于希望发布固定栏目无法归类的其他信息,将是非常棒的途径。公司门户网站系统,公司网站内容管理系统商业版,完善的网站子模块,如企业简历,企业文,企业新闻,业内资讯,产品展示,下载中心,企业荣誉,营销网络,人才招聘,客户留言,会员中心,充分考虑了公司,企业中英文网站管理系统的通用需求.网软志成提供的企业网站系统是采用全后台管理方式,后台功能齐全,使用维护方便.asp生成html版本,以及php生成html照明工业公司网站管理系统中文版,企业网站管理系统简体版,utf-8国际通用编码的企业网站整站程序,让全世界浏览网站的用户畅通无阻,交通运输企业整站程序,安防公司免费三语版整站程序,包装印刷公司,环保设备,中英文模具加工公司网站繁体商业版下载,服装公司,服饰公司网站免费下载,礼品公司,中文,英文适用的家居用品公司,电子公司网站模板,汽车公司网站系统,最专业的软件公司,多年开发经验,全国知名美工制作模板,标准设计的企业门户网站建站管理系统,完全免费的灯饰企业公司网站源码,安防公司网站模板,生成html的包装公司网站模板,印刷厂网站源码,机床公司网站模板,家居装饰公司网站建设,网软志成企业网站管理系统生成html中文正式版源码下载,妆品网站模板公司网站源码,礼品公司网站模板,DIV+CSS排版的手机公司企业网站管理系统,通讯公司,运动网站模板下载,家电公司网站模板正式版,数码公司网站源码完整版,网络公司网站模板下载,玩具公司网站模板,食品企业公司网站模板下载,办公设置公司网站,冶金矿产企业网站模板无限制版,纺织公司网站模板,农业林业公司网站模板,公司管理系统,政府网站管理系统,公司企业网站管理系统,电脑公司系统下载,个人网站系统,企业网站系统官方网站,asp网站管理系统,asp网站系统,网站生成系统,企业网站内容管理系统源码,网站源码下载无论是生产,销售,还是服务型的大中小型公司,企业的网站管理人员只要会打字,就会建起一个专业的公司,企业网站,随时管理网站内容.当企业信息介绍内容过长,需要多次滚屏时,可以考虑对内容做内分页处理。流量统计信息可以清零重置。信息暂存功能,即对于某些临时不需要发布的内容暂存起来,不用删除,以后重新开放即可。所有前台提交表单防刷新处理,有效过滤垃圾信息提交。此系统是基于asp+mssql技术开发的企业级电子商务平台,运行安全,稳定,快速,全自动、全智能的在线方式管理、维护、更新的企业网站管理系统。提供下载的整站,程序源码,功能完全,欢迎大家下载使用.企业网站管理系统功能将更加完全,真正的能为大家在建设公司,企业网站中带来安全,稳定,高效。 免费网站模板,蓝色公司网站模板,商业网站模板,asp网站模板,公司网站管理系统,网站管理系统,网站系统,企业网站管理系统,免费企业网站模板,企业静态网站模板,中文企业网站模板,优秀企业网站模板,中小企业网站模板,企业网站设计模板,asp企业网站模板,asp企业网站模板,简单企业网站模板,韩国企业网站模板,完善的网站子模块,如企业简历,企业文,企业新闻,业内资讯,产品展示,下载中心,企业荣誉,营销网络,人才招聘,客户留言,会员中心,充分考虑了公司,企业中英文网站管理系统的通用需求.全后台管理方式,后台功能齐全,使用维护方便.无论是生产,销售,还是服务型的大中小型公司,企业的网站管理人员只要会打字,就会建起一个专业的公司,企业网站,随时管理网站内容.提供下载的整站,程序源码,功能完全,欢迎大家下载使用.企业网站管理系统功能将更加完全,真正的能为大家在建设公司,企业网站中带来安全,稳定,高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值