{code}
package com.gbits.wdhw.web;
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.net.URISyntaxException;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletContext;
import com.gbits.wdhw.common.config.operConfig;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
*
* 生成静态页操作
*
* @author yanse
*
*/
public class produceHtml
{
/**
* 生成静态页面主方法
*
* @param context
* ServletContext
* @param data
* 模版的数据来源,freemarker通过一个Map给ftl模版送数据
* @param templatePath
* ftl模版所在的路径
* @param targetHtmlPath
* 最后生成静态页的路径
*/
public static void crateHTML(ServletContext context,
Map<String, Object> data, String templatePath, String targetHtmlPath)
{
Configuration freemarkerCfg = new Configuration();
// 加载模版
freemarkerCfg.setServletContextForTemplateLoading(context, "/");
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
try
{
// 指定模版路径
Template template = freemarkerCfg
.getTemplate(templatePath, "UTF-8");
template.setEncoding("UTF-8");
// 静态页面路径
String htmlBashPath = operConfig.readConfigByKey("htmlPath");
String htmlPath = context.getRealPath(htmlBashPath) + "/"
+ targetHtmlPath;
File htmlFile = new File(htmlPath);
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(htmlFile), "UTF-8"));
// 处理模版
template.process(data, out);
out.flush();
out.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* templatePath模板文件存放路径,templateName 模板文件名称,filename 生成的文件名称
*
* @param templatePath
* @param templateName
* @param fileName
* @param root
*/
public static void analysisTemplate(String templatePath,
String templateName, String fileName, Map<String, Object> data)
{
try
{
// 初使化FreeMarker配置
Configuration config = new Configuration();
// 设置要解析的模板所在的目录,并加载模板文件
config.setDirectoryForTemplateLoading(new File(templatePath));
// 设置包装器,并将对象包装为数据模型
config.setObjectWrapper(new DefaultObjectWrapper());
// 获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致
// 否则会出现乱码
Template template = config.getTemplate(templateName, "UTF-8");
// 合并数据模型与模板
FileOutputStream fos = new FileOutputStream(fileName);
Writer out = new OutputStreamWriter(fos, "UTF-8");
template.process(data, out);
out.flush();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (TemplateException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
try
{
System.out.println(produceHtml.class.getClassLoader()
.getResource("/wdhw").toURI().getPath());
}
catch (URISyntaxException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* 根据模块标识生成对应的模块页面
*
* @param context
* @param data
* @param moderFlag
* @param id
*/
public static void createModerHTML(ServletContext context,
Map<String, Object> data, String moderFlag, String id)
{
String templatePath = produceHtml.getTemplateNameByType(moderFlag);
String targetHtmlPath = produceHtml.getHtmlPathByType(moderFlag, id);
createFolder(context.getContextPath() + "/html/"+moderFlag,moderFlag);
produceHtml.crateHTML(context, data, templatePath, targetHtmlPath);
}
/**
*
* 判断文件夹是否存在,不存在则创建一个
*/
public static void createFolder(String path,String moderFlag)
{
if (!moderFlag.equals("index"))
{
File file = new File(path);
// 判断文件夹是否存在,如果不存在则创建文件夹
if (!file.exists())
{
file.mkdir();
}
}
}
public static void testHTML()
{
}
/**
*
* 根据类型获取模板
*
* @param type
* @return
*/
public static String getTemplateNameByType(String type)
{
String templatePath = operConfig.readConfigByKey("templatePath");
return templatePath + type + "/" + type + ".ftl";
}
/**
*
* 根据类型获取最后生成静态页的路径
*
* @param type
* @param id
* @return
*/
public static String getHtmlPathByType(String type, String id)
{
String htmlPath = "";
if (type.equals("index"))
{
htmlPath = type + ".html";
} else
{
htmlPath = type + "/" + id + ".html";
}
return htmlPath;
}
}
{code}
分享到:
相关推荐
以下是一个简单的Java代码示例,展示了如何使用FreeMarker生成静态页面: 1. 导入所需的FreeMarker库和IO相关的类。 2. 创建一个名为`FreeMarkerUtil`的公共类。 3. 定义一个静态方法`analysisTemplate`,接收模板...
5. **配置和优化**:在实际项目中,配置Struts2和FreeMarker生成静态页面时,需要考虑目录结构、文件命名规则、缓存控制等多个方面。例如,静态页面可能存储在特定的目录下,文件名可能包含URL参数以区分不同的动态...
以上就是Struts2整合Freemarker生成静态页面所涉及的主要知识点。通过熟练掌握这些,开发者可以有效地构建动态、高性能的Web应用。在提供的链接中,可能有更具体的示例和教程,帮助你深入理解和实践这一技术。
这可能是一个动态HTML的示例,或者是一个自定义的类,用于处理Freemarker生成静态页的过程。具体功能需要查看源代码才能明确。 通过以上步骤,你可以使用Freemarker轻松地将动态数据转化为静态网页。这种方式在网站...
标题“使用FreeMarker生成Html静态文件”暗示了我们将探讨如何利用FreeMarker将动态数据转化为静态的HTML页面。这一过程通常涉及以下几个步骤: 1. **配置FreeMarker**: 首先,我们需要在Java项目中引入FreeMarker...
在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...
本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....
总的来说,`httpclient`与`freemarker`在页面静态化分页中的结合使用,既保证了数据的动态获取,又实现了静态文件的高效生成,是Web开发中一种实用的优化手段。通过合理的代码组织和设计,可以构建出高效且易于维护...
本示例将详细介绍如何使用Freemarker生成静态HTML页面。 1. **Freemarker基本概念** - **模板**: Freemarker的核心是模板,它定义了输出文件的结构和样式,其中包含了一系列指令和变量。 - **数据模型**: 数据...
Java CMS(内容管理系统)生成静态页面是一种常见的优化网站性能和提升用户体验的方法。在这个过程中,原本由动态脚本生成的网页内容被转化为HTML文件,这些HTML文件可以被浏览器直接读取,减少了服务器处理请求的...
### 使用Java代码生成静态页面的知识点 在当前的网络环境中,很多开发者会遇到需要通过程序自动生成静态HTML页面的需求。这种需求通常出现在博客系统、新闻网站或是任何需要定期更新大量内容且希望减轻服务器动态...
下面将详细介绍如何使用Freemarker来创建一个代码生成器。 一、Freemarker基础 1. 模板语言:Freemarker是基于模板的,即预先定义好模板文件,模板中包含静态文本和变量,变量在运行时会被实际值替换。 2. 数据...
6. **任务调度**:如果需要定期或者在特定事件(如内容更新)后自动生成静态页,可以使用Java的定时任务框架,如Quartz或Spring的Scheduled Tasks。 7. **版本控制**:静态页的生成过程中可能会涉及多版本管理,...
5. **生成静态文件**:一旦HTML源码生成,你可以将其写入到磁盘上的一个文件中,从而创建静态页面。确保选择合适的路径,并正确处理文件的创建和覆盖。 6. **优化和调试**:在实际应用中,你可能需要对模板进行优化...
3. **处理模板**:使用Freemarker API的`Configuration`和`Template`类,将数据模型应用到模板上,生成HTML字符串。 4. **调用wkhtmltox**:通过Java绑定库,将生成的HTML字符串转换为PDF。 5. **保存PDF**:将生成...
#### 三、Freemarker生成静态页面的工作原理 Freemarker生成静态页面的基本步骤如下: 1. **准备模板** 创建一个模板文件,该文件通常是一个包含HTML标记的普通文件,其中可能包含Freemarker的特殊标签或表达式...
Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面!这是一个相对网上较全的案例。源码内含数据库文件sql.sql及效果图!本人致力于完整的Demo。欢迎关注!回头补上分页。敬请期待!
3. 个人觉得freemarker 和taglib,jsf至少在使用层面上很像,但是freemarker 的macro容易写,几行代码就搞定了,taglib和jsf需要写一堆java文件和tld文件,繁琐得很 4.freemarker 不能直接调用java对象的method. 这点...