<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評論-49  文章-56  trackbacks-0

    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>  
    這樣友情鏈接靜態頁就生成了。然后其他靜態頁依此葫蘆畫瓢。
    posted on 2009-11-06 17:52 junly 閱讀(1115) 評論(2)  編輯  收藏 所屬分類: java

    評論:
    # re: 網站首頁靜態化方案 2010-11-16 09:03 | chanel watches
    唉,咋還是菜鳥,看不懂  回復  更多評論
      
    # re: 網站首頁靜態化方案 2010-11-16 09:03 | chanel watches
    咋還是菜鳥,看不懂  回復  更多評論
      
    主站蜘蛛池模板: 国产精品免费视频播放器| 精品免费tv久久久久久久| 免费观看国产网址你懂的| 亚洲精品国偷自产在线| 免费播放美女一级毛片| 韩国免费一级成人毛片| 日韩精品一区二区亚洲AV观看| ssswww日本免费网站片| av无码东京热亚洲男人的天堂| 亚洲AV永久无码精品一福利 | vvvv99日韩精品亚洲| 色偷偷亚洲男人天堂| 永久在线毛片免费观看| 亚洲精品GV天堂无码男同| 成人免费无码视频在线网站| 亚洲毛片一级带毛片基地| 四虎影视在线影院在线观看免费视频 | 亚洲日韩AV一区二区三区四区| 搡女人免费视频大全| 亚洲av无码专区首页| 国产精品嫩草影院免费| 亚洲精品国产成人99久久| 中文字幕免费不卡二区| 亚洲高清无在码在线无弹窗| 无遮免费网站在线入口| 亚洲精品中文字幕| 亚洲va中文字幕无码久久| 日本片免费观看一区二区| 亚洲av无码专区在线电影| 国产亚洲精品一品区99热| 国产美女在线精品免费观看| 五级黄18以上免费看| 亚洲国产成人久久综合一区| 日本免费一区二区三区最新| 国产午夜免费高清久久影院| 亚洲午夜福利在线视频| 久久亚洲高清观看| 好吊妞视频免费视频| 久久久高清日本道免费观看| 亚洲国产高清国产拍精品| 亚洲an天堂an在线观看|