`
coconut_zhang
  • 浏览: 541755 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Freemarker网站静态化的实现(转载)

 
阅读更多

 做程序也做了将近4年时间了,从来没有发过什么技术性的文章,今天发一个只在大家一起共同学习进步,如有错误地方请指正。 
   最近自己做了一个做网络广告的网站叫全方位商机平台的项目,由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态jsp页面的话那么数据库查询将是巨大的开销,会导致首页访问速度的下降。于是考虑将这个首页全部静态化。参考地址:http://www.361pt.com/。首页的速度是非常快的。 
   整个网站才用struts2 + spring + hibernate + freemarker + urlrewrite完成。首页纯静态化,频道及其他页面通过urlrewrite伪静态。现在废话少说。我先给出首页jsp body源代码: 

01 <body>
02 <div id="wrap">
03     <!--头部开始-->
04     <jsp:include page="/html/top.html" flush="true"></jsp:include>
05     <!--头部结束-->
06     <!--导航开始-->
07     <jsp:include page="/html/channel.html" flush="true"></jsp:include>
08     <!--导航结束-->
09     <jsp:include page="/html/center.html" flush="true"></jsp:include>
10     <!--友情连接开始-->
11     <jsp:include page="/html/index_link.html" flush="true"></jsp:include>
12     <!--友情结束-->
13     <!--底部开始-->
14     <jsp:include page="/html/bottom.html" flush="true"></jsp:include>
15     <!--底部结束-->
16 </div>
17 </body>

整个网站首页的基本结构是通过jsp的include标签将所有通过freemarker生成的静态页面组织起来。后台控制各个部分的静态页生成。这样做将首页进行了拆分,便于了静态页面的维护,当我们需要生成“友情链接”部分的时候就只生成友情链接部分,而不需要将整个页面都从新生成一次。 
   以下是我生成静态页最核心的方法,使用freemarker。 

01      /**
02  * 生成静态页面主方法
03  * @param context ServletContext
04  * @param data 一个Map的数据结果集
05  * @param templatePath ftl模版路径
06  * @param targetHtmlPath 生成静态页面的路径
07  */
08 public static void crateHTML(ServletContext context,Map<String,Object> data,String templatePath,String targetHtmlPath){
09     Configuration freemarkerCfg = new Configuration();
10     //加载模版
11     freemarkerCfg.setServletContextForTemplateLoading(context, "/");
12     freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
13     try {
14         //指定模版路径
15         Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8");
16         template.setEncoding("UTF-8");
17         //静态页面路径
18         String htmlPath = context.getRealPath("/html")+"/"+targetHtmlPath;
19         File htmlFile = new File(htmlPath);
20         Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
21         //处理模版
22         template.process(data, out);
23         out.flush();
24         out.close();
25     } catch (Exception e) {
26         e.printStackTrace();
27     }
28 }

其实很简单,只要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文件。友情链接数据来源通过数据库查询获取。 
然后再写一个方法专门生成友情链接静态页面: 

1      /**
2  * 生成友情链接的静态页index_link.html
3  * @param context
4  * @param data
5  */
6 public static void createIndexFriendLink(ServletContext context,Map<String,Object> data){
7     crateHTML(context,data,"index_link.ftl","index_link.html");
8 }

此方法调用上面的createHTML方法。 
然后根据以上方法我们就可以再Struts2的action里面从数据库查询数据放入map调用createIndexFriendLink()方法生成静态页了。 
这是action中的一个方法: 

01      /**
02  * 生成友情链接静态页index_link.html
03  * @return
04  */
05 public String createLink(){
06     //权限验证
07     if(! this.isAccess())
08         return "error";
09     try{
10         //得到友情链接
11         List links = friendLinkDAO.findAll();
12         //准备数据
13         HashMap<String,Object> data = new HashMap<String,Object>();
14         data.put("links", links);
15         //调用静态页面方法
16         HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data);
17         addActionMessage("静态页面生成成功!");
18         return "message";
19     }catch(Exception e){
20         e.printStackTrace();
21         return "failure";
22     }
23 }

List links = friendLinkDAO.findAll();通过spring注入action的hiberate DAO获取数据给list然后通过以下代码 
HashMap<String,Object> data = new HashMap<String,Object>(); 
data.put("links", links); 
准备数据调用createIndexFriendLink()方法。 
以下是:ftl模版源码: 

01 <#if links?size != 0>
02 <div class="link">
03         <strong>友情链接:</strong>
04         <#list links as link>
05         <a href="${link.linkUrl}" target="_blank" title="${link.linkName}">${link.linkName}</a>
06         </#list>
07 </div>
08 <#else>
09 <div class="link"></div>
10 </#if>

这样友情链接静态页就生成了。然后其他静态页依此葫芦画瓢。 

总结:虽然静态页访问速度快,但实现起来毕竟还是比较麻烦了,维护也是一个麻烦事情。如果您的站点更新速度快那么就需要在你的后台数据更新部分调用相应的createHTML方法实时的生成静态页面。如果更新速度不慢可以在后台手动更新或者利用操作系统的定时任务功能去执行你的静态页面生成程序。www.361pt.com这个网站我是采用了这两种方式。

分享到:
评论

相关推荐

    Freemarker网站静态化的实现实例源码(eclipse)

    5. **静态化实现步骤**: - 数据准备:构建数据模型,这可以是数据库查询结果或者由Java服务提供的任何动态数据。 - 模板渲染:使用Freemarker API加载模板文件,结合数据模型生成HTML字符串。 - 文件写入:将...

    httpclient,freemarker的静态化分页

    本项目利用了`httpclient`与`freemarker`这两个工具来实现静态化的分页功能。下面将详细阐述这两个工具以及它们在静态化分页中的应用。 首先,`httpclient`是Apache的一个开源HTTP客户端库,它提供了丰富的API,...

    freemarker权威版 网站静态化

    在网站静态化的过程中,Freemarker扮演着关键角色。通过将动态数据注入到预定义的模板中,它能够生成HTML或其他静态格式的文件,从而极大地提高了网站的访问速度,减轻了服务器的负担。 在网站静态化时,Freemarker...

    struts1.2+freemarker实现登录成功页面静态化例子

    总结来说,这个例子展示了如何结合Struts1.2和Freemarker2.3.8实现登录成功页面的静态化,通过静态化可以提高网站性能,减轻服务器负担,提升用户体验。在实际开发中,开发者可以根据项目需求灵活运用这些技术和策略...

    freemarker把jsp静态化简单应用

    通过以上步骤,你就可以在MyEclipse中使用FreeMarker实现JSP页面的静态化。记住,良好的分层设计和模板使用习惯能显著提高代码质量,使项目更加易于维护和扩展。继续深入学习FreeMarker的高级特性,你将能够更高效地...

    ssh+FreeMarker静态化网页例子

    ssh+FreeMarker静态化网页例子

    Jsp页面静态化(freemarker)教程及源码

    前台页面的静态化就有利于SEO,所以这个问题摆在了我的面前,在网上一搜,关于这方面的资料不是很多,又很杂,关于这方面的知识,越来或多的程序员将会碰到,原来项目中这部分静态化的功能主要由我来做的,现在我将...

    freemarker生成静态html示例

    本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....

    Struts2整合Freemarker生成静态页面

    8. **静态页面生成**:整合Struts2和Freemarker的一个常见应用是生成静态页面,提高网站性能。这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和...

    freemarker生成静态网页

    Freemarker是一个强大的模板...在实际项目中,还可以利用Freemarker的条件语句、循环结构、宏等高级特性,实现更复杂的逻辑和布局。总的来说,Freemarker提供了一种强大且灵活的方式,让开发者可以高效地生成静态内容。

    Freemarker创建静态页面TOOLS

    创建静态页面工具类,需要Freemarker的支持

    SpringBoot2 整合FreeMarker模板,完成页面静态化处理.docx

    通过SpringBoot2和FreeMarker的整合,我们可以构建高效的静态化系统,提升网站性能,同时降低服务器负载,为用户提供更好的浏览体验。在实际项目中,应根据具体需求选择合适的静态化策略,平衡性能、实时性和维护...

    struts2+freemarker 生成静态页面

    总之,“struts2+freemarker 生成静态页面”是一个旨在提升Web应用性能的技术实践,通过结合Struts2的MVC框架和FreeMarker的模板引擎,实现了动态内容到静态HTML的转化,为用户提供更快的加载速度和更好的浏览体验。...

    网页静态化例程 网站静态化学习的第一步

    综上所述,实现网站静态化是一个涉及前端模板引擎、后端编程、数据库操作以及URL重写等多个环节的过程。通过这个"网页静态化例程"的学习,你可以掌握基本的静态化技术,为构建高性能、易搜索的网站奠定基础。而...

    springmvc 实现i18n国际化+freemarker小实例demo

    下面将详细解释如何在Spring MVC项目中实现i18n,并提供一个Freemarker的小实例。 **1. i18n的概念** i18n代表“国际化”,这里的数字18代表'i'和'n'之间的字母数量。它的目标是设计应用程序,使其能够轻松地适应...

    springboot整合freemarker生成静态html的demo.zip

    在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...

    教你如何用FreeMarker生成静态页面.doc

    4. 初始化`Configuration`对象,这是FreeMarker的核心配置类,用于管理模板的加载和解析。 5. 使用`setDirectoryForTemplateLoading`设置模板文件所在的目录,并加载模板。 6. 使用`setObjectWrapper`设置对象包装器...

    freemarker生成静态HTML例子

    Freemarker是一个强大...通过上述步骤和示例,你可以了解并实现使用Freemarker生成静态HTML的基本过程。在实际开发中,这个功能可以用于构建静态站点、邮件模板或者API文档等场景,极大地提高了代码的可维护性和效率。

    java Freemarker页面静态化实例详解

    在实际项目中,通过结合Java和Freemarker,开发者可以构建出高效、灵活的静态化解决方案,提升网站性能。 总结起来,Java中的Freemarker页面静态化实例详解主要涉及Freemarker的基本用法、数据格式化以及处理空值的...

Global site tag (gtag.js) - Google Analytics