您的位置:首页 > Web前端 > JavaScript

Freemarker: 把 .ftl 换成 .htm 或者 .jsp类型的, 是否也可以让他生成静态的 .htm 或者 .jsp ?

2017-01-05 13:02 399 查看
首先,由于要使用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的规范和格式来,无论什么常用的后缀都是可以运行的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: