javaframemaker教程_《FreeMarker教程-笔录》
今天我们学习⼀下FreeMarker模板引擎。它是基于模板⽂件⽣成其他⽂本的通⽤⼯具。本章我们主要讲使⽤FreeMarker模板引擎⽣成.html ⽂件和⽣成 .java 类⽂件。
简介
FreeMarker是⼀款⽤java语⾔编写的模版引擎,它虽然不是web应⽤框架,但它很适合作为web应⽤框架的⼀个组件。
特点:
轻量级模版引擎,不需要Servlet环境就可以很轻松的嵌⼊到应⽤程序中
能⽣成各种⽂本,如html,xml,java,等
⼊门简单,它是⽤java编写的,很多语法和java相似
环境配置
⾸先我们需要配置FreeMarker环境,两种⽅式任选其⼀(推荐maven):
1.下载它的依赖jar包
2.⽤maven配置。
org.freemarker
freemarker
2.3.20
--------------好了,环境配好了我们开始搞点事情吧!
通过FreeMarker的模板⽂件⽣成java类⽂件
1.新建⼀个javaweb⼯程(eclipse/idea都可以)
2.在资源⽬录下新建⼀个templates⽬录(⽤来存放我们所有的FreeMarker模板⽂件xxx.ftl,模板⽂件的后缀名称为 ".ftl")
3.新建⼀个模板⽂件 hello.ftl (⽂件内容):
package ${classPath};//模板中变量引⽤(动态赋值)
public class ${className} {
public static void main(String[] args) {
System.out.println("${helloWorld}");
}
}
4.在java类的src⽬录包下(包名随便【不过需要注意的是要和代码⾥⽣成的包位置⼀致】)新建FreemarkerTest.java (⽂件内容):
package com.yu.scloud.baseframe.frame.freemarker;
import com.yu.scloud.baseframe.frame.pojo.User;
plate.Configuration;
plate.Template;
import java.io.*;
import java.util.*;
public class FreemarkerTest {
private static final String TEMPLATE_PATH = "src/main/resources/templates";//模板路径【指向你⾃⼰的模板⽂件存放路径】
public static void main(String[] args) {
autoGenJAVATest();//通过.ftl模板⽣成java类
}
//根据模板⾃动创建java类-⽰例
private static void autoGenJAVATest()
{
Map dataMap = new HashMap();
dataMap.put("classPath", "com.yu.scloud.baseframe.frame.freemarker");
dataMap.put("className", "AutoGenHello");
dataMap.put("helloWorld", "通过 演⽰ FreeMarker的HelloWorld!");
String DEST_PATH = "src/main/java/com/yu/scloud/baseframe/frame/freemarker";//⽬标路径【指向你⾃⼰的类⽂件存放路径】
genFileWithTemplate(TEMPLATE_PATH,DEST_PATH,"hello.ftl","AutoGenHello.java",dataMap);
}
//通过.flt模板⽣成file(封装了⼀下 ⽅便统⼀调⽤)
private static void genFileWithTemplate(String templateDir,String destDir,String templateFileName,String destFileName,Map dataMap)
{
//创建freeMarker配置实例
java修改html文件Configuration configuration = new Configuration();
Writer out = null;
try {
//设置模版路径
configuration.setDirectoryForTemplateLoading(new File(templateDir));
//加载模版⽂件
Template template = Template(templateFileName);
//⽣成数据
File docFile = new File(destDir + "\\" + destFileName);
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
//输出⽂件
template.process(dataMap, out);
System.out.println(destFileName+" 模板⽂件创建成功 !");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != out) {
out.flush();
out.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
5.执⾏ FreemarkerTest.java的main⽅法,成功后会在上⾯代码中指定的DEST_PATH指向的⽬录下⽣成⼀个 AutoGenHello.java ⽂件,(⽂件内容):
package com.yu.scloud.baseframe.frame.freemarker;
public class AutoGenHello {
public static void main(String[] args) {
System.out.println("通过 演⽰ FreeMarker的HelloWorld!");
}
}
以上就是使⽤FreeMarker模板引擎⽣成.java类⽂件的全部过程。我们可以对⽣成的⽂件简单分析⼀下:
hello.ftl模板⽂件中 package ${classPath}; 被替换成了
package com.yu.scloud.baseframe.frame.freemarker;
public class ${className} { 被替换成了
public class AutoGenHello {
......
我们通过模板可以⽣成多种多样更加复杂的类⽂件,对于我们⽇常开发很有帮助。⽐如Spring框架中的 Controller、Dao、Service以及ServiceImpl,这些类⽂件我们反复会去创建,并且好多⽂件格式、⽅法都是差不多的,这样我们就可以通过模板引擎去⼀键创建,⽅便的不要不要滴~~~
接下来我们将使⽤FreeMarker模板⽣成html⽂件
通过FreeMarker的模板⽂件⽣成Html⽂件
其实很简单
新建 hello-html.ftl ⽂件(⽤来⽣成html的模板⽂件---⽰例代码中包含了FreeMarker基本的语法使⽤,东西相对⽐较多仔细阅读)
我们对上⾯⽣成java的那个类改造⼀下:替换⼀下你⽣成html⽂件的路径以及⽣成的⽂件名称:
FreemarkerTest.java类(⽂件内容):
package com.yu.scloud.baseframe.frame.freemarker;
import com.yu.scloud.baseframe.frame.pojo.User;
plate.Configuration;
plate.Template;
import java.io.*;
import java.util.*;
public class FreemarkerTest {
private static final String TEMPLATE_PATH = "src/main/resources/templates";//模板路径//通过.ftl模板⽣成java类
public static void main(String[] args) {
autoGenHTMLTest();
// autoGenJAVATest();
}
//根据模板⾃动创建html-⽰例
private static void autoGenHTMLTest()
{
//给模板⽂件组装数据
Map dataMap = new HashMap();
User user=new User();
user.setName("Template-FreeMarker");
user.setId("123456789");
dataMap.put("user",user);
dataMap.put("title","FreeMarker⾃动⽣成HTML");
dataMap.put("datetime",new Date());
//设置列表数据
List peoples=new ArrayList<>();
for(int i=0;i<3;i++)
{
User user2=new User();
user2.setName("A"+i);
user2.setId("a"+i);
peoples.add(user2);
}
dataMap.put("peoples",peoples);
//设置map数据
HashMap employees=new HashMap<>();
for(int m=0;m<6;m++)
{
User user3=new User();
user3.setName("雇员"+m);
user3.setId("emp"+m);
employees.Id(),user3);
}
dataMap.put("employees",employees);
String DEST_PATH = "src/main/resources/static/demo";//⽬标路径
genFileWithTemplate(TEMPLATE_PATH,DEST_PATH,"hello-html.ftl","hello.html",dataMap);
}
//通过.flt模板⽣成file
private static void genFileWithTemplate(String templateDir,String destDir,String templateFileName,String destFileName,Map dataMap)
{
//创建freeMarker配置实例
Configuration configuration = new Configuration();
Writer out = null;
try {
//设置模版路径
configuration.setDirectoryForTemplateLoading(new File(templateDir));
//加载模版⽂件
Template template = Template(templateFileName);
//⽣成数据
File docFile = new File(destDir + "\\" + destFileName);
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
//输出⽂件
template.process(dataMap, out);
System.out.println(destFileName+" 模板⽂件创建成功 !");
} catch (Exception e) {
e.printStackTrace();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论