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加载方式生成静态页面的更多相关文章

  1. C#加载前生成静态网页

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  2. Linux共享库两种加载方式简述

      Linux共享库两种加载方式简述  动态库技术通常能减少程序的大小,节省空间,提高效率,具有很高的灵活性,对于升级软件版本也更加容易.与静态库不同,动态库里面的函数不是执行程序本身 的一部分,而是 ...

  3. Fragment加载方式与数据通信

    一.加载方式 1. 静态加载 1.1 加载步骤 (1) 创建fragment:创建自定义Fragment类继承自Fragment类,同时将自定义Fragment类与Fragment视图绑定(将layo ...

  4. PHP代码为什么不能直接保存HTML文件——&gt;PHP生成静态页面教程

    1.server会依据文件的后缀名去进行解析,假设是HTML文件则server不会进行语法解析.而是直接输出到浏览器. 2.假设一个页面中所有都是HTML代码而没有须要解析的PHP语法,则没有必要保存 ...

  5. 浅谈php生成静态页面

    一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...

  6. .net 生成 静态页面

    .net 生成 静态页面 <!--Main.Aspx--> <%@ page language="C#" %> <%@ import namespac ...

  7. [转]把动态页面.aspx 生成静态页面.html

    本文转自:http://blog.csdn.net/csb5201314/article/details/5391688 如果要把主页Index.aspx 生成静态页面 Index.html后输出会提 ...

  8. 链接库lib和dl的概念,加载方式的区别

    使用LR进行基于windows socket协议做接口测试,只提供了lr_load_dll方法来动态加载动态链接库.之前学习阶段,对TinyXML的学习,使用的静态链接库,当时在程序调用的时候方法也跟 ...

  9. Javascript动态加载Html元素到页面Dom文档结构时执行顺序的不同

    我们有时会通过ajax动态获取一段Html代码,并且将这段代码通过javascript放到页面的Dom结构中去. 而很多时候通过ajax动态获取的Html代码中也包含javascript代码,有一点需 ...

随机推荐

  1. 【mysql】关于子查询的一个例子

    假设表my_tbl包含三个字段a,b,c:现在需要查询表中列a的每个不同值下的列b为最小值的记录量. 比如表记录为: a  b  c 1  3  'cd' 2  3  'nhd' 1  5  'bg' ...

  2. Verifying Checksum ... Bad Data CRC 错误解决

    1.问题描述:使用SAM9X25  内核版本是2.6.39  在启动内核时会出现Verifying Checksum ... Bad Data CRC 错误 2.解决办法: 查看原先uboot参数: ...

  3. Java中的statickeyword具体解释

    1.statickeyword主要有2个作用: ①为某特定的数据类型或者对象分配单一的存储空间.而与创建对象的个数无关. ②在不创建对象的情况下能够直接通过类名来直接调用方法或者使用类的属性. 2.s ...

  4. Codeforces 4A-Watermelon(意甲冠军)

    A. Watermelon time limit per test 1 second memory limit per test 64 megabytes input standard input o ...

  5. js实现的侧边栏展开收缩效果

    原文地址:http://www.softwhy.com/forum.php?mod=viewthread&tid=12246 <!DOCTYPE html> <html> ...

  6. POJ 3286 How many 0&#39;s?

    题目大意: 计算[m,n]之间全部数字有多少个零. 解题思路: 能够用[0,m)之间和[0,n]之间有多少个零然后作差. 规律是计算全部位置在到当前数时有多少个零. 以下是代码:   #include ...

  7. awk使用的实例

    1.使用split函数 name.url的内容: 上海    http://trip.elong.com/shanghai/jingdian elong   destination 云南    htt ...

  8. Reset and clock control (RCC) STM32L

    Reset: 1.系统复位:A system reset sets all registers to their reset values except for the RTC, RTC backup ...

  9. POJ2239_Selecting Courses(二分图最大匹配)

    解题报告 http://blog.csdn.net/juncoder/article/details/38154699 题目传送门 题意: 每天有12节课.一周上7天,一门课在一周有多天上课. 求一周 ...

  10. net Mvc模块化开发

    Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)” 项目开发从来就不是一个简单的问题.更难的问题是维护其他人开发的项目,并且要修改bug.如果原系统有重大问题还需要重构. 怎么重构系统 ...