freemarker入门笔记之一:永恒的helloword


最近由于工作需要接触了freemarker,把学习过程记下来,作为日后复习的根据,同时也算是分享知识了。

好吧,废话少说,进入正题。

freemarker是一种模板引擎,使用目的是使业务逻辑层和表现层分离。与之功能类似的还有velocity和Jsp。其中velocity也是一种模板引擎,而Jsp是动态页面技术。

使用步骤如下:

1、新建web工程,命名为:helloFreemarker

2、下载并导入最新的freemarker.jar

3、准备模板文件

freemarker的模板文件其实和html文件差不多,我们先来看一个html文件:

 
 
  Welcome! 
 
 
  

用户:云端

信息:hello freemarker!

在这个html文件中,所有内容都是固定的,如果我们想让文件中的内容随情况不同动态的改变——比如,不同的用户登录会显示不同的用户名和信息,这时就可以用到freemarker了。

freemarker的模板文件后缀是.ftl,形式如下:

 
 
  Welcome! 
 
 
  

用户:${name}

信息:${message}!

是不是和html很像?

其中的${name}和${message}会被freemarker用数据模型中的数据替换掉,这样就使页面上的值能随情况不同而变化了。

说实话这种形式挺像Jsp+El表达式的,都是利用占位符来替换页面内容。

总之,模板文件就算准备好了。

WEB-INF下新建文件夹temp,把模板文件放进去,放好后结构目录如下:

freemarker入门笔记之一:永恒的helloword_第1张图片

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的配置也贴出来,供参考。
 
    FirstFreeMarkerServlet
    /hello
  	
  
    index.jsp
  


参考文章:http://xiaopihai.iteye.com/blog/364030


你可能感兴趣的:(freemarker,HTML,实例)