FreeMarker 例子

肤浅的理解:

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

jar包地址:http://www.freemarker.org/freemarkerdownload.html
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。
FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。
它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。


示例,大体分为三步:

1、创建一个web工程。

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

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

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

 

下面是模板文件:HelloFreeMarker.ftl

Html代码   收藏代码
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  2. <html>  
  3.   <head>  
  4.     <title>MyFreeMarkerTestHtml.html</title>  
  5.       
  6.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  7.   
  8.   </head>  
  9.     
  10.   <body>  
  11.     <font color="red">${hello}</font><br/>  
  12.     <table>  
  13.         <tr>  
  14.             <td>序号</td>  
  15.             <td>文件名称</td>  
  16.             <td>文件类型</td>  
  17.             <td>修改时间</td>  
  18.             <td>文件大小</td>  
  19.             <td>位置</td>  
  20.         </tr>  
  21.         <#list files as fs>  
  22.         <tr>  
  23.             <td>${fs.id}</td>  
  24.             <td>${fs.fileName}</td>  
  25.             <td>${fs.type}</td>  
  26.             <td>${fs.modifyDate}</td>  
  27.             <td>${fs.size}</td>  
  28.             <td>${fs.absolutePath}</td>  
  29.         </tr>  
  30.         </#list>   
  31.     </table>  
  32.   </body>  
  33. </html>  

 

servlet:FreeMarkerTest.java

Java代码   收藏代码
  1. package test.web;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.Writer;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.http.HttpServlet;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13.   
  14. import freemarker.template.Configuration;  
  15. import freemarker.template.Template;  
  16. import freemarker.template.TemplateException;  
  17.   
  18. import main.com.zephyr.service.impl.HtmlFileServiceImpl;  
  19.   
  20. public class FreeMarkerTest extends HttpServlet {  
  21.   
  22.     private static final long serialVersionUID = 3452052702326883786L;  
  23.   
  24.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  25.             throws ServletException, IOException {  
  26.         doPost(request, response);  
  27.     }  
  28.   
  29.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  30.             throws ServletException, IOException {  
  31.   
  32.         //业务数据获取类  
  33.         HtmlFileServiceImpl hfs = new HtmlFileServiceImpl();  
  34.         //该方法遍历一个指定目录下的文件,将文件名、文件类型、文件大小等信息封装成一个类,最后将这些类添加到一个list中  
  35.         List list = hfs.browseDirectory();  
  36.   
  37.         //开始设置Freemarker  
  38.         Configuration cfg = new Configuration();  
  39.         //设置Freemarker默认编码,如果不设,FreeMarker在遇见中文操作系统时,会使用默认的GBK编码方式  
  40.         cfg.setDefaultEncoding("UTF-8");  
  41.         //设置模板文件所在的目录  
  42.         cfg.setServletContextForTemplateLoading(getServletContext(),  
  43.                 "WEB-INF/templates");  
  44.   
  45.         // 取得模板文件  
  46.         Template t = cfg.getTemplate("HelloFreeMarker.ftl");  
  47.         //设置响应编码  
  48.         response.setContentType("text/html; charset=UTF-8");  
  49.   
  50.         //将需要在客户端浏览器中显示的业务数据放在一个map中,传递给FreeMarker   
  51.         Map root = new HashMap();  
  52.         root.put("hello""Hello FreeMarker!");  
  53.         root.put("files", list);  
  54.   
  55.         Writer out = response.getWriter();  
  56.         try {  
  57.             //在servlet中,输出流一定要从response中获取  
  58.             t.process(root, out);  
  59.         } catch (TemplateException e) {  
  60.             e.printStackTrace();  
  61.         }  
  62.     }  
  63.   
  64. }  

 结构:FreeMarker 例子_第1张图片

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

转自:http://format-me.iteye.com/blog/543905

http://www.blogjava.net/crazycoding/archive/2010/02/06/312192.html


你可能感兴趣的:(FreeMarker 例子)