1. 程式人生 > >利用freemarker、java生成html靜態頁面

利用freemarker、java生成html靜態頁面

這幾天在搞一個利用freemarker和java生成靜態頁面的東西,經過百度和自己的除錯終於搞定,現在總結出核心程式碼分享。

Java程式碼  收藏程式碼
  1. /** 
  2.      * 生成靜態頁面主方法 
  3.      *  
  4.      * @param context 
  5.      *            ServletContext 
  6.      * @param data 
  7.      *            一個Map的資料結果集 
  8.      * @param templatePath 
  9.      *            ftl模版路徑 
  10.      * @param targetHtmlPath
     
  11.      *            生成靜態頁面的路徑 
  12.      */  
  13.     public static void crateHTML(ServletContext context,  
  14.             Map<String, Object> data, String templatePath, String targetHtmlPath) {  
  15.         // 載入模版  
  16.         freemarkerCfg.setServletContextForTemplateLoading(context, "/");  
  17.         freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8"
    );  
  18.         String filePath = ServletActionContext.getServletContext().getRealPath(  
  19.                 "/static");  
  20.         File file = new File(filePath);  
  21.         if(!file.exists() || !file.isDirectory()){  
  22.             file.mkdir();  
  23.         }  
  24.         File f = new File(file,"/all_css");  
  25.         if
    (!f.exists() || !f.isDirectory()){  
  26.             f.mkdir();  
  27.         }  
  28.         try {  
  29.             freemarkerCfg.setDirectoryForTemplateLoading(new File(filePath));  
  30.             // 設定包裝器,並將物件包裝為資料模型  
  31.             freemarkerCfg.setObjectWrapper(new DefaultObjectWrapper());  
  32.             // 獲取模板,並設定編碼方式,這個編碼必須要與頁面中的編碼格式一致  
  33.             // 否則會出現亂碼  
  34.             Template template = freemarkerCfg  
  35.                     .getTemplate(templatePath, "UTF-8");  
  36.             template.setEncoding("UTF-8");  
  37.             // 靜態頁面路徑  
  38.             String htmlPath = filePath + "/" + targetHtmlPath;  
  39.             File htmlFile = new File(htmlPath);  
  40.             Writer out = new BufferedWriter(new OutputStreamWriter(  
  41.                     new FileOutputStream(htmlFile), "UTF-8"));  
  42.             // 處理模版  
  43.             template.process(data, out);  
  44.             out.flush();  
  45.             out.close();  
  46.         } catch (Exception e) {  
  47.             e.printStackTrace();  
  48.         }  
  49.     }  
  50.     /**  
Java程式碼  收藏程式碼
  1. * 生成友情連結的靜態頁cuxiao.html  
  2. *   
  3. @param context  
  4. @param data  
  5. */  
  6. ublic static void createIndexFriendLink(ServletContext context,  
  7.     Map<String, Object> data) {  
  8. try {  
  9. //cuxiao.ftl是專案中建立的ftl檔案,cuxiao.html是生成的靜態頁面名  
  10.     return crateHTML(context, data, "/cuxiao.ftl""cuxiao.html");  
  11. catch (Exception e) {  
  12.     e.printStackTrace();  
  13. }  

   最後呼叫方法,private Map<String, Object> pList = new HashMap<String, Object>();

Java程式碼  收藏程式碼
  1. List list = new ArrayList();  
  2. pList.put("list",list);  
  3. HttpServletRequest request = ServletActionContext.getRequest();  
  4.             pList.put("JspTaglibs"new TaglibFactory(request.getSession()  
  5.                     .getServletContext()));  
  6.              this.createIndexFriendLink(  
  7.                     ServletActionContext.getServletContext(), pList); 
  8. //頁面介紹map時一定要與pList中的key一致  
  1. PS:原來寫在了iteye上,現在公司只能上csdn,就搬到這裡了,歡迎各位大神拍磚。