经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代码,有一点需 ...
随机推荐
- Filter基金会
一个.总结 简单的说,Filter的作用就是拦截(Tomcat的)service(Request,Response)方法.拿到Request.Response对象进行处理.然后释放控制.继续自己主动流 ...
- 调用WCF的异步方法
原文:调用WCF的异步方法 AsyncCallback aLoginCallback = delegate(IAsyncResult result) { var aSystemUser = WcfCl ...
- poj1849(求树的直径)
题目链接:http://poj.org/problem?id=1849 题意:有一颗n个结点的带权的无向树, 在s结点放两个机器人, 这两个机器人会把树的每条边都走一遍, 但是最后机器人不要求回到出发 ...
- [置顶] 生成学习算法、高斯判别分析、朴素贝叶斯、Laplace平滑——斯坦福ML公开课笔记5
转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9285001 该系列笔记1-5pdf下载请猛击这里. 本篇博客为斯坦福ML公开 ...
- Learning Cocos2d-x for WP8(7)——让Sprite动起来
原文:Learning Cocos2d-x for WP8(7)--让Sprite动起来 C#(wp7)兄弟篇Learning Cocos2d-x for XNA(7)——让Sprite动起来 本讲将 ...
- linux下安装cmake和mysql遇到的问题总结
首先是在安装cmake的过程中遇到的问题: 1.開始使用yum命令安装时,不知道为什么一直不行,然后就准备wget 来先下载压缩包,再手动编译. 因为网络限制,wget不能下载外网的东西一直显示con ...
- 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)
原文:从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库) 1.安装对应dll Update-Package Xama ...
- Preview of Spring-framework :Spring框架的预习和自我整理
Spring简介 - 预习的自我整理 1. What's Spring? Spring是一个从实际开发中抽取出来的框架,完成了大量开发中的通用步骤,留给开发者仅仅是与特定应用相关的部分,从而提高了企业 ...
- 在Amazon AWS RHEL 7上安装 配置PPTP VPN
0 前言 0.1 为什么需要VPN? 国内的VPN不是必须,但是国外的VPN是很有用的.连接到国外的VPN服务器之后就可以访问Google,Facebook, Youtube等网站,没有Google的 ...
- HTTP2.0协议
HTTP2.0协议 http2协议的草案已经出来了,阅读了一下网上的中文版,http2尽可能的兼容http1.1.改进了http1.1协议的不足. http1.0和http1.1的缺点: 1.http ...