肤浅的理解:
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。