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的规范和格式来,无论什么常用的后缀都是可以运行的。

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