我们在生成静态页面时需要先new一个configuration对象,并将Freemacker的版本给它,如果我们的模板是文件则我们需要获得他的路径,以及使用DirectoryForTemplateLoading驱动,如果是字符串,则使用StringTemplateLoader驱动,通常我们是用的字符串驱动,之后我们将模板驱动放入configuration中,当然我们也可以使用
configuration.setDefaultEncoding("utf-8");来设置字符串编码,再调用getTemplate方法获得模板,这时我们就可以使用FreeMarkerTemplateUtils.processTemplateIntoString(tem, map);来生成静态页面了。
两种方式的代码如下:
这里使用的是文件模板的方式;注意:输入流信息不能被打印,否则合适时将丢失输入流
//获取配置类对象
Configuration configuration = new Configuration(Configuration.getVersion());
//获取模板路径
String path = this.getClass().getResource("/templates/").getPath();
//将模板文件放入configuration中
configuration.setDirectoryForTemplateLoading(new File(path));
//设置模板字符
configuration.setDefaultEncoding("utf-8");
//获取模板对象
Template template = configuration.getTemplate("stu.ftl");
//获取模板数据
Map model = this.getModel();
//利用工具类将模板和数据结合在一块
String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
//创建输入流
InputStream inputStream = IOUtils.toInputStream(html, "utf-8");
//System.out.println(IOUtils.toString(inputStream));//使用过程中这里不能进行输出,否则会导致流信息被输出合并时出现空信息
//创建输出流
FileOutputStream outputStream = new FileOutputStream(new File("文件路径\\stu.html"));
//合并输入输出流
IOUtils.copy(inputStream,outputStream);
//关闭流对象
inputStream.close();
outputStream.close();
下面是string字符串的方式来生成:
//创建Freemacker配置对象
Configuration configuration = new Configuration(Configuration.getVersion());
//获得字符串模板加载器
StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
//将字符串模板放入字符串模板加载器中
stringTemplateLoader.putTemplate("temp",template);
//将字符串模板加载器放入配置中
configuration.setTemplateLoader(stringTemplateLoader);
//设置编码
configuration.setDefaultEncoding("utf-8");
//获得模板
try {
Template tem = configuration.getTemplate("temp");
//通过Freemacker的工具类生成模板
String html = FreeMarkerTemplateUtils.processTemplateIntoString(tem, map);
return html;
} catch (IOException e) {
log.error("模板获取异常{}",e.getMessage());
e.printStackTrace();
} catch (TemplateException e) {
log.error("模板生成异常",e.getMessage());
e.printStackTrace();
}