<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 閱讀(1108) 評論(2)  編輯  收藏 所屬分類: java

    評論:
    # re: 網站首頁靜態化方案 2010-11-16 09:03 | chanel watches
    唉,咋還是菜鳥,看不懂  回復  更多評論
      
    # re: 網站首頁靜態化方案 2010-11-16 09:03 | chanel watches
    咋還是菜鳥,看不懂  回復  更多評論
      
    主站蜘蛛池模板: 亚洲中文字幕无码久久综合网 | 最好2018中文免费视频| 自拍偷自拍亚洲精品情侣| 亚洲乱码中文字幕手机在线| 国产精品免费大片| 久久综合久久综合亚洲| 亚洲av日韩av综合| 无码永久免费AV网站| 亚洲av一本岛在线播放| 99爱视频99爱在线观看免费| 日本一区二区免费看| 成人午夜视频免费| 国产AV无码专区亚洲AV蜜芽 | 啦啦啦完整版免费视频在线观看| 亚洲高清视频在线播放| 麻豆国产精品免费视频| 亚洲日韩AV一区二区三区中文| 在线免费观看视频你懂的| 无码亚洲成a人在线观看| 亚洲VA综合VA国产产VA中| 国产免费播放一区二区| 青青草原精品国产亚洲av| 在线观看AV片永久免费| 老司机福利在线免费观看| 亚洲色婷婷综合久久| 亚洲成人免费在线观看| 亚洲精品乱码久久久久久V| 亚洲精品国产日韩无码AV永久免费网| 中文字幕在线视频免费观看| 亚洲今日精彩视频| 日韩高清在线免费观看| 51午夜精品免费视频| 亚洲精品美女在线观看播放| 手机看片久久国产免费| 最新久久免费视频| 国内精品久久久久影院亚洲| 亚洲小说区图片区另类春色| 两性刺激生活片免费视频| 男女作爱免费网站| 亚洲福利视频网址| 亚洲 综合 国产 欧洲 丝袜|