{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}
分享到:
相关推荐
Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面!这是一个相对网上较全的案例。源码内含数据库文件sql.sql及效果图!本人致力于完整的Demo。欢迎关注!回头补上分页。敬请期待!
3. 个人觉得freemarker 和taglib,jsf至少在使用层面上很像,但是freemarker 的macro容易写,几行代码就搞定了,taglib和jsf需要写一堆java文件和tld文件,繁琐得很 4.freemarker 不能直接调用java对象的method. 这点...
主要介绍了JAVA集成Freemarker生成静态html过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java与json之间的转换、通过发送post请求访问第三方接口、使用freemarker模拟生成静态sql、wsdl2Java生成客户代码
一套基于FreeMarker技术实现的Java快速开发的代码生成器。 FreeMarker主要两大作用,一种是动态内容静态化。一种是代码生成。 本例的应用是后者,目的是为了节省业务开发时间,对简单的业务代码快速实现。
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据 FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件 FreeMarker与容器无关...
由FreeMarker生成页面,通过模板显示准备的数据 FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件 FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境 ...
Struts2整合FreeMarker实例框架初学例子....利用Struts2生成静态页面其实很灵活,很强大,尤其是利用Struts2对Freemarker较好的支持,充分利用Freemarker的模板功能来生成静态页面。 比较简单.大家见笑了.
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。
dubbo,redis,solr,freemarker,activeMQ,springBoot框架,微信支付,nginx负载均衡,电商活动秒杀,springSecurity安全框架,FastDFS分布式文件服务器,还会涉及到代码生成器, 前台的技术有angularJS和BootStrap框架,此...
INF下是后台配置文件WebContent文件夹下面是前端代码后台管理系统代码专栏前台页面频道代码通用项目前端一些通用文件staticFile静态化生成的前台页面#初步使用技术数据库采用mysql5后台路由采用spring mvc静态化...
2.缓存技术(当数据更新比较快,几秒钟更新一次,或者需要实时反映数据变化,或者页面具有很多种风格,不便于生成静态页面) 页面缓存(局部缓存和全局缓存)(View,html代码) 缺点:不能做到实时更新 优点:比二...
FreeMarker语法简单,能生成静态页,互联网项目都在用。MySQL数据库是应用最广泛的开源数据库,上手简单。 项目目前就用到以上技术,后续不排除会加入其他技术,但为了避免项目臃肿,不会让项目变成一个技术的全家...
根据word生成模板,图片动态切割等代码工具类。
采用优化性能技术,采用oscache缓存,freemarker静态页面生成; 功能比较多但操作简单的后台管理;(后台管理附图片); 安装方法: 1:mysql中新建数据库dgssen.导入dgssen.sql 也可以修改:WebRoot\META-INF\context....
OpooPress 2.0 OpooPress Framework是一个完全灵活的,完全可扩展的,基于Java的静态站点生成器。 2.0正在开发中。特征源类型(布局) 邮政页(您的自定义布局)模板引擎FreeMarker 速度(您的自定义Renderer模板...
本软件采用jsp+sqlserver+ hibernate+struts实现,并使用了freemarker静态化、会员登录的状态以及文章点击使用ajax动态处理。本系统以学习技术为目的开发。本系统开放源代码,只为了能给jsp学习者带来一点帮助。 ...
(4)采用优化性能技术,采用oscache缓存,freemarker静态页面生成; (5)功能比较多但操作简单的后台管理;(后台管理附图片); 安装方法: 1:mysql中新建数据库dgssen.导入dgssen.sql 也可以修改:WebRoot\META-INF\...
#MyBatis-Plus-Generator ...4. TemplateEnum:模板枚举类,可根据需要选择velocity(*.vm)或者freemarker(*.ftl)模板进行生成 注:大部分配置都已进行注释说明,若需更多自定义配置,请参考官方文档或者源代码。
mybatis代码生成插件使用mybatis3redis缓存机制使用slf4j+logback添加rest风格支持添加jdk1.8新特性lombok使用jdk1.8表达式lambda支持订单校验支持全局异常处理微信网页授权使用Charles抓包测试使用freemarker网页...