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. <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
  2. <html>
  3. <head>
  4. <title>MyFreeMarkerTestHtml.html</title>
  5. <metahttp-equiv="content-type"content="text/html;charset=UTF-8">
  6. </head>
  7. <body>
  8. <fontcolor="red">${hello}</font><br/>
  9. <table>
  10. <tr>
  11. <td>序号</td>
  12. <td>文件名称</td>
  13. <td>文件类型</td>
  14. <td>修改时间</td>
  15. <td>文件大小</td>
  16. <td>位置</td>
  17. </tr>
  18. <#listfilesasfs>
  19. <tr>
  20. <td>${fs.id}</td>
  21. <td>${fs.fileName}</td>
  22. <td>${fs.type}</td>
  23. <td>${fs.modifyDate}</td>
  24. <td>${fs.size}</td>
  25. <td>${fs.absolutePath}</td>
  26. </tr>
  27. </#list>
  28. </table>
  29. </body>
  30. </html>

servlet:FreeMarkerTest.java

Java代码 收藏代码
  1. packagetest.web;
  2. importjava.io.IOException;
  3. importjava.io.Writer;
  4. importjava.util.HashMap;
  5. importjava.util.List;
  6. importjava.util.Map;
  7. importjavax.servlet.ServletException;
  8. importjavax.servlet.http.HttpServlet;
  9. importjavax.servlet.http.HttpServletRequest;
  10. importjavax.servlet.http.HttpServletResponse;
  11. importfreemarker.template.Configuration;
  12. importfreemarker.template.Template;
  13. importfreemarker.template.TemplateException;
  14. importmain.com.zephyr.service.impl.HtmlFileServiceImpl;
  15. publicclassFreeMarkerTestextendsHttpServlet{
  16. privatestaticfinallongserialVersionUID=3452052702326883786L;
  17. publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
  18. throwsServletException,IOException{
  19. doPost(request,response);
  20. }
  21. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
  22. throwsServletException,IOException{
  23. //业务数据获取类
  24. HtmlFileServiceImplhfs=newHtmlFileServiceImpl();
  25. //该方法遍历一个指定目录下的文件,将文件名、文件类型、文件大小等信息封装成一个类,最后将这些类添加到一个list中
  26. Listlist=hfs.browseDirectory();
  27. //开始设置Freemarker
  28. Configurationcfg=newConfiguration();
  29. //设置Freemarker默认编码,如果不设,FreeMarker在遇见中文操作系统时,会使用默认的GBK编码方式
  30. cfg.setDefaultEncoding("UTF-8");
  31. //设置模板文件所在的目录
  32. cfg.setServletContextForTemplateLoading(getServletContext(),
  33. "WEB-INF/templates");
  34. //取得模板文件
  35. Templatet=cfg.getTemplate("HelloFreeMarker.ftl");
  36. //设置响应编码
  37. response.setContentType("text/html;charset=UTF-8");
  38. //将需要在客户端浏览器中显示的业务数据放在一个map中,传递给FreeMarker
  39. Maproot=newHashMap();
  40. root.put("hello","HelloFreeMarker!");
  41. root.put("files",list);
  42. Writerout=response.getWriter();
  43. try{
  44. //在servlet中,输出流一定要从response中获取
  45. t.process(root,out);
  46. }catch(TemplateExceptione){
  47. e.printStackTrace();
  48. }
  49. }
  50. }

结构:FreeMarker 例子

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

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

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


你可能感兴趣的:(freemarker)