一. FreeMarker 的介绍
FreeMarker 的官方网址: http://freemarker.foofun.cn/index.html
解释的很详细,直接看官方网址就可以了。
二. Java 使用FreeMarker
二.一 前期准备
创建一个 Maven 项目, 在 pom.xml 中添加 依赖
<!--添加FreeMarker的依赖 ,版本是 2.3.29--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.29</version> </dependency> <!--测试junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--lombok依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> </dependency>
resources 目录下的 freemark 文件夹对应的目录是: D:\learncode\Template\FreeMark\Basic\src\main\resources\freemark
二.二 模板开发
这儿不与 Web 进行关联,不采用页面展示, 采用控制台输出。
二.二.一 单个属性展示
二.二.一.一 单个属性模板 FTL
创建 hello.ftl 文件
<html> <head> <title>${title}</title> </head> <body> Hello ${info} </body> </html>
有两个属性 title 和 info 进行填充。
二.二.一.二 单个属性开发
@Test public void fillBaseTest() throws Exception{ //1. 指定配置,对应着哪一个版本 Configuration configuration=new Configuration( Configuration.VERSION_2_3_29 ); //设置目录 configuration.setDirectoryForTemplateLoading( new File("D:\\learncode\\Template\\FreeMark\\Basic\\src\\main\\resources\\freemark") ); //指定编码 configuration.setDefaultEncoding("utf-8"); //指定异常处理器 configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); //开始创建数据 Map<String,Object> root=new HashMap<>(); root.put("title","Hello Freemark"); root.put("info","两个蝴蝶飞"); //找到要设置的,对应的模板 Template template=configuration.getTemplate("hello.ftl","utf-8"); //写出到控制台 Writer out=new OutputStreamWriter(System.out); //进行填充 数据和信息。 template.process(root,out); }
二.二.二 单个对象展示
二.二.二.一 单个对象模板 FTL
创建 info.ftl 文件
<html> <head> <title>Welcome ${web} </title> </head> <body> <h1>Welcome ${user}!</h1> <p>Our latest product: <a href="${info.url}">${info.name}</a>! </body> </html>
web, user 属性是单个属性, info.url, info.name 可以知道, info 是个对象。
二.二.二.二 单个对象开发
@Test public void fillInfoTest() throws Exception{ //1. 设置相应的 Configuration Configuration configuration=new Configuration(Configuration.VERSION_2_3_29); //2. 设置基本的目录 configuration.setDirectoryForTemplateLoading( new File("D:\\learncode\\Template\\FreeMark\\Basic\\src\\main\\resources\\freemark") ); //3. 设置编码 configuration.setDefaultEncoding("utf-8"); //设置错误处理器 configuration.setTemplateExceptionHandler( TemplateExceptionHandler.RETHROW_HANDLER ); //4. 构建数据 Map<String,Object> root=new HashMap<>(); root.put("web","百度"); root.put("user","两个蝴蝶飞"); Map<String,Object> info=new HashMap<>(); info.put("url","www.yueshushu.top"); info.put("name","百度"); root.put("info",info); //5. 获取对应的模板 Template template=configuration.getTemplate("info.ftl"); //6.构建输出对象 Writer out=new OutputStreamWriter(System.out); //7. 调用 process 方法,进行填充数据 template.process(root,out); }
二.二.三 If 展示
二.二.三.一 IF模板 FTL
创建 if.ftl 文件
<html> <head> <title>Welcome ${web} </title> </head> <body> <!--单个if展示--> <h1>Welcome ${user}! <#if user='yjl'>,领导牛逼</#if></h1> <p>Our latest product: <a href="${info.url}">${info.name}</a>! <h2>性别是:</h2> <!--if else 展示--> <#if sex=='男'> 男 <#else> 女 </#if> <h2>成绩是:</h2> <!--if elseif else--> <#if score >90 > 优 <#elseif score >80> 良 <#elseif score >70> 中 <#elseif score >60> 及 <#else> 差 </#if>> </body> </html>
二.二.三.二 IF 开发
@Test public void ifFillTest() throws Exception{ //1. 通过版本,获取相关的配置 Configuration configuration=new Configuration(Configuration.VERSION_2_3_29); //2. 设置扫描的包的基本路径 configuration.setDirectoryForTemplateLoading( new File("D:\\learncode\\Template\\FreeMark\\Basic\\src\\main\\resources\\freemark") ); //3. 设置基本路径 configuration.setDefaultEncoding("utf-8"); //4. 设置数据 Map<String,Object> root=new HashMap<>(); root.put("web","IF验证"); root.put("user","yjl2"); Map<String,Object> info=new HashMap<>(); info.put("url","www.baidu.com"); info.put("name","百度"); root.put("info",info); root.put("sex","女"); root.put("score",75); //5. 获取对应的模板文件 Template template=configuration.getTemplate("if.ftl"); //6. 输出到控制台 Writer out=new OutputStreamWriter(System.out); //7. 通过 process() 方法进行填充数据和输出信息对象. template.process(root,out); }