Freemarker网站静态化实现
转载自http://www.iteye.com/topic/407756
做程序也做了将近4年时间了,从来没有发过什么技术性的文章,今天发一个只在大家一起共同学习进步,如有错误地方请指正。
最近自己做了一个做网络广告的网站叫全方位商机平台的项目,由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态jsp页面的话那么数据库查询将是巨大的开销,会导致首页访问速度的下降。于是考虑将这个首页全部静态化。参考地址:http://www.361pt.com/。首页的速度是非常快的。
整个网站才用struts2 + spring + hibernate + freemarker + urlrewrite完成。首页纯静态化,频道及其他页面通过urlrewrite伪静态。现在废话少说。我先给出首页jsp 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>
/** * 生成静态页面主方法 * @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();}}
/** * 生成友情链接的静态页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");}
/** * 生成友情链接静态页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";}}
<#if links?size != 0><div target="_blank" title="${link.linkName}">${link.linkName}</a></#list></div><#else><div class="link"></div></#if>