利用freemarker、java生成html靜態頁面
阿新 • • 發佈:2019-02-18
這幾天在搞一個利用freemarker和java生成靜態頁面的東西,經過百度和自己的除錯終於搞定,現在總結出核心程式碼分享。
Java程式碼- /**
- * 生成靜態頁面主方法
- *
- * @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) {
- // 載入模版
- freemarkerCfg.setServletContextForTemplateLoading(context, "/");
-
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8"
- String filePath = ServletActionContext.getServletContext().getRealPath(
- "/static");
- File file = new File(filePath);
- if(!file.exists() || !file.isDirectory()){
- file.mkdir();
- }
- File f = new File(file,"/all_css");
-
if
- f.mkdir();
- }
- try {
- freemarkerCfg.setDirectoryForTemplateLoading(new File(filePath));
- // 設定包裝器,並將物件包裝為資料模型
- freemarkerCfg.setObjectWrapper(new DefaultObjectWrapper());
- // 獲取模板,並設定編碼方式,這個編碼必須要與頁面中的編碼格式一致
- // 否則會出現亂碼
- Template template = freemarkerCfg
- .getTemplate(templatePath, "UTF-8");
- template.setEncoding("UTF-8");
- // 靜態頁面路徑
- String htmlPath = filePath + "/" + 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();
- }
- }
- /**
- * 生成友情連結的靜態頁cuxiao.html
- *
- * @param context
- * @param data
- */
- ublic static void createIndexFriendLink(ServletContext context,
- Map<String, Object> data) {
- try {
- //cuxiao.ftl是專案中建立的ftl檔案,cuxiao.html是生成的靜態頁面名
- return crateHTML(context, data, "/cuxiao.ftl", "cuxiao.html");
- } catch (Exception e) {
- e.printStackTrace();
- }
最後呼叫方法,private Map<String, Object> pList = new HashMap<String, Object>();
Java程式碼- List list = new ArrayList();
- pList.put("list",list);
- HttpServletRequest request = ServletActionContext.getRequest();
- pList.put("JspTaglibs", new TaglibFactory(request.getSession()
- .getServletContext()));
- this.createIndexFriendLink(
- ServletActionContext.getServletContext(), pList);
- //頁面介紹map時一定要與pList中的key一致
- PS:原來寫在了iteye上,現在公司只能上csdn,就搬到這裡了,歡迎各位大神拍磚。