<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.28</version> </dependency>
<html> <head> <title>啦啦啦啦啦</title> </head> <body> <h1>侠客行</h1> <p>${author!}</P> <#if (poem?size)!=0> <#list poem as item> <p>${item.first!}${item.second!}</p></br> </#list> </#if> </body> </html>
@Slf4j @Component public class FreeMarkerUtil { private static Configuration config; private static String serverPath; @Value("${spring.servlet.multipart.location:D:/static/}") public void setServerPath(String serverPath) { FreeMarkerUtil.serverPath = serverPath; } /** * 通过freemarker生成静态HTML页面 * @param templateName 模版名称 * @param targetFileName 生成后的文件名 * @param ftlPath模板路径 * @param htmlPathhtml路径 * @param mapfreemarker生成的数据都存储在MAP中, */ public static void createHtml(String templateName, String targetFileName, String ftlPath, String htmlPath, Map<String, Object> map) { try{ //创建fm的配置 config = new Configuration(); //指定默认编码格式 config.setDefaultEncoding("UTF-8"); //设置模版文件的路径 config.setDirectoryForTemplateLoading(new File(serverPath+ftlPath)); //获得模版包 Template template = config.getTemplate(templateName); //从参数文件中获取指定输出路径 String path = serverPath+htmlPath; //生成的静态页存放路径如果不存在就创建 File file = null; file=new File(path); if (!file.exists()){ file.mkdirs(); } //定义输出流,注意必须指定编码 Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(path+"/"+targetFileName)), UTF_8)); //生成模版 template.process(map, writer); }catch (Exception e){ log.error("生成异常:{}",e); } }
构造实体类,通过freemarker将实体类的信息渲染至html
@GetMapping("test") public Object test() { Map<String,Object> map = new HashMap<>(16); List<Poem> list = new ArrayList<>(); list.add(new Poem("赵客缦胡缨,", "吴钩霜雪明。")); list.add(new Poem("银鞍照白马,", "飒沓如流星。")); list.add(new Poem("十步杀一人,", "千里不留行。")); list.add(new Poem("事了拂衣去,", "深藏身与名。")); map.put("author","李白"); map.put("poem",list); FreeMarkerUtil.createHtml("poem.ftl","poem.html","侠客行/","侠客行/",map); return BackMessage.ok(map); }
实体类:
@Data public class Poem { private String first; private String second; public Poem(String first, String second) { this.first = first; this.second = second; } }
<html> <head> <title>啦啦啦啦啦</title> </head> <body> <h1>侠客行</h1> <p>李白</P> <p>赵客缦胡缨,吴钩霜雪明。</p></br> <p>银鞍照白马,飒沓如流星。</p></br> <p>十步杀一人,千里不留行。</p></br> <p>事了拂衣去,深藏身与名。</p></br> </body> </html>