当前位置: 代码迷 >> Web前端 >> FreeMarker 事例
  详细解决方案

FreeMarker 事例

热度:1191   发布时间:2012-11-23 22:54:33.0
FreeMarker 例子

肤浅的理解:

??? FreeMarker是一种模板引擎,纯java开发,开源。在用FreeMarker开发时,我们需要事先定义相应的模板文件,FreeMarker模板文件(*.ftl)是一个文本文件,开发者可以在这个文件中加入FreeMarker表达式,这些表达式就好比jsp中的jstl标签一样,在客户端显示时会被真实的数据替换。


示例,大体分为三步:

1、创建一个web工程。

2、在lib目录中导入freemarker.jar。

3、编写一个模板文件和一个供客户端访问的servlet。

??????? *模板文件的内容可以是HTML+FreeMarker表达式,servlet将业务数据准备好,并且初始化FreeMarker,设置好编码方式(默认编码和响应编码都需要设置,否则会有乱码问题)和需要调用的模板文件。

?

下面是模板文件:HelloFreeMarker.ftl

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>MyFreeMarkerTestHtml.html</title>
	
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

  </head>
  
  <body>
    <font color="red">${hello}</font><br/>
    <table>
    	<tr>
    		<td>序号</td>
    		<td>文件名称</td>
    		<td>文件类型</td>
    		<td>修改时间</td>
    		<td>文件大小</td>
    		<td>位置</td>
    	</tr>
    	<#list files as fs>
    	<tr>
    		<td>${fs.id}</td>
    		<td>${fs.fileName}</td>
    		<td>${fs.type}</td>
    		<td>${fs.modifyDate}</td>
    		<td>${fs.size}</td>
    		<td>${fs.absolutePath}</td>
    	</tr>
    	</#list> 
    </table>
  </body>
</html>

?

servlet:FreeMarkerTest.java

package test.web;

import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
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;

import main.com.zephyr.service.impl.HtmlFileServiceImpl;

public class FreeMarkerTest extends HttpServlet {

	private static final long serialVersionUID = 3452052702326883786L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		//业务数据获取类
		HtmlFileServiceImpl hfs = new HtmlFileServiceImpl();
		//该方法遍历一个指定目录下的文件,将文件名、文件类型、文件大小等信息封装成一个类,最后将这些类添加到一个list中
		List list = hfs.browseDirectory();

		//开始设置Freemarker
		Configuration cfg = new Configuration();
		//设置Freemarker默认编码,如果不设,FreeMarker在遇见中文操作系统时,会使用默认的GBK编码方式
		cfg.setDefaultEncoding("UTF-8");
		//设置模板文件所在的目录
		cfg.setServletContextForTemplateLoading(getServletContext(),
				"WEB-INF/templates");

		// 取得模板文件
		Template t = cfg.getTemplate("HelloFreeMarker.ftl");
		//设置响应编码
		response.setContentType("text/html; charset=UTF-8");

		//将需要在客户端浏览器中显示的业务数据放在一个map中,传递给FreeMarker 
		Map root = new HashMap();
		root.put("hello", "Hello FreeMarker!");
		root.put("files", list);

		Writer out = response.getWriter();
		try {
			//在servlet中,输出流一定要从response中获取
			t.process(root, out);
		} catch (TemplateException e) {
			e.printStackTrace();
		}
	}

}

?

最后,在web容器中发布该工程,用浏览器访问FreeMarkerTest,我们就可以看到最终的效果了。

附件中是项目要用到的jar包,版本是2.3.15。

?

?

1 楼 llchen 2012-04-17  
有完整的代码没?