读书人

FreeMarker 事例

发布时间: 2012-11-23 22:54:33 作者: rapoo

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。

?

?

读书人网 >Web前端

热点推荐