肤浅的理解:
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
- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
- <html>
- <head>
- <title>MyFreeMarkerTestHtml.html</title>
- <metahttp-equiv="content-type"content="text/html;charset=UTF-8">
- </head>
- <body>
- <fontcolor="red">${hello}</font><br/>
- <table>
- <tr>
- <td>序号</td>
- <td>文件名称</td>
- <td>文件类型</td>
- <td>修改时间</td>
- <td>文件大小</td>
- <td>位置</td>
- </tr>
- <#listfilesasfs>
- <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
- packagetest.web;
- importjava.io.IOException;
- importjava.io.Writer;
- importjava.util.HashMap;
- importjava.util.List;
- importjava.util.Map;
- importjavax.servlet.ServletException;
- importjavax.servlet.http.HttpServlet;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importfreemarker.template.Configuration;
- importfreemarker.template.Template;
- importfreemarker.template.TemplateException;
- importmain.com.zephyr.service.impl.HtmlFileServiceImpl;
- publicclassFreeMarkerTestextendsHttpServlet{
- privatestaticfinallongserialVersionUID=3452052702326883786L;
- publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsServletException,IOException{
- doPost(request,response);
- }
- publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsServletException,IOException{
- //业务数据获取类
- HtmlFileServiceImplhfs=newHtmlFileServiceImpl();
- //该方法遍历一个指定目录下的文件,将文件名、文件类型、文件大小等信息封装成一个类,最后将这些类添加到一个list中
- Listlist=hfs.browseDirectory();
- //开始设置Freemarker
- Configurationcfg=newConfiguration();
- //设置Freemarker默认编码,如果不设,FreeMarker在遇见中文操作系统时,会使用默认的GBK编码方式
- cfg.setDefaultEncoding("UTF-8");
- //设置模板文件所在的目录
- cfg.setServletContextForTemplateLoading(getServletContext(),
- "WEB-INF/templates");
- //取得模板文件
- Templatet=cfg.getTemplate("HelloFreeMarker.ftl");
- //设置响应编码
- response.setContentType("text/html;charset=UTF-8");
- //将需要在客户端浏览器中显示的业务数据放在一个map中,传递给FreeMarker
- Maproot=newHashMap();
- root.put("hello","HelloFreeMarker!");
- root.put("files",list);
- Writerout=response.getWriter();
- try{
- //在servlet中,输出流一定要从response中获取
- t.process(root,out);
- }catch(TemplateExceptione){
- e.printStackTrace();
- }
- }
- }
结构:
最后,在web容器中发布该工程,用浏览器访问FreeMarkerTest,我们就可以看到最终的效果了。
转自:http://format-me.iteye.com/blog/543905
http://www.blogjava.net/crazycoding/archive/2010/02/06/312192.html