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>
< 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>
< !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();
}
}
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;
}
}
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>
< 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
效果图如下:
9.以上例子下载地址如下: