`
yhhazr
  • 浏览: 47784 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

Freemarker生成静态html示例

阅读更多
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;
		}
	}

}
 
0
0
分享到:
评论
1 楼 ninuxf 2013-05-02  
[flash=200,200][url][img][list]
[*]
引用
[u][u][u][u][u][u][i][b][/b][/i][/u][/u][/u][/u][/u][/u]
[/list][/img][/url][/flash]

相关推荐

    freemarker生成静态html示例

    本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....

    freemarker生成静态HTML例子

    本示例将详细介绍如何使用Freemarker生成静态HTML页面。 1. **Freemarker基本概念** - **模板**: Freemarker的核心是模板,它定义了输出文件的结构和样式,其中包含了一系列指令和变量。 - **数据模型**: 数据...

    使用FreeMarker生成Html静态文件

    标题“使用FreeMarker生成Html静态文件”暗示了我们将探讨如何利用FreeMarker将动态数据转化为静态的HTML页面。这一过程通常涉及以下几个步骤: 1. **配置FreeMarker**: 首先,我们需要在Java项目中引入FreeMarker...

    freemarker生成静态网页

    这可能是一个动态HTML的示例,或者是一个自定义的类,用于处理Freemarker生成静态页的过程。具体功能需要查看源代码才能明确。 通过以上步骤,你可以使用Freemarker轻松地将动态数据转化为静态网页。这种方式在网站...

    教你如何用FreeMarker生成静态页面.doc

    以下是一个简单的Java代码示例,展示了如何使用FreeMarker生成静态页面: 1. 导入所需的FreeMarker库和IO相关的类。 2. 创建一个名为`FreeMarkerUtil`的公共类。 3. 定义一个静态方法`analysisTemplate`,接收模板...

    Struts2整合Freemarker生成静态页面

    以上就是Struts2整合Freemarker生成静态页面所涉及的主要知识点。通过熟练掌握这些,开发者可以有效地构建动态、高性能的Web应用。在提供的链接中,可能有更具体的示例和教程,帮助你深入理解和实践这一技术。

    JAVA集成Freemarker生成静态html过程解析

    Java集成Freemarker生成静态HTML的过程是一个常见的技术实践,它能提高网站的加载速度和用户体验。下面我们将详细探讨这个过程。 首先,集成Freemarker需要引入相应的依赖。在Spring Boot项目中,我们可以添加`...

    java+Freemarker生成word

    在给定的压缩包文件"java+Freemarker生成word"中,可能包含了示例代码、模板文件以及相关的读取和生成Word文档的工具。通过研究这些文件,你可以更好地理解和实践这一技术,从而在实际项目中灵活运用。

    freemarker生成html

    通过使用Freemarker生成静态HTML文件,不仅可以显著提高系统的响应速度,还能减少服务器的压力,提升用户体验。同时,这种做法还能够提高代码的可维护性和可扩展性,是非常值得推荐的做法。对于开发者而言,熟悉并...

    FreeMarker动静分离生成html文件

    在这个“FreeMarker动静分离生成html文件”的示例中,我们将探讨如何利用FreeMarker实现这一功能,并在Eclipse环境下进行运行。 首先,我们需要了解FreeMarker的基本语法。FreeMarker模板文件(通常以`.ftl`为扩展...

    freemarker 简单项目示例

    本项目示例将深入探讨如何使用Freemarker来生成静态HTML页面,帮助你理解其基本原理和操作流程。 1. **Freemarker基础** - Freemarker是一个基于模板的开源Java库,它允许开发者通过定义模板语言(FTL,Freemarker...

    freemarker无损生成word

    但是要注意,由于FreeMarker生成的是HTML,所以某些复杂的Word特性(如表格样式、页眉页脚)可能需要通过其他方式处理。此外,HTML到Word的转换可能不完美,可能需要对生成的Word进行微调以达到预期效果。 在实际...

    java生成静态页面——Freemarker实例教程.docx

    #### 三、Freemarker生成静态页面的工作原理 Freemarker生成静态页面的基本步骤如下: 1. **准备模板** 创建一个模板文件,该文件通常是一个包含HTML标记的普通文件,其中可能包含Freemarker的特殊标签或表达式...

    java使用Freemarker生成PDF以及HTML等文档.zip

    Java 使用 Freemarker 生成 PDF 和 HTML 等文档是一种常见的技术实践,特别是在Web应用中,为了提供可下载的报告或自定义格式的输出。Freemarker 是一个强大的模板引擎,它允许开发者通过模板语言与数据模型相结合来...

    freemarker实现代码生成器

    Freemarker是一个强大的模板引擎,常用于动态生成HTML、XML或其他文本格式的文件,比如在Web开发中构建视图层。在IT行业中,利用Freemarker实现代码生成器是一种高效的方法,可以自动化创建常见的代码结构,减少手动...

    freemarker实例下载

    本实例“freemarker生成静态html”提供了一个具体的使用Freemarker进行静态页面生成的演示。下载后的压缩包内包含了必要的框架和配置文件,方便用户快速理解和部署。"springdemo"这个文件名暗示了该实例可能基于...

    使用java将动态网页生成静态网页示例

    动态网页生成静态网页是一种常见的优化网站性能的技术,它可以提高网页的加载速度,减轻服务器负担,并有助于搜索引擎优化(SEO)。Java作为一款广泛使用的编程语言,提供了丰富的库和工具来实现这一过程。以下是对...

    FreeMarker+XDoc生成pdf、rtf、docx、htm、jar、swf、png等文件

    总结来说,FreeMarker+XDoc的组合是一种高效、灵活的文档生成解决方案,它能帮助开发者将静态模板转化为动态、多格式的文档,提高开发效率,减少重复工作。对于需要频繁生成报告或文档的企业来说,这是一个非常有...

Global site tag (gtag.js) - Google Analytics