`

FreeMarker入门

 
阅读更多

FreeMarker是一个用Java编写的模板引擎,主要用来生成HTML Web页面,特别是基于MVC模式的应用程序。FreeMarker基本可以取代JSP作为表现层技术。

FreeMarker官网http://freemarker.org/

FreeMarker输出=模板+数据模型

 

  • 简单示例

新建模板文件test.ftl

<root name="${root}">
    <id>${elements.id}</id>
    <name>${elements.name}</name>  
    <age>${elements.age}</age>  
    <city>${elements.city}</city>  
</root>

新建测试类

       // 创建一个合适的configuration  
        Configuration cfg = new Configuration();  
        // 获取或创建一个模版  
        Template template = cfg.getTemplate("src/test.ftl");  
        // 创建一个数据模型
        Map<String, Object> root = new HashMap<String, Object>();  
        root.put("root", "root");  
        Map<String, Object> elements = new HashMap<String, Object>();  
        root.put("elements", elements);  
        elements.put("id", "1");  
        elements.put("name", "yel");  
        elements.put("age", "30");  
        elements.put("city", "WH");  
        
        //打印到控制台
        Writer out = new OutputStreamWriter(System.out);  
        //生成到文件  
        Writer outFile = new OutputStreamWriter(new FileOutputStream("src/test.xml"), "utf-8");  
        template.process(root, out);  
        template.process(root, outFile);  
        out.close();  
        outFile.close();

首先加载模板文件test.ftl,封装在Template类中。数据模型封装在Map<String, Object>。最后通过两个输出流分别在文件和控制台中输出。

 

同样的道理可以在servlet中用freemarker生成页面。

修改模板test.ftl,放到/WEB-INF/templates目录下面

<html>
  <body>
    <h3>${message},${name}</h3> 
  </body>
</html> 

新建servlet

public class HelloFreeMarker extends HttpServlet {
	// 负责管理FreeMarker模板的Configuration实例
	private Configuration cfg = null;

	public void init() throws ServletException {
		// 创建一个FreeMarker实例
		cfg = new Configuration();
		// 指定FreeMarker模板文件的位置
		cfg.setServletContextForTemplateLoading(getServletContext(),
				"/WEB-INF/templates");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 建立数据模型
		Map root = new HashMap();
		root.put("message", "hello world");
		root.put("name", "yel");

		// 获取模板文件
		Template t = cfg.getTemplate("test.ftl");

		// 开始准备生成输出
		// 使用模板文件的Charset作为本页面的charset
		// 使用text/html MIME-type
		response.setContentType("text/html;charset=" + t.getEncoding());
		Writer out = response.getWriter();
		// 合并数据模型和模板,并将结果输出到out中
		try {
			t.process(root, out); // 往模板里写数据
		} catch (TemplateException e) {
			e.printStackTrace();
		}
	}

	public void destroy() {
		super.destroy();
	}
}

 最后通过浏览器访问servlet后根据模板生成html页面。

 

  • 常用标签

直接输出值

${}

判断

<#if name == "Yel">Hello,Yel</#if>

循环

<#list users as user> 
 <li>${user.name} 
</#list>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics