天天看點

我的第一個FreeMarker程式

1、java應用程式中

??? 我用maven導入FreeMarker的jar包

???

??? <dependency>

????? <groupid>freemarker</groupid>

????? <artifactid>freemarker</artifactid>

????? <version>2.3.8</version>

??? </dependency>

??? package com.test;

import java.io.IOException;

import java.io.StringWriter;

import java.util.HashMap;

import java.util.Map;

import freemarker.cache.ClassTemplateLoader;

import freemarker.template.Configuration;

import freemarker.template.DefaultObjectWrapper;

import freemarker.template.Template;

import freemarker.template.TemplateException;

public class Test {

???

??? public static void main(String[] args) {

??????? Configuration configuration = new Configuration();

??????? configuration.setObjectWrapper(new DefaultObjectWrapper());

??????? configuration.setTemplateLoader(new ClassTemplateLoader(Test.class, "/com/test"));

??????? try {

??????????? Template template = configuration.getTemplate("temp.ftl");

??????????? StringWriter writer = new StringWriter();

??????????? Map<string, object=""> context = new HashMap<string, object="">();

???????????

??????????? context.put("message", "我的第一個FreeMarker程式");

???????????

??????????? template.process(context, writer);

??????????? System.out.println(writer.toString());

??????? } catch (IOException e) {

??????????? // TODO Auto-generated catch block

??????????? e.printStackTrace();

??????? } catch (TemplateException e) {

??????????? // TODO Auto-generated catch block

??????????? e.printStackTrace();

??????? }

??? }

}

這裡是用java應用程式,需要加入下面兩句(設定模闆檔案載入):

方法一:

? configuration.setObjectWrapper(new DefaultObjectWrapper());

? configuration.setTemplateLoader(new ClassTemplateLoader(Test.class, "/com/test"));

其中"/com/test" 是模闆檔案所在的檔案夾,前面的“/”必須,這裡我的模闆檔案和目前java類在同一路徑下,則這樣寫,如果你的模闆檔案在src跟目錄下,這裡隻需要寫“/”就可以了

context.put("message", "我的第一個FreeMarker程式");

是模闆檔案中用到的變量,map中的變量可以是javabean,也可以是對象

方法二:

configuration.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates");

這裡主要針對Servlet的時候,當然在Servlet中也可以用方法一提到的寫法

package com.newegg.lab.freemarker.servlet;

import java.io.IOException;

import java.io.StringWriter;

import java.io.Writer;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import freemarker.cache.ClassTemplateLoader;

import freemarker.template.Configuration;

import freemarker.template.DefaultObjectWrapper;

import freemarker.template.Template;

import freemarker.template.TemplateException;

public class FreemarkerServlet extends javax.servlet.http.HttpServlet implements

??????? javax.servlet.Servlet {

??? private Configuration configuration;

??? private Template template;

???

??? public FreemarkerServlet() {

??????? super();

??? }

??? @Override

??? public void destroy() {

??????? // TODO Auto-generated method stub

??????? configuration = null;

??? }

??? @Override

??? public void init() throws ServletException {

??????? // TODO Auto-generated method stub

??????? configuration = new Configuration();

??????? configuration.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates");

//??????? configuration.setObjectWrapper(new DefaultObjectWrapper());

//??????? configuration.setTemplateLoader(new ClassTemplateLoader(FreemarkerServlet.class, "/"));

??? }

???

??? protected void doGet(HttpServletRequest request,

??????????? HttpServletResponse response) throws ServletException, IOException {

??????? // TODO Auto-generated method stub

??????? this.doPost(request, response);

??? }

???

??? protected void doPost(HttpServletRequest request,

??????????? HttpServletResponse response) throws ServletException, IOException {

??????? // TODO Auto-generated method stub

??????? Map root = new HashMap();

??????? root.put("message", "Hello World!的的的的");

??????? // Get the templat object

??????? Template t = configuration.getTemplate("test.ftl");

??????? // Prepare the HTTP response:

??????? // - Use the charset of template for the output

??????? // - Use text/html MIME-type

??????? response.setContentType("text/html; charset=" + t.getEncoding());

??????? Writer out = response.getWriter();

??????? // Merge the data-model and the template

??????? try {

??????????? t.process(root, out);

??????????? StringWriter stringWriter = new StringWriter();

??????????? t.process(root, stringWriter);

??????????? System.out.println(stringWriter.toString());

??????? } catch (TemplateException e) {

??????????? throw new ServletException(

??????????????????? "Error while processing FreeMarker template", e);

??????? }

??? }

}

模闆檔案中需要使用 ${}将java類中在Map對象中聲明的變量包圍起來就可以了

例如模闆檔案:

//描述資訊是 : ${message}
      

則得到的結果是:

//描述資訊是 : Hello World!的的的的
      
我的第一個FreeMarker程式

禮物 2008-09-17 00:00 發表評論