肤浅的理解:
??? 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(); //开始设置Freemarker Configuration 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。
?
?
1 楼
llchen
2012-04-17
有完整的代码没?