FreeMarker 是一个用Java编写的模板引擎,主要用来生成HTML Web页面,特别是基于MVC模式的应用程序。虽然FreeMarker具有一些编程的能力,但不像PHP,通常由Java程序准备要显示的数据,由 FreeMarker模板生成页面。 FreeMarker可以作为Web应用框架一个组件,但它与容器无关,在非Web应用程序环境也能工作的很好。 FreeMarker适合作为MVC的视图组件,还能在模板中使用JSP标记库。
- ???
- import?java.io.BufferedWriter;??
- import?java.io.File;??
- import?java.io.FileOutputStream;??
- import?java.io.IOException;??
- import?java.io.OutputStreamWriter;??
- import?java.io.Writer;??
- import?java.util.Map;??
- ??
- import?freemarker.template.Configuration;??
- import?freemarker.template.Template;??
- import?freemarker.template.TemplateException;??
- ??
- /**?
- ?*?freemarker生成静态html?
- ?*?@author?lpz?
- ?*?
- ?*/??
- public?class?GeneratorHtml?{??
- ????private?Configuration?config?=?null;????
- ????
- ????/**??
- ?????*?如果目录不存在,则自动创建?
- ?????*?@param?path??
- ?????*?@return?boolean?是否成功??
- ?????*/????
- ????private?boolean?creatDirs(String?path)?{????
- ????????File?aFile?=?new?File(path);????
- ????????if?(!aFile.exists())?{????
- ????????????return?aFile.mkdirs();????
- ????????}?else?{????
- ????????????return?true;????
- ????????}????
- ????}????
- ????
- ????/**?
- ?????*?模板生成静态html的方法?
- ?????*?@param?templateFileName(模板文件名)?
- ?????*?@param?templateFilePath(指定模板目录)?
- ?????*?@param?contextMap?(用于处理模板的属性Object映射)?
- ?????*?@param?htmlFilePath(指定生成静态html的目录)?
- ?????*?@param?htmlFileName(生成的静态文件名)?
- ?????*/??
- ????@SuppressWarnings("unchecked")????
- ????public?void?geneHtmlFile(String?templateFileName,?String?templateFilePath,?Map?contextMap,????
- ????????????String?htmlFilePath,?String?htmlFileName)?{????
- ????
- ????????try?{????
- ????????????Template?t?=?this.getFreeMarkerCFG(templateFilePath).getTemplate(templateFileName);????
- ????????????//?如果根路径存在,则递归创建子目录?? ??
- ????????????this.creatDirs(htmlFilePath);????
- ????????????File?afile?=?new?File(htmlFilePath?+?"/"?+?htmlFileName);????
- ????????????Writer?out?=?new?BufferedWriter(new?OutputStreamWriter(????
- ????????????????????new?FileOutputStream(afile)));????
- ????????????t.process(contextMap,?out);????
- ????????????out.flush();????
- ????????????out.close();????
- ????????}?catch?(TemplateException?e)?{????
- ????????????System.out.print(e.getMessage());????
- ????????}?catch?(IOException?e)?{????
- ????????????System.out.print(e.getMessage());????
- ????????}?catch?(Exception?e)?{????
- ????????????System.out.print(e.getMessage());????
- ????????}????
- ????}????
- ????
- ????/**??
- ?????*???
- ?????*?获取freemarker的配置,freemarker本身支持classpath,目录或从ServletContext获取.??
- ?????*???
- ?????*?@param?templateFilePath??
- ?????*????????????获取模板路径??
- ?????*?@return?Configuration?返回freemaker的配置属性??
- ?????*?@throws?Exception??
- ?????*/????
- ????private?Configuration?getFreeMarkerCFG(String?templateFilePath)????
- ????????????throws?Exception?{????
- ????????if?(null?==?this.config)?{????
- ????
- ????????????this.config?=?new?Configuration();????
- ????????????try?{????
- ????????????????this.config.setDirectoryForTemplateLoading(new?File(????
- ????????????????????????templateFilePath));????
- ????????????}?catch?(Exception?ex)?{????
- ????????????????throw?ex;????
- ????????????}????
- ????????}????
- ????????return?this.config;????
- ????}????
- ??
- }??