网站首页静态化方案


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生成的静态页面组织起来。后台控制各个部分的静态页生成。这样做将首页进行了拆分,便于了静态页面的维护,当我们需要生成“友情链接”部分的时候就只生成友情链接部分,而不需要将整个页面都从新生成一次。
   以下是我生成静态页最核心的方法,使用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的代码然后自己再根据实际情况修改。简单说明一下参数:
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中的一个方法:
  /** */ /**  
 * 生成友情链接静态页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模版源码:
< #if  links?size ! = 0>   
<div class ="link" >    
        
< strong > 友情链接: </ strong >    
        
< #list  links as link >    
        
< href ="${link.linkUrl}"  target ="_blank"  title ="${link.linkName}" > ${link.linkName} </ a >    
        
</ #list >    
</ div >    
< #else >    
< div  class ="link" ></ div >    
</ #if >   
这样友情链接静态页就生成了。然后其他静态页依此葫芦画瓢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值