做程序也做了将近4年时间了,从来没有发过什么技术性的文章,今天发一个只在大家一起共同学习进步,如有错误地方请指正。
最近自己做了一个做网络广告的网站叫全方位商机平台的项目,由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态jsp页面的话那么数据库查询将是巨大的开销,会导致首页访问速度的下降。于是考虑将这个首页全部静态化。参考地址:http://www.31pt.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 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 >