经FreeMarkerclasspath加载方式生成静态页面
package htmlskin; import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Random; import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException; public class FreeMarkerTest { private Configuration cfg;// FreeMarker配置实例 public static void main(String[] args) {
FreeMarkerTest test = new FreeMarkerTest(); Map<String, Object> root = new HashMap<String, Object>();
root.put("message", "Hello FreeMarker.");
String ftl = "/ftl/test.ftl";
boolean flag = test.genericHtmlFile(ftl, root);
if(flag){
System.out.println("创建静态HTML页面成功!");
}else{
System.out.println("创建静态HTML页面失败!");
}
} /**
* 获取FreeMarker配置实例
* @return
*/
public Configuration getConfiguration() {
if (null == cfg) {
cfg = new Configuration();
//通过classpath载入方式
cfg.setClassForTemplateLoading(this.getClass(), "/htmlskin");
}
return cfg;
} /**
* 生成HTML页面
* @param ftl FreeMarker模版文件
* @param root 模版数据
* @return true->生成静态页面成功 false->生成静态页面失败
*/
public boolean genericHtmlFile(String ftl, Map<String, Object> root) {
try {
Template template = getConfiguration().getTemplate(ftl);
String projectPath = System.getProperty("user.dir");
String htmlPath = projectPath + File.separator + "html";
String path = createDirs(htmlPath, genericFilePath());
String name = genericFileName();
// System.out.println(path+name); File file = new File(path + name);
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file)));
template.process(root, out);
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
return false;
} catch (TemplateException e) {
return false;
}
return true;
} /**
* 生成存储文件子路径
* 格式:\yyyy\MM\dd\
* @return 文件子路径
*/
public String genericFilePath() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);// 年
int month = calendar.get(Calendar.MONTH);// 月
int day = calendar.get(Calendar.DAY_OF_MONTH);// 日 String year_str = "";
String month_str = "";
String day_str = ""; year_str = String.valueOf(year);
month_str = month < 10 ? "0" + month : month + "";
day_str = day < 10 ? "0" + day : day + ""; // 拼接子路径
StringBuffer sb = new StringBuffer();
sb.append(File.separator);
sb.append(year_str);
sb.append(File.separator);
sb.append(month_str);
sb.append(File.separator);
sb.append(day_str);
sb.append(File.separator);
return sb.toString();
} /**
* 生成文件名
* 格式:yyyyMMddHHmmss4位随机数
* @return 文件名
*/
public String genericFileName() {
//创建日历类
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);//年
int month = calendar.get(Calendar.MONTH);//月
int day = calendar.get(Calendar.DAY_OF_MONTH);//日
int hour = calendar.get(Calendar.HOUR_OF_DAY);//时
int minus = calendar.get(Calendar.MINUTE);//分
int second = calendar.get(Calendar.SECOND);//秒
//创建生成随机数类
Random random = new Random(); String year_str = year + "";
String month_str = month < 10 ? "0" + month : month + "";
String day_str = day < 10 ? "0" + day : day + "";
String hour_str = hour < 10 ? "0" + hour : hour + "";
String minus_str = minus < 10 ? "0" + minus : minus + "";
String second_str = second < 10 ? "0" + second : second + "";
// System.out.println("year=" + year + ",month=" + month + ",day=" + day
// + ",hour=" + hour + ",minus=" + minus + ",second=" + second); StringBuffer sb = new StringBuffer();
sb.append(year_str);
sb.append(month_str);
sb.append(day_str);
sb.append(hour_str);
sb.append(minus_str);
sb.append(second_str);
sb.append(random.nextInt(8999) + 1000); return sb.toString() + ".html";
} /**
* 创建文件夹
* @param parentDir 父文件夹
* @param subDir 子文件夹
* @return 存储文件全文件夹
*/
public String createDirs(String parentDir, String subDir) {
//System.out.println("父文件夹:" + parentDir);
//System.out.println("子文件夹:" + parentDir + subDir);
String path = parentDir + subDir; File parentFile = new File(parentDir);
if (parentFile.exists()) {
File subFile = new File(path);
if (!subFile.exists()) {
subFile.mkdirs();
}
}
return path;
}
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
经FreeMarkerclasspath加载方式生成静态页面的更多相关文章
- C#加载前生成静态网页
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
- Linux共享库两种加载方式简述
Linux共享库两种加载方式简述 动态库技术通常能减少程序的大小,节省空间,提高效率,具有很高的灵活性,对于升级软件版本也更加容易.与静态库不同,动态库里面的函数不是执行程序本身 的一部分,而是 ...
- Fragment加载方式与数据通信
一.加载方式 1. 静态加载 1.1 加载步骤 (1) 创建fragment:创建自定义Fragment类继承自Fragment类,同时将自定义Fragment类与Fragment视图绑定(将layo ...
- PHP代码为什么不能直接保存HTML文件——>PHP生成静态页面教程
1.server会依据文件的后缀名去进行解析,假设是HTML文件则server不会进行语法解析.而是直接输出到浏览器. 2.假设一个页面中所有都是HTML代码而没有须要解析的PHP语法,则没有必要保存 ...
- 浅谈php生成静态页面
一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...
- .net 生成 静态页面
.net 生成 静态页面 <!--Main.Aspx--> <%@ page language="C#" %> <%@ import namespac ...
- [转]把动态页面.aspx 生成静态页面.html
本文转自:http://blog.csdn.net/csb5201314/article/details/5391688 如果要把主页Index.aspx 生成静态页面 Index.html后输出会提 ...
- 链接库lib和dl的概念,加载方式的区别
使用LR进行基于windows socket协议做接口测试,只提供了lr_load_dll方法来动态加载动态链接库.之前学习阶段,对TinyXML的学习,使用的静态链接库,当时在程序调用的时候方法也跟 ...
- Javascript动态加载Html元素到页面Dom文档结构时执行顺序的不同
我们有时会通过ajax动态获取一段Html代码,并且将这段代码通过javascript放到页面的Dom结构中去. 而很多时候通过ajax动态获取的Html代码中也包含javascript代码,有一点需 ...
随机推荐
- Linux好书、经典书籍推荐
Linux好书.经典书籍推荐 思想篇 <Linux/Unix设计思想> 图书将Unix与Linux的原理有效地结合起来,总结了Unix/Linux软件开发中的原则.在保留了第1版中Unix ...
- PPP协议总结
PPP协议总结 PPP协议是一种在点到点链路上传输.封装网络数据包的数据链路层协议,PPP支持同步/异步方式的链路上. 一. PPP支持的链路类型 1. 同步和异步专线 2. 同步拨号链路. 3. 异 ...
- poj3237(树链剖分)
题目链接:http://poj.org/problem?id=3237 题目大意:指定一颗树上有3个操作: 1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值): 2)取反操作,将a ...
- SSH是什么?Linux如何修改SSH端口号?
通过SSH连接可以远程管理Linux等设备,默认linuxssh端口是22端口,如何修改SSH默认端口,如何增加SSH端口呢?,下面小编给大家演示一下 工具/原料 Xshell putty 等 ...
- uvalive 2911 Maximum(贪心)
题目连接:2911 - Maximum 题目大意:给出m, p, a, b,然后xi满足题目中的两个公式, 要求求的 xp1 + xp2 +...+ xpm 的最大值. 解题思路:可以将x1 + x2 ...
- centos 64位编译安装 glibc-2.14
cd /opt wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz tar -xzf glibc-2.14.tar.gz cd glibc-2.14 ...
- Zabbix的数据表结构
看到Zabbix的数据表结构吧,就知道数据量大了 性能问题很让人担忧,不过基于Zabbix数据库导出报表,或自动跑报表的时候,就必须去了解一下zabbix的数据表结构了,得知道XX放在哪才能找到XX, ...
- android贴士Toast
转载请注明出处:http://blog.csdn.net/droyon/article/details/42009015 我们可以用androd提供toast控制,但在使用过程中,给我们发了很多Toa ...
- 同一个存储过程中,不能多次select into 到同一张表的问题
表记录的插入方式有两种.其一,先create table 再 insert into from ....其二, 直接 select into. 第一种方式,由于要记录日志,因此IO消耗更多,durat ...
- php:修改NetBeans默认字体
在Netbeans中由于使用了Swing进行开发,所以其中界面的字体也是由Java虚拟机进行配置而不是随操作系统的.在安装完Netbeans后默认的字体大小是11px.而在Windows下的宋体最小支 ...