1. 程式人生 > >使用freemarker生成靜態頁面

使用freemarker生成靜態頁面

urn 參數 ktr web-inf puts get out () jsp

一 說明
需要在spring mvc項目中加入下列包:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
如果你還想使用freemarker實現表現層,那麽還需要導入下列包:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework.version}</version>
</dependency>
二 實現工具類

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

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

/**
* 文件名:CreateStaticHtml.java
*/
public class CreateStaticHtml {

private String encoding;//模板文件編碼

public CreateStaticHtml(){
this.encoding = "UTF-8";
}

public CreateStaticHtml(String encoding){
this.encoding = encoding;
}

/**
* 創建getTemplate方法用於獲取freemarker的模板Template 對象
*
* @param cfg
* @param name
* @return
* @throws IOException Template
*/
private Template getTemplate(Configuration cfg, String name)
throws IOException {
cfg.setDefaultEncoding(encoding);
cfg.setNumberFormat("#");
return cfg.getTemplate(name);
}

/**
* 創建doWirte方法用於往磁盤上寫生成好的文件
*
* @param t
* @param path
* @param req
*/
private void doWirte(Template t, String path, Map<String, Object> req) {
try {
File staticPage = new File(path);
System.out.println(staticPage.getAbsolutePath());
if (!staticPage.exists())
staticPage.createNewFile();
Writer wt = new OutputStreamWriter(
new FileOutputStream(staticPage), encoding);
t.setEncoding("UTF-8");
t.process(req, wt);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 此方法用於生成靜態頁
*
* @param args
* 模板頁面參數
* @param templatePath
* 模板頁面目錄
* @param templateFileName
* 模板文件名
* @param staticPagename
* 生成靜態文件名(包含路徑)
* void
* @author:彭國卿
* @date:2013-5-17
*/
public void createStaticPage(Map<String, Object> args, String templatePath,
String templateFileName, String staticPagename) {
try {
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File(templatePath));
Template tIndex = getTemplate(cfg, templateFileName);
doWirte(tIndex, staticPagename, args);
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "靜態頁面第一次生成測試");


new CreateStaticHtml().createStaticPage(map,"E:/penggq-tec/src/main/webapp/WEB-INF/ftls/freemarker/","test.ftl","E:/penggq-tec/src/main/webapp/WEB-INF/ftls/freemarker/test.htm");
}
}

三 使用
在ftl模板中,使用標簽可以將數據替換,但是不能使用jsp標簽
四 其他
上文生成靜態文件的工具類可以自行修改,豐富內容

使用freemarker生成靜態頁面