import java.io.*;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import freemarker.template.*;
/*
* Created on 2005-4-7
*
*/
/**
* 测试FreeMarker.
*
* @author scud
*
*/
public class FreeMarkerTest
{
private final Log logger = LogFactory.getLog(getClass());
private Configuration freemarker_cfg = null;
public static void main(String[] args)
{
//@todo 自己的一个类
NewsItem aItem = null;
//@todo 装入新闻
//NewsItem = loadNewsItem(1);
FreeMarkerTest test = new FreeMarkerTest();
Map root = new HashMap();
root.put("newsitem", aItem);
String sGeneFilePath = "/tpxw/";
String sFileName = "1.htm";
boolean bOK = test.geneHtmlFile("/tpxw/view.ftl",root, sGeneFilePath,sFileName);
}
/**
* 获取freemarker的配置. freemarker本身支持classpath,目录和从ServletContext获取.
*/
protected Configuration getFreeMarkerCFG()
{
if (null == freemarker_cfg)
{
// Initialize the FreeMarker configuration;
// - Create a configuration instance
freemarker_cfg = new Configuration();
// - FreeMarker支持多种模板装载方式,可以查看API文档,都很简单:路径,根据Servlet上下文,classpath等等
//htmlskin是放在classpath下的一个目录
freemarker_cfg.setClassForTemplateLoading(this.getClass(), "/htmlskin");
}
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 propMap, String htmlFilePath,String htmlFileName )
{
//@todo 从配置中取得要静态文件存放的根路径:需要改为自己的属性类调用
String sRootDir = "e:/webtest/htmlfile" ;
try
{
Template t = getFreeMarkerCFG().getTemplate(templateFileName);
//如果根路径存在,则递归创建子目录
creatDirs(sRootDir,htmlFilePath);
File afile = new File(sRootDir +"/" +htmlFilePath + "/" + htmlFileName);
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile)));
t.process(propMap, out);
}
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())
{
File aSubFile = new File(aParentDir + aSubDir);
if (!aSubFile.exists())
{
return aSubFile.mkdirs();
}
else
{
return true;
}
}
else
{
return false;
}
}
}
分享到:
相关推荐
总的来说,这个"springboot整合freemarker生成静态html的demo"项目展示了如何在SpringBoot应用中集成FreeMarker,以及如何通过模板和字符串两种方式生成HTML。这有助于我们构建更高效、更易于维护的Web应用,将视...
在这个Eclipse项目中,你可能需要创建一个Java类来提供数据模型,然后使用Freemarker API来加载模板文件,并结合数据模型生成HTML。这通常涉及到以下几个步骤: 1. 创建数据模型(如Java对象)。 2. 初始化...
4. **生成静态文件**:使用Freemarker的`Template`类加载模板文件,然后结合数据模型生成最终的HTML。代码如下: ```java Template template = configuration.getTemplate("index.ftl"); Writer out = new ...
本示例将详细介绍如何使用Freemarker生成静态HTML页面。 1. **Freemarker基本概念** - **模板**: Freemarker的核心是模板,它定义了输出文件的结构和样式,其中包含了一系列指令和变量。 - **数据模型**: 数据...
在Web开发中,生成HTML静态页面源码是一个常见的需求。静态页面可以提供更快的加载速度和更好的SEO优化。使用FreeMarker实现这个目标,主要有以下几个步骤: 1. **理解FreeMarker模板语言**:FreeMarker的核心是...
3. **处理模板**:使用Freemarker API的`Configuration`和`Template`类,将数据模型应用到模板上,生成HTML字符串。 4. **调用wkhtmltox**:通过Java绑定库,将生成的HTML字符串转换为PDF。 5. **保存PDF**:将生成...
以下是一个简单的Java代码示例,展示了如何使用FreeMarker生成静态页面: 1. 导入所需的FreeMarker库和IO相关的类。 2. 创建一个名为`FreeMarkerUtil`的公共类。 3. 定义一个静态方法`analysisTemplate`,接收模板...
总的来说,`httpclient`与`freemarker`在页面静态化分页中的结合使用,既保证了数据的动态获取,又实现了静态文件的高效生成,是Web开发中一种实用的优化手段。通过合理的代码组织和设计,可以构建出高效且易于维护...
通过这个例子,我们可以看到FreeMarker如何实现动静分离,以及如何在Eclipse环境中使用它生成HTML文件。这个过程有助于提高开发效率,因为设计师可以专注于HTML模板的设计,而程序员只需关注数据处理和业务逻辑。在...
总结来说,Java集成Freemarker生成静态HTML的过程包括:引入Freemarker依赖、配置模板相关设置、编写模板文件、在Controller中处理请求并返回模板名、以及使用工具类将模板渲染为HTML并保存到磁盘。这个过程在Web...
3. **生成HTML**: 在Struts2的Action中,使用Freemarker API加载模板文件,结合从数据库或其他数据源获取的数据,生成HTML字符串。然后将这个字符串写入到静态HTML文件中。 4. **存储和部署静态页面**: 将生成的...
总的来说,利用EOS和Freemarker生成PDF文件是一项实用的技术,它结合了模板引擎的灵活性和PDF格式的专业性,使得动态内容的输出变得简单高效。在实际开发中,根据项目需求选择合适的工具和技术栈,能有效提升开发...
5. **配置和优化**:在实际项目中,配置Struts2和FreeMarker生成静态页面时,需要考虑目录结构、文件命名规则、缓存控制等多个方面。例如,静态页面可能存储在特定的目录下,文件名可能包含URL参数以区分不同的动态...
Freemarker是一个强大的模板引擎,常用于Web应用中动态生成HTML或其他类型的静态页面。它采用声明式编程方式,使得开发者可以专注于数据模型,而不用关心如何呈现这些数据。本篇文章将深入探讨Freemarker的工作原理...
以上就是Struts2整合Freemarker生成静态页面所涉及的主要知识点。通过熟练掌握这些,开发者可以有效地构建动态、高性能的Web应用。在提供的链接中,可能有更具体的示例和教程,帮助你深入理解和实践这一技术。
3. 个人觉得freemarker 和taglib,jsf至少在使用层面上很像,但是freemarker 的macro容易写,几行代码就搞定了,taglib和jsf需要写一堆java文件和tld文件,繁琐得很 4.freemarker 不能直接调用java对象的method. 这点...
### Freemarker生成HTML知识点概述 #### 一、Freemarker简介 Freemarker是一个用Java编写的模板引擎,它可以生成任何格式的文本输出,包括HTML、XML、纯文本等。它将业务逻辑与表现层分离,使开发人员能够专注于...