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!的的的的
禮物 2008-09-17 00:00 發表評論