Freemarker: 把 .ftl 換成 .htm 或者 .jsp類型的, 是否也可以讓他生成靜態的 .htm 或者 .jsp ?

首先,由於要使用freemarker開發幾套網站前臺頁面的模板,所以想把所有可能性都嘗試一下。

其實上面的標籤大家可能看的彆扭或者奇怪,簡單來說,就是,第一:現在我要在htm或者jsp頁面中添加freemarker標籤看看能不能運行。第二:在htm中寫入freemarker標籤後,能否生成.htm(.html)或者.jsp頁面。

首先,項目結構圖如下:

這裏寫圖片描述

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.nishuibaichuan.freemarker</groupId>
  <artifactId>freemarker-hello</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>freemarker-hello</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.20</version>
    </dependency>
  </dependencies>
</project>
Employeer.java
    private int id;
    private String name;
    private int age;
    省略了setter和getter及其構造方法
FreemarkerUtil.java
package org.nishuibaichuan.freemarker;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class FreemarkerUtil {
    private static FreemarkerUtil util;
    private static Configuration cfg;
    private FreemarkerUtil() {
    }

    public static FreemarkerUtil getInstance(String pname) {
        if(util==null) {
            cfg = new Configuration();
            cfg.setClassForTemplateLoading(FreemarkerUtil.class, pname);
            util = new FreemarkerUtil();
        }
        return util;
    }

    private Template getTemplate(String fname) {
        try {
            return cfg.getTemplate(fname);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 通過標準輸出流輸出模板的結果
     * @param root 數據對象
     * @param fname 模板文件
     */
    public void sprint(Map<String,Object> root,String fname) {
        try {
            getTemplate(fname).process(root, new PrintWriter(System.out));
        } catch (TemplateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * 基於文件的輸出
     * @param root
     * @param fname
     * @param outpath
     */
    public void fprint(Map<String,Object> root,String fname,String outpath) {
        try {
            getTemplate(fname).process(root, new FileWriter(outpath));
        } catch (TemplateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
TestFreemarker.java
package org.nishuibaichuan.freemarker;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;




import org.junit.Before;
import org.junit.Test;
import org.nishuibaichuan.freemarker.FreemarkerUtil;
import org.nishuibaichuan.freemarker.model.Employeer;

public class TestFreemarker {
    private FreemarkerUtil util = FreemarkerUtil.getInstance("/ftl");
    private Map<String,Object> root = new HashMap<String,Object>();
    private String fn = "E:/TEST/freemarker/";

    @Before
    public void setUp() {
        root.put("username", "小張");
    }

    @Test
    public void test01() {
        Employeer emp = new Employeer(1, "小李", 17);
        List<Employeer> emps = Arrays.asList(new Employeer(1, "小李", 22),
                new Employeer(2, "八戒", 444),new Employeer(3, "劉德華", 54));
        root.put("emp", emp);
        root.put("emps", emps);
        util.sprint(root, "01.htm");
        util.fprint(root, "01.htm", fn+"test01.html");
    }

    @Test
    public void test011() {
        Employeer emp = new Employeer(1, "小李", 17);
        List<Employeer> emps = Arrays.asList(new Employeer(1, "小李", 22),
                new Employeer(2, "八戒", 444),new Employeer(3, "劉德華", 54));
        root.put("emp", emp);
        root.put("emps", emps);
        util.sprint(root, "01.htm");
        util.fprint(root, "01.htm", fn+"test01.jsp");
    }

    @Test
    public void test0111() {
        Employeer emp = new Employeer(1, "小李", 17);
        List<Employeer> emps = Arrays.asList(new Employeer(1, "小李", 22),
                new Employeer(2, "八戒", 444),new Employeer(3, "劉德華", 54));
        root.put("emp", emp);
        root.put("emps", emps);
        util.sprint(root, "01.jsp");
        util.fprint(root, "01.jsp", fn+"test0111.jsp");
    }

}
01.ftl
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello:${emp.name}---${emp.id}----${emp.age}</h1>
我是jsp
<#if emp.age lt 18>
    ${emp.name}我小於18歲
<#elseif emp.age gt 60>
    ${emp.name}我大於60歲†
<#else>
    ${emp.name}我會好好工作!œ
</#if>

<#list emps as emp>
    ${emp.id}-----${emp.name}---${emp.age}<br/>
</#list>
</body>
</html>
01.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello:${emp.name}---${emp.id}----${emp.age}</h1>
我是張三
<#--以下顯示瞭如何使用判斷結構,注意在判斷的標籤中不用加入${}-->
<#if emp.age lt 18>
    ${emp.name}是童工
<#elseif emp.age gt 60>
    ${emp.name}應該退休了
<#else>
    ${emp.name}好好工作
</#if>

<#list emps as emp>
    ${emp.id}-----${emp.name}---${emp.age}<br/>
</#list>
</body>
</html>
01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello:${emp.name}---${emp.id}----${emp.age}</h1>
我是jsp
<#if emp.age lt 18>
    ${emp.name}我小於18歲
<#elseif emp.age gt 60>
    ${emp.name}我大於60歲†
<#else>
    ${emp.name}我會好好工作!œ
</#if>

<#list emps as emp>
    ${emp.id}-----${emp.name}---${emp.age}<br/>
</#list>
</body>
</html>

運行之後,結果如下:
這裏寫圖片描述

以上疑問全部解決了,說明只要按照freemarker的規範和格式來,無論什麼常用的後綴都是可以運行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章