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.HashMap;
import java.util.Locale;
import java.util.Map;
import javax.servlet.GenericServlet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.views.JspSupportServlet;
import org.apache.struts2.views.freemarker.FreemarkerManager;
import com.opensymphony.xwork2.ActionSupport;
import com.sz7road.web.common.util.ServiceLocator;
import com.sz7road.web.service.TempHtmlService;
import freemarker.ext.jsp.TaglibFactory;
import freemarker.ext.servlet.HttpRequestHashModel;
import freemarker.ext.servlet.ServletContextHashModel;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class TempHtmlAction extends ActionSupport {
private static final Logger logger = LogManager.getLogger(GeneHtmlFileAction.class);
private Configuration freemarker_cfg = null;
public String tempIndixHtml(){
TempHtmlService tempHtmlService = ServiceLocator.getTempHtmlrService();
String sGeneFilePath = "";
String sFileName = "index.html";
try {
Map<String, Object> dataMap = tempHtmlService.createIndex();
geneHtmlFile("temp/index.ftl", dataMap, sGeneFilePath, sFileName);
} catch (Exception e) {
logger.error("Index Html Error:" + e.getMessage(), e);
}
return SUCCESS;
}
/**
* 获取freemarker的配置. freemarker本身支持classpath,目录和从ServletContext获取.
*/
protected Configuration getFreeMarkerCFG() {
if (null == freemarker_cfg) {
File templateFile = new File(ServletActionContext
.getServletContext().getRealPath("/") + "WEB-INF/template");
freemarker_cfg = new Configuration();
try {
freemarker_cfg.setDirectoryForTemplateLoading(templateFile);
freemarker_cfg.setEncoding(Locale.CHINA, "UTF-8");
} catch (IOException e) {
logger.error("Get tempalte error", e);
}
}
return freemarker_cfg;
}
/**
* 生成静态文件.
*
* @param templateFileName
* 模板文件名,相对htmlskin路径,例如"/tpxw/view.ftl"
* @param propMap
* 用于处理模板的属性Object映射
* @param htmlFilePath
* 要生成的静态文件的路径,相对设置中的根路径,例如 "/tpxw/1/2005/4/"
* @param htmlFileName
* 要生成的文件名,例如 "1.htm"
*/
public boolean geneHtmlFile(String templateFileName,
Map<String, Object> propMap, String htmlFilePath,
String htmlFileName) {
// @todo 从配置中取得要静态文件存放的根路径:需要改为自己的属性类调用
//String sRootDir = "/var/www/ddtank/web";
String sRootDir = ServletActionContext.getRequest().getRealPath("/webpage");
try {
if (propMap == null) {
propMap = new HashMap<String, Object>();
}
ServletContext servletContext = ServletActionContext
.getServletContext();
// data.put("JspTaglibs", new TaglibFactory(servletContext));
FreemarkerManager freemarkerManager = new FreemarkerManager();
Configuration configuration = freemarkerManager
.getConfiguration(servletContext);
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContextHashModel servletContextModel = (ServletContextHashModel) servletContext
.getAttribute(".freemarker.Application");
if (servletContextModel == null) {
GenericServlet servlet = JspSupportServlet.jspSupportServlet;
if (servlet != null) {
servletContextModel = new ServletContextHashModel(servlet,
configuration.getObjectWrapper());
servletContext.setAttribute(".freemarker.Application",
servletContextModel);
TaglibFactory taglibs = new TaglibFactory(servletContext);
servletContext.setAttribute(".freemarker.JspTaglibs",
taglibs);
}
}
HttpRequestHashModel requestModel = (HttpRequestHashModel) request
.getAttribute(".freemarker.Request");
if ((requestModel == null)
|| (requestModel.getRequest() != request)) {
requestModel = new HttpRequestHashModel(request, response,
configuration.getObjectWrapper());
request.setAttribute(".freemarker.Request", requestModel);
}
propMap.put("Application", servletContextModel);
propMap.put("Request", requestModel);
propMap.put("Session", ServletActionContext.getRequest()
.getSession());
propMap.put("JspTaglibs",
new TaglibFactory(ServletActionContext.getServletContext()));
Template t = getFreeMarkerCFG().getTemplate(templateFileName);
// 如果根路径存在,则递归创建子目录
creatDirs(sRootDir, htmlFilePath);
File afile = new File(sRootDir + "/" + htmlFilePath + "/"
+ htmlFileName);
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(afile), "UTF-8"));
t.process(propMap, out);
out.flush();
out.close();
} catch (TemplateException e) {
logger.error("Error while processing FreeMarker template "
+ templateFileName, e);
return false;
} catch (IOException e) {
logger.error("Error while generate Static Html File "
+ htmlFileName, e);
return false;
}
return true;
}
/**
* 创建多级目录
*
* @param aParentDir
* String
* @param aSubDir
* 以 / 开头
* @return boolean 是否成功
*/
public static boolean creatDirs(String aParentDir, String aSubDir) {
File aFile = new File(aParentDir);
if (!aFile.exists()) {
aFile.mkdirs();
}
File aSubFile = new File(aParentDir + aSubDir);
if (!aSubFile.exists()) {
return aSubFile.mkdirs();
} else {
return true;
}
}
}
分享到:
相关推荐
这是一个eclipse下创建的一个project,里面有一个freemarker生成html及一些语法示例
springboot整合freemarker生成静态html的demo 主要讲解了通过模板生成html和通过字符串生成html
freemarker生成静态HTML例子
NULL 博文链接:https://fackyou200.iteye.com/blog/972795
给初学者一个简单的利用freemarker生成xml文件的例子
freemarker生成静态页面------内含使用说明 freemarker生成静态页面------内含使用说明 freemarker生成静态页面------内含使用说明
freemarker创建静态网页的一个小例子
freeMarker生成html实用例子
主要介绍了JAVA集成Freemarker生成静态html过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
struts2+freemarker 生成静态页面,希望对大家有用!!!!
1、Word模板转html模板的操作步骤(图示例+操作描述,13张图); 2、由上述生成的html模板通过java代码生成pdf; 3、示例有本地模板和远程模板之分,可杜绝pdf标题丢失的问题; 4、资源概要:先阅读README.md文档,然后...
NULL 博文链接:https://goby2008.iteye.com/blog/627076
freemarker html生成pdf 通过freemarker 和html模板生成对应的pdf或者图片 参考使用,欢迎下载
FreeMarker教你如何生成html静态页面源码
Freemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+java
那么我们就把把页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMarker模板文件解析类process()方法完成静态页面的生成。
主要就是用servlet做的,freemarker和httpclient的静态化都封装好了工具类了,简单,有文档,可以看懂
NULL 博文链接:https://depravedangel.iteye.com/blog/443575
1.html模板+model数据,通过freemarker进行渲染,便于维护和修改 2.渲染后的html流,可通过Flying Saucer组件生成pdf文件流,或者生成pdf后再转成jpg文件流
你可以直接写一个java main方法来调用它,我的代码生成器就是这么做的. 2.freemarker 写出来的页面一般都是xml格式友好的,也就是说你可以写出很规范的xhtml,而且还可以直接使用一些xml的代码格式化工具直接美化.而且...