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();//开始设置FreemarkerConfiguration 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。
?
?