`

通用大型网站页面静态化解决方案一(非原创)

 
阅读更多

 

    转自:http://chinaxxren.iteye.com/blog/793763

 

最近自己做了一个做网络广告的网站叫全方位商机平台的项目,由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态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方法实时的生成静态页面。如果更新速度不慢可以在后台手动更新或者利用操作系统的定时任务功能去执行你的静态页面生成程序。

分享到:
评论

相关推荐

    通用大型网站页面静态化解决方案

    以下,我们将详细探讨通用大型网站页面静态化解决方案中涉及的知识点。 首先,文件服务器与静态页面的映射关系是页面静态化的一个重要方面。在处理多个文件服务器的读写操作时,通常需要一个机制来决定哪个静态文件...

    大型站点网站静态化实现方案

    以下是对这个大型站点网站静态化实现方案的详细解读。 1. **静态化原理**: 静态化是将动态网页转化为HTML静态页面的过程,这样用户在访问时不再需要通过服务器执行脚本,而是直接读取已经生成的HTML文件,大大...

    生成静态页面技术解决方案

    生成静态页面技术解决方案 生成静态页面技术解决方案...生成静态页面技术解决方案是一种有效的技术手段,可以提高网站的访问速度和减少服务器的负载量。它可以应用于新闻发布系统、博客系统、电子商务系统等多种场景。

    动态页面静态化汇总--页面静态化方案

    动态页面静态化是一种提高网站性能和搜索引擎友好度的技术手段,主要通过将原本由服务器动态生成的HTML页面转换为预先生成的静态HTML文件。这样,用户请求时,服务器无需执行数据库查询和其他复杂操作,而是直接返回...

    .net页面静态化

    .NET页面静态化是一种提高网站性能和搜索引擎优化(SEO)的技术,它通过将动态网页转换为HTML文件存储在服务器上,从而减少服务器处理时间并减轻数据库负载。这种技术尤其适用于那些内容相对固定、更新频率不高的...

    ASP.NET页面静态化,伪静态化

    3. 使用第三方库,如NHaml、NWebsec等,提供页面静态化的解决方案。 **伪静态化** 伪静态化是通过URL重写技术,让动态URL在不改变其功能性的情况下,展示为静态化的形式。在ASP.NET中,可以使用`UrlRewrite`模块...

    c# 页面静态化软件

    总的来说,C# 页面静态化软件为开发者提供了一种工具,帮助他们轻松实现动态网站的静态化,以提升网站性能和用户体验。同时,它也是SEO策略的重要组成部分,有助于提升网站在搜索引擎中的排名。对于运营大型动态网站...

    有关Java页面静态化

    Java页面静态化是一种提高Web应用性能的技术,它通过将动态生成的HTML页面转换为静态HTML文件,从而减少了服务器处理请求的负担,加快了用户访问速度。这种技术在高并发、大数据量的网站中尤其重要,因为它能显著...

    java 页面静态化

    Java页面静态化是一种提高网站性能的技术,它将动态生成的网页转换为静态HTML文件,以减少服务器处理和数据库查询的时间,提升用户体验。这种技术在高访问量、数据更新不频繁的网站中尤其适用。 首先,我们需要理解...

    一个静态化的例子(利用模板生成静态化页面)

    在IT行业中,静态化是一种常见的优化网站性能的技术。它涉及到将动态生成的网页转换为静态HTML文件,以便用户可以直接从服务器获取,而无需通过复杂的服务器端脚本处理。这种技术可以显著提高页面加载速度,减轻...

    java JSP页面静态化总结_动态页面变为静态页面以减少访问数据库的次数提高速度.zip

    - 在大型网站和电子商务平台中,静态化技术被广泛应用于新闻、产品列表等频繁访问且内容相对固定的页面。 - 对于SEO优化的需求,如博客、论坛等,静态化也是常见选择。 总之,JSP页面静态化是一种有效的优化手段...

    网站架构(页面静态化_图片服务器分离_负载均衡)方案全解析

    页面静态化是一种提高网站访问速度的有效手段。通过将动态生成的内容转换为静态HTML页面,可以减少服务器处理请求的时间,从而显著提升用户体验。对于那些需要频繁更新的网站,如新闻门户或社区论坛,使用内容管理...

    通用首页静态化工具-可以把首页转化为静态页面

    总的来说,“通用首页静态化工具”是针对动态首页优化的一种解决方案,它可以帮助提高网站性能和SEO效果,但需要根据实际需求和环境进行合理配置和使用。在使用该工具前,应确保服务器环境支持所需的技术,并了解其...

    php页面静态化

    PHP页面静态化是一种常见的优化网站性能的技术,它将动态生成的网页内容转化为静态HTML文件,以便浏览器可以直接加载,而无需每次请求时都执行PHP脚本和查询数据库。这样可以显著提高页面加载速度,减轻服务器负担,...

    页面静态化处理

    综上所述,页面静态化处理对于提升网站性能和用户体验具有重要意义,而静态化CMS则为此提供了便利的解决方案。开发者在设计和实施时,应充分考虑各种因素,选择适合的静态化策略和技术,以实现最佳效果。

    asp.net 动态页面静态化

    ASP.NET动态页面静态化是一种优化网站性能的技术,它将原本由服务器实时生成的动态网页转换为HTML静态页面,从而减少服务器处理和数据库查询的工作量,加快网页加载速度,提高用户体验。这种技术尤其适用于内容更新...

    页面静态化

    页面静态化是Web开发中的一个重要概念,主要目的是提高网站的访问速度和搜索引擎优化(SEO)。在Java Web开发中,页面静态化通常涉及到将动态生成的HTML页面转化为纯HTML文件,以便用户请求时无需通过服务器执行复杂...

    ASP.NET 动态页面静态化

    通过以上介绍,我们可以看到ASP.NET动态页面静态化是一个涉及多方面技术的综合解决方案。正确实施后,不仅可以显著提升网站性能,还能增强用户体验和搜索引擎友好性,是一项值得深入研究的技术。

    springboot页面静态化-Thymeleaf

    在本项目"springboot页面静态化-Thymeleaf"中,我们将探讨如何利用Thymeleaf技术实现Spring Boot应用的页面静态化,并通过一个简单的示例来演示其基本用法。 1. **Thymeleaf简介** Thymeleaf是一个开放源代码的...

Global site tag (gtag.js) - Google Analytics