由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态jsp页面的话那么数据库查询将是巨大的开销,会导致首页访问速度的下降。于是考虑将这个首页全部静态化。
整个网站采用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>
整个网站首页的基本结构是通过jsp的include标签将所有通过freemarker生成的静态页面组织起来。后台控制各个部分的静态页生成。这样做将首页进行了拆分,便于了静态页面的维护,当我们需要生成“友情链接”部分的时候就只生成友情链接部分,而不需要将整个页面都从新生成一次。
- /**
- * 生成静态页面主方法
- * @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();
- }
简单说明一下参数:
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文件。友情链接数据来源通过数据库查询获取。
然后再写一个方法专门生成友情链接静态页面:
- /**
- * 生成友情链接的静态页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中的一个方法(如果觉得这样搭建SSH2环境麻烦的话,也可以在Servlet环境下进行测试):
- /**
- * 生成友情链接静态页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()方法。
以下是FreeMarker(ftl)模版源码:
- <#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方法实时的生成静态页面。如果更新速度不慢可以在后台手动更新或者利用操作系统的定时任务功能去执行你的静态页面生成程序。
相关推荐
Freemarker网站静态化的实现实例源码
实现了网站静态化,提高网站的访问速度,freemaker API 有助于使用者查阅文档!有助于初学者学习,运用!
struts1.2 + freemarker实现登录成功页面静态化例子
Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化,以后直接调用即可,无需修改任何源代码,改压缩文件包括 1、工具类; 2、源码(含jar包); 3、mysql数据库可执行文件; 4、struts2集成...
目前企业中:主要用 Freemarker 做静态页面或是页面展示 总结:freemarker 模版引擎,可以使用 Freemarker 模版生成 html 页面。 Freemarker 语法 /** * freemark入门案例 * freemark三要素: * 1.
实现页面静态化的例程 开发环境:MyEclipse 数据库:MySQL
包括使用freemarker和velocity两种技术来实现静态化。压缩包里面的文件有说明文档,说得很仔细,特别适合入门级别的人参考。还有freemarker和velocity开发所需要的jar包和插件。
Freemarker的jar包是动态网页静态化的必备jar包,静态化的工作基本上都是由他来完成的,如果没有他,你就不用往下看了,打魔兽去吧。Urlrewrite的jar包是用来解决将动态的网页静态化之后的传参问题的。freemarker-...
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...
一套基于FreeMarker技术实现的Java快速开发的代码生成器。...FreeMarker主要两大作用,一种是动态内容静态化。一种是代码生成。 本例的应用是后者,目的是为了节省业务开发时间,对简单的业务代码快速实现。
freemarker页面静态化,提高访问速度 sso单点登陆系统,避免tomcat集群seesion共享带来的集群数量限制问题 基于redis的购物车系统 <项目介绍> 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传...
INF下是后台配置文件WebContent文件夹下面是前端代码后台管理系统代码专栏前台页面频道代码通用项目前端一些通用文件staticFile静态化生成的前台页面#初步使用技术数据库采用mysql5后台路由采用spring mvc静态化...
SSMavenLhh 基于SSM+Maven的分布式网上购物商城 ...商品检索:使用solr服务器进行全文检索,商品详情页面采用freemarker实现静态化 购物车:采用cookie和redis进行存储 单点登录系统 基于redis实现session共享
- Freemarker 页面静态化模板引擎 - FastDFS 图片服务器 - ActiveMQ 消息队列 - MyCat 数据库中间件 - HttpClient Http协议访问客户端 - Quartz 定时任务 - Solr 搜索服务 整个淘淘商城是面向SOA架构的 ![](taotao-...
商品搜索(基于solr、商品详细界面使用Freemarker实现静态化) 商品添加购物车(涉及sku联动、redis实现用户购物车管理) 单点登录系统(基于redis实现Session共享) 订单提交系统(利用单点登录系统实现用户登录...
PublicCMS内容管理系统:基于Java开发...系统支持静态化、服务器端包含、多级缓存、全文搜索和复杂搜索功能,后台操作支持手机设备。目前,PublicCMS在全球拥有约0.0005%的用户,支持中文、繁体中文和英文等多种语言。
网页采用freemarker生成静态化页面 负载均衡使用Nginx、keepalived实现高可用 Web应用的端口 名称 端口 说明 Admin 8100 管理端 Cart 8101 购物车 Item 8102 商品详细 Order 8103 订单 Portal 8104 首页 Search 8105...
本软件采用jsp+sqlserver+ hibernate+struts实现,并使用了freemarker静态化、会员登录的状态以及文章点击使用ajax动态处理。本系统以学习技术为目的开发。本系统开放源代码,只为了能给jsp学习者带来一点帮助。 ...
· 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好性 · 完全生成全站静态页面,可自定义路径结构,无需urlrewrite · 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单...
15、栏目和内容静态化调整成只生成前10页 16、activation jcaptcha freemarker JAR部分用户反映下载不了,调整pom采用本地jar 17、栏目没有选择模型模板的情况下,发布内容选择不到模型问题处理 JEECMS简介 ...