本例旨在演示Servlet整合FreeMarker的功能,具体的操作步骤下面具体介绍,FreeMarker.jar下载地址。
第一步:创建Web项目(本例使用的是Eclipse),FreeMarkerWeb。
第二步:创建Blog对象,用于封装数据。
public class Bolg {
private String title; // 博客标题
private Date date; // 创建日期
private String content; // 博客内容
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
第三步:创建用于生成List<Object>的数据工具DataUtils。
public class DataUtils {
/**
* 创建博客列表信息列表
* @return
*/
public static List builtDataList() {
List list = new ArrayList();
for(int i=1;i<10;i++){
Bolg bolg = new Bolg();
bolg.setTitle("标题"+i);
bolg.setDate(new Date());
bolg.setContent("内容文本。。。。。。");
list.add(bolg);
}
return list;
}
}
第四步:构建Freemarker中需要使用的Configuration。
public class FreeMarkerUtils {
private static Configuration configuration;
/**
* 构建Configuration
* 在整个应用的生命周期中,这个后工作你应该只做一次 创建和调整配置
* @return
*/
private static Configuration bulitConfiguration() {
if(null==configuration){
configuration = new Configuration();
//构建 \WEB-INF\ftl 的文件路径
String path = FreeMarkerUtils.class.getResource("/").getPath();
path = path.substring(1, path.indexOf("classes"));
File ftlPathDir = new File(path+File.separator+"ftl");
try {
configuration.setDirectoryForTemplateLoading(ftlPathDir);
configuration.setObjectWrapper(new DefaultObjectWrapper());
} catch (IOException e) {
e.printStackTrace();
}
return configuration;
}
return configuration;
}
/**
* 获取模板Template
* @param ftlName
* @return
*/
public static Template getTemplate(String ftlName){
try {
Template template = bulitConfiguration().getTemplate(ftlName);
return template;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
第五步:创建Servlet(FreeMarkerServlet),并在web.xml配置FreeMarkerServlet。本例使用了Date对象,所以需要进行日期转换。
${parameters.fieldDate?date} //标准日期转日期字符串
${parameters.fieldDate?datetime} //标准日期转日期+时间字符串
${parameters.fieldDate?string("yyyy-MM-ddHH:mm:ss")} //标准日期转自定格式 字符串
/**
* Servlet implementation class FreeMarkerServlet
*/
@WebServlet("/FreeMarkerServlet")
public class FreeMarkerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
/* 在整个应用的生命周期中,这个工作可以执行多次 */
// 获取或创建模板
Template template = FreeMarkerUtils.getTemplate("listObject.ftl");
// 创建数据模型
Map root = new HashMap();
root.put("user", "Big Joe");
Map latest = new HashMap();
root.put("lastVisit", latest);
latest.put("date", new Date());
latest.put("ip", "green mouse");
root.put("bolgs", DataUtils.builtDataList());
/* 将模板和数据模型合并 */
Writer out = new OutputStreamWriter(System.out);
try {
template.process(root, out);
} catch (TemplateException e) {
e.printStackTrace();
}
out.flush();
System.out.println("输出结束。。。。。。");
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
web.xml
<servlet>
<servlet-name>freeMarkerServlet</servlet-name>
<servlet-class>com.mahaochen.freemarker.servlet.FreeMarkerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>freeMarkerServlet</servlet-name>
<url-pattern>/servlet/freeMarkerServlet</url-pattern>
</servlet-mapping>
第六步:由于FreeMarker需要ftl(模板文件),在WEB-INF/ftl创建listObject.ftl。
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>You Last Visit:</p>
<hr />
${lastVisit.date?date}<br />
${lastVisit.ip} <br />
<hr />
<table>
<#list bolgs as bolg>
<tr>
<td>${bolg.title}</td>
<td>${bolg.date?string("yyyy-MM-dd HH:mm:ss")}</td>
<td>${bolg.content}</td>
</tr>
</#list>
</table>
</body>
</html>