首页 > 其他分享 >FreeMarker网站静态化的实现

FreeMarker网站静态化的实现

时间:2023-09-21 15:35:02浏览次数:29  
标签:FreeMarker 静态 生成 网站 html link 友情链接 页面


由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态jsp页面的话那么数据库查询将是巨大的开销,会导致首页访问速度的下降。于是考虑将这个首页全部静态化。

 

整个网站采用struts2 + spring + hibernate + freemarker + urlrewrite完成。首页纯静态化,子站及其他页面通过urlrewrite伪静态。

 

现在废话少说。我先给出首页jsp body源代码:


1. <body>   
2. <div id="wrap">    
3.     <!--头部开始-->   
4. "/html/top.html" flush="true"></jsp:include>    
5.     <!--头部结束-->   
6.     <!--导航开始-->   
7. "/html/channel.html" flush="true"></jsp:include>    
8.     <!--导航结束-->   
9. "/html/center.html" flush="true"></jsp:include>    
10.     <!--友情连接开始-->   
11. "/html/index_link.html" flush="true"></jsp:include>    
12.     <!--友情结束-->   
13.     <!--底部开始-->   
14. "/html/bottom.html" flush="true"></jsp:include>    
15.     <!--底部结束-->   
16. </div>   
17. </body>

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

 



Java代码  


1. /** 
2.   * 生成静态页面主方法 
3.   * @param context ServletContext 
4.   * @param data 一个Map的数据结果集 
5.   * @param templatePath ftl模版路径 
6.   * @param targetHtmlPath 生成静态页面的路径 
7.   */
8. public static void
9. Configuration freemarkerCfg = new
10. //加载模版 
11. freemarkerCfg.setServletContextForTemplateLoading(context, "/");    
12. freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");    
13. try
14. //指定模版路径 
15. "UTF-8");    
16. "UTF-8");    
17. //静态页面路径 
18. "/html")+"/"+targetHtmlPath;    
19. new
20. new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));    
21. //处理模版   
22.           template.process(data, out);   
23.           out.flush();   
24.           out.close();   
25. } catch
26.     e.printStackTrace();   
27. }

 

简单说明一下参数:
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代码   

1. /** 
2.   * 生成友情链接的静态页index_link.html 
3.   * @param context 
4.   * @param data 
5.   */
6. public static void
7. {    
8. "index_link.ftl","index_link.html");
9. }


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

 

以下是action中的一个方法(如果觉得这样搭建SSH2环境麻烦的话,也可以在Servlet环境下进行测试):



Java代码   

1. /** 
2.  * 生成友情链接静态页index_link.html 
3.  * @return 
4.  */
5. public
6. //权限验证 
7. if(! this.isAccess())    
8. return "error";    
9. try{    
10. //得到友情链接 
11.         List links = friendLinkDAO.findAll();   
12. //准备数据 
13. new
14. "links", links);    
15. //调用静态页面方法 
16.         HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data);   
17. "静态页面生成成功!");    
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()方法。

 

以下是FreeMarker(ftl)模版源码:



Java代码  


1. <#if links?size != 0>   
2. <div class="link">    
3.         <strong>友情链接:</strong>   
4.         <#list links as link>   
5. "${link.linkUrl}" target="_blank" title="${link.linkName}">${link.linkName}</a>    
6.         </#list>   
7. </div>   
8. <#else>    
9. <div class="link"></div>    
10. </#if>


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

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

标签:FreeMarker,静态,生成,网站,html,link,友情链接,页面
From: https://blog.51cto.com/u_16230604/7554802

相关文章

  • windows下操作静态库lib(相当于linux下的ar命令)
    linux下有ar可以操作.a文件,windows下提供了lib.exe操作lib文件,从vs的控制台编译环境中可以直接调用。主要有一下几个操作:列出obj::lib/listxxx.lib释放obj:lib/extract:xxx.obj/out:new.objxxx.lib删除obj:lib/remove:xxx.objxxx.lib增加obj:libxxx.objxxx.lib ......
  • 用 Webpack 优化网站的技术
    代码分割代码分割是一种将代码分成更小、更易于管理的块的技术,这些块可以按需加载。这可以通过减少用户访问您的网站时需要加载的代码量来帮助提高网站性能。要在Webpack中使用代码分割,可以使用splitChunks配置选项。此选项允许您指定应将哪些模块拆分为单独的块。您还可以......
  • PHP关注公众号后网站自动注册并登录的实现
    需求描述在自己网站上点击微信登录,网站自己弹出一个二维码、扫描二维码后弹出公众号的关注界面、只要一关注公众号网站自动登录、第二次扫描登录的时候网站直接登录。大家可以体验一下 「随便找的一个网站」前期准备一个公众号(必须认证,配置服务器)微信开发文档实现原理公众平台......
  • 开源网站一览
    国外开源网站聚合sourceforgehttp://www.sourceforge.netjava.nethttp://www.java.netwww.eclipse.orgwww.opensource.orghttp://strutstestcase.sourceforge.net(StrutsTestCase是基于Junit的一个方便测试struts框架的测试框架)Lombozhttp://www.objectlearn.com/index.......
  • selenium自动化测试-登录网站用户
    昨天学习了selenium自动化测试工具的入门,知道了Selenium是用于自动化控制浏览器做各种操作,打开网页,点击按钮,输入表单等等。今天学习通过selenium自动化测试工具自动登录某网站用户操作。第一步:确定目标网址比如:天天基金网站登录页面"https://login.1234567.com.cn/login"第二......
  • 部署Nginx网站服务实现访问状态统计以及访问控制功能
    部署Nginx网站服务实现访问状态统计以及访问控制功能 精选 原创小樱桃Cherry2018-06-2016:13:53博主文章分类:web服务及群集©著作权文章标签Nginx状态统计访问控制文章分类运维阅读数8135Nginx专为性能优化而开发,最知名的优点是它的稳定性和低系统资源消耗,以及对HTT......
  • Python(Web时代)- 超简单:一行代码就能搭建网站
    From: https://mp.weixin.qq.com/s/x2dJshrAdev4FweK4kwCyA-----------------------------------------------------------------------------------介绍Streamlit是一款非常强大,可以实现快速创建和共享数据应用的Python库。借助他,我们可以在数分钟内构建出功能齐全的Web应用......
  • 单例模式 静态内部类方式
    publicclassFolderV3Singleton{privateFolderV3Singleton(){}privatestaticclassDeviceHolder{privatestaticFolderV3SingletonourInstance=newFolderV3Singleton();}publicstaticFolderV3SingletongetInstance(){......
  • 谷歌防止网站和平台存在用户生成的垃圾内容
    垃圾内容发布者通常会利用开放评论表单和其他用户生成的内容敏感未设防的网站,在网站上生成垃圾内容。托管平台可能同样面临滥用风险;垃圾内容发布者可能会创建大量不遵循网络垃圾政策的网站,并且生成对网络价值不大或毫无价值的内容。防止平台或网站上出现滥用行为通常并非易事。简单......
  • python入门基础(14)--类的属性、成员方法、静态方法以及继承、重载
    上一篇提到过类的属性,但没有详细介绍,本篇详细介绍一下类的属性一、类的属性方法是用来操作数据的,而属性则是建模必不的内容,而且操作的数据,大多数是属性,比如游戏中的某个boss类,它的生命值就是属性(不同级别的boss,有不同的生命值),被攻击方法(不同的攻击,伤害值不同),当boss被攻击......