我们都要好好的.
---幸运皮
项目中用到了hibernate,所以,也有一些与这个无关的文件,相关的文件已经用红框框圈出来,具体步骤记录一下:
步骤一:
导入jar包,一个是freemarker的包,一个是在myeclipse中引入struts2包.freemarker的jar包可以在
http://www.java.sh/resource/library/freemarker2.3.18.html 下载.
步骤二:
配置struts.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<package namespace="/" name="default" extends="struts-default">
<action name="index" class="com.guanghua.action.HtmlTest">
<result type="redirect">/${msg}</result>
</action>
</package>
</struts>
步骤三:
完成工具类:CreateHtml.java:
package com.guanghua.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;
import org.apache.struts2.ServletActionContext;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class CreateHtml {
/**
*
* @param ftl 模板文件
* @param htmlName 生成html文件
* @param map
* @param relaPath
* @throws IOException
* @throws TemplateException
*/
public void init (String ftl,String htmlName,Map map,String relaPath) throws IOException,TemplateException{
Configuration cfg=new Configuration();
cfg.setServletContextForTemplateLoading(ServletActionContext.getServletContext(), "/");
cfg.setEncoding(Locale.getDefault(), "UTF-8");
Template template=cfg.getTemplate(ftl);
template.setEncoding("UTF-8");
String path=ServletActionContext.getServletContext().getRealPath("/");
File fileName=new File(path+htmlName);
Writer out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName),"UTF-8"));
template.process(map, out);
out.flush();
out.close();
}
}
步骤四:
测试类:HtmlTest.java
package com.guanghua.action;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.guanghua.data.Mapping;
import com.guanghua.util.CreateHtml;
import com.opensymphony.xwork2.ActionSupport;
import freemarker.template.TemplateException;
public class HtmlTest extends ActionSupport{
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String execute()
{
CreateHtml createHtml=new CreateHtml();
//Mapping 是数据库里面的一个表对应的java bean文件
List<Mapping> persons=new ArrayList<Mapping>();
for(int i=0;i<5;i++){
Mapping p=new Mapping();
p.setId(i);
p.setChs("你好"+i);
p.setCht("cht"+i);
p.setEng("eng" + i);
p.setJan("jan" + i);
persons.add(p);
}
Map<String,List<Mapping>> map=new HashMap<String, List<Mapping>>();
map.put("personlist", persons);
String htmlName="personlist.html";
String ftl="person.ftl";
String relaPath="index.jsp";
try {
createHtml.init(ftl, htmlName, map, relaPath);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
this.msg=htmlName;
return SUCCESS;
}
}
步骤五:
模板person.ftl:
<html>
<head>
<title></title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<table style="text-align:center;FONT-SIZE: 11pt; WIDTH: 600px; FONT-FAMILY: 宋体; BORDER-COLLAPSE: collapse" borderColor=#3399ff cellSpacing=0 cellPadding=0 align=center border=1>
<tr>
<td><b>编号</b></td>
<td><b>简体中文</b></td>
<td><b>繁体中文</b></td>
<td><b>英文</b></td>
<td><b>日文</b></td>
</tr>
<#list personlist as person>
<tr>
<td>${person.id}</td>
<td>${person.chs}</td>
<td>${person.cht}</td>
<td>${person.eng}</td>
<td>${person.jan}</td>
</tr>
</#list>
</body>
</html>
最后访问index.action
ps: 模板里面本来没有头文件,总是出乱码,后来加上了就好了.
参考:http://rwhaoo.blog.163.com/blog/static/171908088201096105147871/