用到的jar:
freemarker.jar
httpclient-4.0.1.jar
httpcore-4.2.4.jar
jsp-api.jar
servlet-api.jar
实例1:demo01:
package freemarkerTest02;
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
public class Test {
private Configuration cfg; //模版配置对象
public void init() throws Exception {
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
cfg.setDefaultEncoding("GBK");
//设置FreeMarker的模版文件夹位置
cfg.setDirectoryForTemplateLoading(new File("G:\\freemarkerTest01\"));
}
public void process() throws Exception {
//构造填充数据的Map
Map map = new HashMap();
map.put("user", "lavasoft");
map.put("url", "http://www.baidu.com/");
map.put("name", "百度");
//创建模版对象
Template t = cfg.getTemplate("test.ftl");
//在模版上执行插值操作,并输出到制定的输出流中
t.process(map, new OutputStreamWriter(System.out));
}
public static void main(String[] args) throws Exception {
Test hf = new Test();
hf.init();
hf.process();
}
}
模板G:\\freemarkerTest01\\test.ftl 如下:
Welcome ${user}!
Our latest product:
${name}!
尊敬的用户你好:
用户名:${user};
URL: ${url};
姓名: ${name}
运行结果为:
Welcome lavasoft!
Our latest product:
百度!
尊敬的用户你好:
用户名:lavasoft;
URL: http://www.baidu.com/;
姓名: 百度
实例2:
package freemarkerTest02;
import freemarker.template.Template;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
public class Test2 {
public static void main(String[] args) throws Exception{
//创建一个模版对象
Template t = new Template(null, new StringReader("用户名:${user};URL: ${url};姓名: ${name}"), null);
//创建插值的Map
Map map = new HashMap();
map.put("user", "lavasoft");
map.put("url", "http://www.baidu.com/");
map.put("name", "百度");
//执行插值,并输出到指定的输出流中
try{
Writer wrt = new OutputStreamWriter(System.out);
t.process(map, wrt);
}catch(Exception e){
e.printStackTrace();
}
}
}
运行结果为:
用户名:lavasoft;URL: http://www.baidu.com/;姓名: 百度
实例3:
web.xml如下所示:
freemarkerTest01
hello
com.hunter.servlet.HelloServlet
hello
/hello
index.html
/freemarkerTest01/src/com/hunter/servlet/HelloServlet.java 如下所示:
package com.hunter.servlet;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class HelloServlet extends HttpServlet {
private Configuration cfg;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try
{
//初始化Freemarker
System.out.println(getServletContext());
System.out.println("here is my servlet.init");
cfg = new Configuration();
cfg.setServletContextForTemplateLoading(getServletContext(), "/WEB-INF/templates");
System.out.println("here is my servlet.service");
Map root = new HashMap();
root.put("message", "Hello FreeMarker edit by hunter!");
//取得模版文件
Template t = cfg.getTemplate("hello.ftl");
// 开始准备生成输出
// - 使用模版文件的charset作为本页面的charset
// - 使用text/html MIME-type
resp.setContentType("text/html; charset=" + t.getEncoding());
Writer out = resp.getWriter();
//合并数据模型和模版,并将结果输出到out中
t.process(root, out);
}
catch (Exception e){
e.printStackTrace();
}
}
}
/freemarkerTest01/WebContent/WEB-INF/templates/hello.ftl 如下所示:
${message}
访问 http://localhost:8010/freemarkerTest01/hello
结果为:
freemarker.jar
httpclient-4.0.1.jar
httpcore-4.2.4.jar
jsp-api.jar
servlet-api.jar
实例1:demo01:
package freemarkerTest02;
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
public class Test {
private Configuration cfg; //模版配置对象
public void init() throws Exception {
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
cfg.setDefaultEncoding("GBK");
//设置FreeMarker的模版文件夹位置
cfg.setDirectoryForTemplateLoading(new File("G:\\freemarkerTest01\"));
}
public void process() throws Exception {
//构造填充数据的Map
Map map = new HashMap();
map.put("user", "lavasoft");
map.put("url", "http://www.baidu.com/");
map.put("name", "百度");
//创建模版对象
Template t = cfg.getTemplate("test.ftl");
//在模版上执行插值操作,并输出到制定的输出流中
t.process(map, new OutputStreamWriter(System.out));
}
public static void main(String[] args) throws Exception {
Test hf = new Test();
hf.init();
hf.process();
}
}
模板G:\\freemarkerTest01\\test.ftl 如下:
Welcome ${user}!
Our latest product:
${name}!
尊敬的用户你好:
用户名:${user};
URL: ${url};
姓名: ${name}
运行结果为:
Welcome lavasoft!
Our latest product:
百度!
尊敬的用户你好:
用户名:lavasoft;
URL: http://www.baidu.com/;
姓名: 百度
实例2:
package freemarkerTest02;
import freemarker.template.Template;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
public class Test2 {
public static void main(String[] args) throws Exception{
//创建一个模版对象
Template t = new Template(null, new StringReader("用户名:${user};URL: ${url};姓名: ${name}"), null);
//创建插值的Map
Map map = new HashMap();
map.put("user", "lavasoft");
map.put("url", "http://www.baidu.com/");
map.put("name", "百度");
//执行插值,并输出到指定的输出流中
try{
Writer wrt = new OutputStreamWriter(System.out);
t.process(map, wrt);
}catch(Exception e){
e.printStackTrace();
}
}
}
运行结果为:
用户名:lavasoft;URL: http://www.baidu.com/;姓名: 百度
实例3:
web.xml如下所示:
freemarkerTest01
hello
com.hunter.servlet.HelloServlet
hello
/hello
index.html
/freemarkerTest01/src/com/hunter/servlet/HelloServlet.java 如下所示:
package com.hunter.servlet;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class HelloServlet extends HttpServlet {
private Configuration cfg;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try
{
//初始化Freemarker
System.out.println(getServletContext());
System.out.println("here is my servlet.init");
cfg = new Configuration();
cfg.setServletContextForTemplateLoading(getServletContext(), "/WEB-INF/templates");
System.out.println("here is my servlet.service");
Map root = new HashMap();
root.put("message", "Hello FreeMarker edit by hunter!");
//取得模版文件
Template t = cfg.getTemplate("hello.ftl");
// 开始准备生成输出
// - 使用模版文件的charset作为本页面的charset
// - 使用text/html MIME-type
resp.setContentType("text/html; charset=" + t.getEncoding());
Writer out = resp.getWriter();
//合并数据模型和模版,并将结果输出到out中
t.process(root, out);
}
catch (Exception e){
e.printStackTrace();
}
}
}
/freemarkerTest01/WebContent/WEB-INF/templates/hello.ftl 如下所示:
${message}
访问 http://localhost:8010/freemarkerTest01/hello
结果为:
Hello FreeMarker edit by hunter!
本文介绍了Freemarker模板引擎的三个实战案例,包括通过Configuration加载模板、使用StringReader加载模板字符串以及在Servlet环境中整合Freemarker进行动态网页生成。

被折叠的 条评论
为什么被折叠?



