- 浏览: 110580 次
- 性别:
- 来自: 上海
文章分类
最新评论
1 Freemarker网站静态化的实现(转)
首页:
1.<body>
2.<div id="wrap">
3. <!--头部开始-->
4. <jsp:include page="/html/top.html" flush="true"></jsp:include>
5. <!--头部结束-->
6. <!--导航开始-->
7. <jsp:include page="/html/channel.html" flush="true"></jsp:include>
8. <!--导航结束-->
9. <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生成的静态页面组织起来。后台控制各个部分的静态页生成。这样做将首页进行了拆分,便于了静态页面的维护,当我们需要生成“友情链接”部分的时候就只生成友情链接部分,而不需要将整个页面都从新生成一次。 2.<div id="wrap">
3. <!--头部开始-->
4. <jsp:include page="/html/top.html" flush="true"></jsp:include>
5. <!--头部结束-->
6. <!--导航开始-->
7. <jsp:include page="/html/channel.html" flush="true"></jsp:include>
8. <!--导航结束-->
9. <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>
以下是我生成静态页最核心的方法,使用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();
}
其实很简单,只要Google一下就有很多这方面的代码。我也是Google的代码然后自己再根据实际情况修改。简单说明一下参数: * 生成静态页面主方法
* @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方法。 * 生成友情链接的静态页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");
然后根据以上方法我们就可以再Struts2的action里面从数据库查询数据放入map调用createIndexFriendLink()方法生成静态页了。
这是action中的一个方法:
/** *//**
* 生成友情链接静态页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然后通过以下代码 * 生成友情链接静态页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";
}
}
HashMap<String,Object> data = new HashMap<String,Object>();
data.put("links", links);
准备数据调用createIndexFriendLink()方法。
以下是: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>
这样友情链接静态页就生成了。然后其他静态页依此葫芦画瓢。 <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>
发表评论
-
正则基础
2009-11-03 10:15 563public class ReEX { /** * ... -
cookie
2009-11-03 10:25 599//servlet//生成cookie对名象java.uti ... -
junit
2009-11-03 17:44 634junit简介: * 创建test目录与src同级,同时建立 ... -
JAVA语言读取MAC地址(转)
2009-11-06 17:21 713import java.io.*; public cla ... -
Apache BeanUtils
2009-11-29 21:17 548BeanUtils.copyProperties 与 Pr ... -
IO流
2009-11-29 21:18 5701 输入/输出流 字节流 字符 ... -
Map-iterator
2009-11-29 21:20 695Set temp=new HashSet();Set e ... -
日期Format
2009-11-29 21:26 682日期格式化 Date currentTime = new Da ... -
判断是否属于此类型
2009-11-29 21:27 479event.getValue() instanceof Act ... -
日期处理
2009-11-29 21:28 531Calendar g=Calendar.getInsta ... -
生成jar包
2009-11-29 21:29 450生成jar包 jar -cvf test.jar *.* *. ... -
同步锁
2009-11-29 21:30 494public void synchronized getall ... -
序列化与反序列化
2009-11-29 21:31 583序列化是把一个对象的状态写入一个字节流的过程,它执行RMI,R ... -
java mail
2009-11-29 21:33 591JavaMail下载与安装 http://java.sun.c ... -
文件上传组件
2009-11-29 21:34 469文件上传组件 1 Apache的Commons FileUpl ... -
pager-taglib的安装和使用
2009-11-29 21:34 4471、拷贝pager-taglib.jar包 2、在JSP页面中 ... -
文件下载
2009-11-29 21:35 420文件下载代码(2008-02-26 2 ... -
字符串日期转换
2009-12-03 17:09 670java开发时往往需要做字符串和日期的转换 主要用到:java ... -
java反编译工具jad
2009-12-13 22:40 573http://www.kpdus.com/jad.html ... -
java优化编程-字符串驻留
2010-01-20 15:26 673字符串比较时,采用.intern()方法将字符串添加到驻留池中 ...
相关推荐
大型站点网站静态化实现方案,供大家一起共同分享学习。
网站架构(页面静态化_图片服务器分离_负载均衡)方案全解析
优点:提高网页的打开速度 原理:将动态数据添加到静态页面,存储下来,如果动态数据无更新添加删除...触发功能不再首页触发, 这样任何情况下首页调取的内容都是静态的,提高浏览速度 附件为单独程序,直接运行就可
2. 伪静态 4. 促销用的自定义标签 5. 在页面上调整模版 6. 监控代码的处理 7. 购物车不能静态化,静态和动态的分开处理
网站系统大并发解决方案之HTML静态化(GO语言初级简单版包含源代码)
多个文件服务器读写,这里可采用SMB协议 页面静态化,可采用freemarker开源框架 如果考虑到大量的读写请求,则将请求分布式或采用调度的办法来解决 第一点我们首先应该考虑文件服务器与静态页面的映射关系,即什么...
资源内容:CSI;web前端优化;动静分离策略;动静整合方案;反向代理;缓存;满足静态化的前后端分离;前后端分离;
浏览型网站静态化架构设计.docx
浏览型网站静态化架构设计2.docx
展览公司,翻译公司网页模版,会计公司,软件公司网站生成html静态全站程序,公司网站自助建站程序,任意设置的会员级别和浏览权限精确到每条记录,这对于希望不同内容针对不查看对象开放来讲,无疑是最佳解决方案。...
对于访问量比较大的网站,网页静态化是一个比较可靠的解决方案。静态化将显著降低服务器的压力,提升服务器处理能力。下面将介绍两种不同的实现方法,并进行对比。
如果没有资源分费,请到bsshop.org 网站下载 百顺商城,是通过互联网展示、宣传或者销售自身产品的网络平台载体。 通过百顺商城,我们可以扩展另外一种途径—互联网营销,让用户多一种途径来了解、认知或者购买我们...
绿色的农业产品企业官网静态模板.zip
如果您需要动态交互或者数据库支持等定制服务,我们建议您寻找专业的开发团队或者采用其他解决方案。 3. 定制服务:请注意,我们的成品网页不提供定制服务。我们的网页是经过精心设计和开发的通用模板,不支持个性化...
如果您需要动态交互或者数据库支持等定制服务,我们建议您寻找专业的开发团队或者采用其他解决方案。 3. 定制服务:请注意,我们的成品网页不提供定制服务。我们的网页是经过精心设计和开发的通用模板,不支持个性化...
这是一款免费的在线Flash音乐播放器,致力于提供最佳在线音乐播放解决方案。支持的音频视频格式主要有MP3,FLV,MP4,并可以通过网页JS接口实现WMP(Windows Media Player)所支持的格式播放,如wma等。主要功能特色有...
使用wordpass博客程序的朋友都知道他的默认首页是index.php,然而地球人都知道index.html的太首页能够提高网站首页的访问速度。原因的话。地球人都知道的。其实呢cms主题嘛,首页的文章展示模块太多了,所以产生的...
2、强大的负载功能:一个网站负载功能在网站访问量或内容量巨大时至关重要,pageadmin通过生成静态化和数据库连接优化两个方面来提高网站的负载能力。 2.1、生成静态可以保证用户打开页面时不必连接数据库,从而...
2、强大的负载功能:一个网站负载功能在网站访问量或内容量巨大时至关重要,pageadmin通过生成静态化和数据库连接优化两个方面来提高网站的负载能力。 2.1、生成静态可以保证用户打开页面时不必连接数据库,从而...