java 使用Freemarker 生成html
1、定义模板,模板中的变量就是程序需要set的值。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript"> function doSubmit(){ document.getElementById("form1").submit(); } </script> </head> <body onload="doSubmit()"> <form id="form1" method="post" action="${url}" > <#list weaponMap?keys as key> <input type="hidden" name="${key}" value="${weaponMap[key]!("null")}"/> </#list> </form> </body> </html>
2、java代码实现
private Configuration freemarke_cfg = null; public static void main(String agrs []) throws Exception { String path = FreemarkerTest.class.getResource("/").getPath(); FreemarkerTest test = new FreemarkerTest(); Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("url", "http://www.baidu.com"); // map 集合 循环的 Map<String, Object> weaponMap = new HashMap<String, Object>(); weaponMap.put("data", "1"); weaponMap.put("code", "00"); weaponMap.put("message", "成功"); paramMap.put("weaponMap", weaponMap); test.geneHtmlFile(path, "template", paramMap, path, "tempFileName"); } protected Configuration getFreeMarkerCFG(String sTemplateFilePath) { if (null == freemarke_cfg) { freemarke_cfg = new Configuration(); freemarke_cfg.setEncoding(Locale.CHINA, "UTF-8"); // 基于类路径的模版加载器 freemarke_cfg.setClassForTemplateLoading(this.getClass(), "/websiteroot/freemarker"); try { freemarke_cfg.setDirectoryForTemplateLoading(new File( sTemplateFilePath)); } catch (Exception e) { e.printStackTrace(); } } return freemarke_cfg; } /** * 生成静态文件 * * @param templatePath * :模板路径 * @param templateFileName * :模板名称 * @param propMap * :存放数据模型的Map * @param htmlFilePath * :生成HTML页面的存放路径 * @param htmlFileName * :生成html页面的名称 * */ public boolean geneHtmlFile(String templatePath, String templateFileName, Map<String, Object> propMap, String htmlFilePath, String htmlFileName) { try { Template t = getFreeMarkerCFG(templatePath).getTemplate( templateFileName); t.setEncoding("UTF-8"); creatDirs(htmlFilePath); File afile = new File(htmlFilePath + "/" + htmlFileName); // 设置生成的文件编码为UTF-8 // 服务器不支持UTF-8格式HTML时候使用ANSI格式HTML文件,即系统默认编码 Writer out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(afile), "UTF-8")); t.process(propMap, out); } catch (IOException e) { logger.error("Error " + htmlFileName, e); return false; } catch (TemplateException e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } public static boolean creatDirs(String path) { File aFile = new File(path); if (!aFile.exists()) { return aFile.mkdirs(); } else { return true; } }
3、最终会生成一个 tempFileName 的文件。在项目的target\classes 路径下面。成功后会有如下展示
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript"> function doSubmit(){ document.getElementById("form1").submit(); } </script> </head> <body onload="doSubmit()"> <form id="form1" method="post" action="http://www.baidu.com" > <input type="hidden" name="message" value="成功"/> <input type="hidden" name="data" value="1"/> <input type="hidden" name="code" value="00"/> </form> </body> </html>
4、所需要的jar包
需要jar包
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.16</version>
</dependency>
如有疑问可以找我!