最近由于工作需要接触了freemarker,把学习过程记下来,作为日后复习的根据,同时也算是分享知识了。
好吧,废话少说,进入正题。
freemarker是一种模板引擎,使用目的是使业务逻辑层和表现层分离。与之功能类似的还有velocity和Jsp。其中velocity也是一种模板引擎,而Jsp是动态页面技术。
使用步骤如下:
1、新建web工程,命名为:helloFreemarker
2、下载并导入最新的freemarker.jar
3、准备模板文件
freemarker的模板文件其实和html文件差不多,我们先来看一个html文件:
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>用户:云端</h1>
<h3>信息:hello freemarker!</h3>
</body>
</html>
在这个html文件中,所有内容都是固定的,如果我们想让文件中的内容随情况不同动态的改变——比如,不同的用户登录会显示不同的用户名和信息,这时就可以用到freemarker了。
freemarker的模板文件后缀是.ftl,形式如下:
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>用户:${name}</h1>
<h3>信息:${message}!</h3>
</body>
</html>
是不是和html很像?
其中的${name}和${message}会被freemarker用数据模型中的数据替换掉,这样就使页面上的值能随情况不同而变化了。
说实话这种形式挺像Jsp+El表达式的,都是利用占位符来替换页面内容。
总之,模板文件就算准备好了。
在WEB-INF下新建文件夹temp,把模板文件放进去,放好后结构目录如下:
4、新建一个servlet,代码需要如下五步:
(1)创建配置实例
(2)创建数据模型
(3)获取模板
(4)把模板与数据模型合并
(5)输出
具体代码如下:
public class FirstFreeMarkerServlet extends HttpServlet
{
//1、创建配置实例:负责管理FreeMarker模板的Configuration实例
private Configuration cfg = null;
public void init() throws ServletException
{
//创建一个Configuration实例
cfg = new Configuration();
//指定模板文件位置
cfg.setServletContextForTemplateLoading(getServletContext(),"/WEB-INF/temp");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
//2、准备模型数据
Map map = new HashMap();
map.put("message", "hello freemarker");
map.put("name", "云端");
//3、获取模板文件
Template temp = cfg.getTemplate("test.ftl");
//设置编码,解决中文乱码
cfg.setEncoding(Locale.CHINA,"UTF-8");
//4、开始准备生成输出
//- 使用模板文件的Charset作为本页面的charset
//- 使用text/html MIME-type
resp.setContentType("text/html; charset="+temp.getEncoding());
//5、输出
//准备输出对象
Writer out = resp.getWriter();
//合并数据与模型,用out对象输出
try
{
temp.process(map, out);
} catch (TemplateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void destroy()
{
super.destroy();
}
}
5、发布项目,到浏览器输入http://127.0.0.1:8080/helloFreemarker/hello,就可以看到效果了。
最后把servlet的配置也贴出来,供参考。
<servlet-mapping>
<servlet-name>FirstFreeMarkerServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
参考文章:http://xiaopihai.iteye.com/blog/364030