struts2+freemarker 生成静态页面

1.创建项目

2.导入struts2的相关jar文件

3.在web.xml中配置如下:


?xml version=
"1.0"
encoding=
"UTF-8"
?>

<
web-app id=
"WebApp_ID"
version=
"2.4"
xmlns=
"http://java.sun.com/xml/ns/j2ee"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>

<
display-name>MyFreemark<
/display-name>

<
filter>

<
filter-name>struts<
/filter-name>

<
filter-class>org.apache.struts2.dispatcher.FilterDispatcher<
/filter-class>

<
/filter>

<
filter-mapping>

<
filter-name>struts<
/filter-name>

<
url-pattern>/*<
/url-pattern>

<
/filter-mapping>

<
welcome-file-list>

<
welcome-file>index.jsp<
/welcome-file>

<
/welcome-file-list>

<
/web-app>


4.创建struts.xml文件,且内容如下:


?xml version=
"1.0"
encoding=
"GBK"
?>

<
!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"


"http://struts.apache.org/dtds/struts-2.0.dtd"
>

<
struts>


<!--- Add packages here -->

<
constant name=
"struts.devMode"
value=
"true"
/>

<
constant name=
"struts.i18n.encoding"
value=
"GBK"
/>

<
package name=
"default"
namespace=
"/"
extends=
"struts-default"
>

<
action name=
"list"
class=
"com.zsw.action.ListAction"
>

<
result type=
"redirect"
>/${msg}<
/result>

<
/action>

<
/package>

<
/struts>


5.创建CreateHtml.java用来生成静态页面


package com.zsw.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 map保存数据
* @param relaPath //在这里没有用到
* @throws IOException
* @throws TemplateException
*/


public
void init(
String ftl,
String htmlName, Map map,
String relaPath)
throws IOException, TemplateException {






//创建Configuration对象

Configuration cfg =
new Configuration();

cfg.setServletContextForTemplateLoading(ServletActionContext.getServletContext(),
"/");

cfg.setEncoding(Locale.getDefault(),
"gbk");




//创建Template对象

Template template = cfg.getTemplate(ftl);

template.setEncoding(
"gbk");




//生成静态页面


String path = ServletActionContext.getServletContext().getRealPath(
"/");

File fileName =
new File(path + htmlName);

Writer out =
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(fileName),
"gbk"));

template.process(map, out);

out.flush();

out.close();



}




6.创建Action文件ListAction.java,如下:


package com.zsw.action;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import com.opensymphony.xwork2.ActionSupport;

import com.zsw.util.CreateHtml;

import com.zsw.vo.Person;

import freemarker.template.TemplateException;

public
class ListAction
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();

List<Person> persons =
new ArrayList<Person>();


for (
int i = 0; i < 5; i++) {

Person p =
new Person();

p.setId(i);

p.setName(
"a" +
"1");

p.setAge(
"5");

p.setSex(
"man");

persons.add(p);

}



Map<
String, List<Person>> map =
new HashMap<
String, List<Person>>();

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;

}

}


7.创建模板文件person.ftl


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.name}<
/td>

<
td>${person.sex}<
/td>

<
td>${person.age}<
/td>

<
/tr>

<
/#list>


< /table>


8.启动服务器,访问地址:​​http://localhost:8080/MyFreemark/list​

效果图如下: