FreemarkerUtil根據模板與資料生成靜態HTML
阿新 • • 發佈:2018-12-15
在電商系統中經常被訪問網頁生成靜態網頁可以提高併發訪問量,在全文檢索系統中搜索靜態網頁效率也比動態網頁高,所以經常被訪問的網頁經常被靜態化。
FreemarkerUtil
package com.test.util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.servlet.ServletContext; import freemarker.template.Configuration; import freemarker.template.Template; public class FreemarkerUtil { /** * 根據模板和資料生成靜態頁面 * @param ctx Servlet上下文物件 * @param ftlPath 模板檔案所在目錄 * @param ftlName 模板檔名 * @param htmlPath 生成靜態頁面所在目錄 * @param map 資料物件 */ public static void genHtml(ServletContext ctx,String ftlPath, String ftlName,String htmlPath,Map map) { try { //1.定義Configuration物件 Configuration conf = new Configuration(Configuration.VERSION_2_3_26); conf.setEncoding(Locale.getDefault(), "UTF-8"); //2.設定模板載入器 conf.setServletContextForTemplateLoading(ctx, ftlPath); //3.根據模板名稱獲取模板物件Template Template tmplt = conf.getTemplate(ftlName); //4.生成靜態HTML檔案 //5.從Map資料模型中獲取ID Integer id = (Integer)map.get("id"); //通過目錄查詢絕對地址 String path = ctx.getRealPath(htmlPath); System.out.println("path==="+path); String htmlFile = path + "/"+id+".html"; FileOutputStream fos = new FileOutputStream(htmlFile); OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF8"); tmplt.process(map, osw); fos.close(); } catch(Exception e) { e.printStackTrace(); } } /** * 根據檔名刪除檔案 * @param ctx Servlet上下文物件 * @param htmlPath 生成靜態頁面所在目錄 * @param id 檔名 */ public static void delHtml(ServletContext ctx,String htmlPath,Integer id) { try { String path = ctx.getRealPath(htmlPath); String file = path + "/" + id + ".html"; File f = new File(file); if(f.exists()) f.delete(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { String ftlPath = "ftl"; String ftlName = "good.ftl"; String htmlPath = "html"; Map map = new HashMap(); map.put("id","1"); FreemarkerUtil.genHtml(null, ftlPath, ftlName, htmlPath, map); } }
Controller呼叫程式碼
@RequestMapping("/save") public String save(HttpServletRequest req,GoodInfo gi) { Integer id = gi.getId(); System.out.println("id==="+id); if(id != null) { //修改 serv.updateGood(gi); gi = serv.findGoodById(id); String ftlPath = "ftl"; String ftlName = "good.ftl"; String htmlPath = "html"; Map map = new HashMap(); map.put("id", gi.getId()); map.put("name", gi.getName()); map.put("price", gi.getPrice()); map.put("dt", gi.getDt()); map.put("tname", gi.getTypeName()); FreemarkerUtil.genHtml(req.getServletContext(), ftlPath, ftlName, htmlPath, map); } else { //新增 serv.saveGood(gi); } return "redirect:/list"; }