通过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加载方式生成静态页面,布布扣,bubuko.com

时间: 2024-10-05 03:57:26

通过FreeMarkerclasspath加载方式生成静态页面的相关文章

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

动态库技术通常能减少程序的大小,节省空间,提高效率,具有很高的灵活性,对于升级软件版本也更加容易.与静态库不同,动态库里面的函数不是执行程序本身 的一部分,而是在程序执行时按需载入,其执行代码可以同时在多个程序中共享.由于在编译过程中无法知道动态库函数的地址,所以需要在运行期间查找,这对程 序的性能会有影响. 共享库 对于共享库来讲,它只包括2个段:只读的代码段 和可修改的数据段.堆和栈段,只有进程才有.如果你在共享库的函数里,分配了一块内存,这段内存将被算在调用该函数的进程的堆中.代码段由于其

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

1.server会依据文件的后缀名去进行解析,假设是HTML文件则server不会进行语法解析.而是直接输出到浏览器. 2.假设一个页面中所有都是HTML代码而没有须要解析的PHP语法,则没有必要保存为PHP文件,这样反而会减少执行效率. 3.假设是须要PHP控制HTML代码的输出,比方须要PHP推断用户是否登陆,假设登陆则输出A,未登录则输出B.这就须要PHP来进行控制了.HTML不能实现这种功能 PHP生成静态页面教程 ,一些主要的概念 一,PHP脚本与动态页面. PHP脚本是一种serve

浅谈Entity Framework中的数据加载方式

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx,其中的一系列文

Linux驱动的两种加载方式过程分析

一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译和下载内核,效率较低.若采用静态加载的驱动较多,会导致内核容量很大,浪费存储空间. 动态加载利用了Linux的module特性,可以在系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块,采用这种动态加载的方式便于驱动程序的调试,同时可以针对产品的功能需求,进行

链接库DLL的概念,加载方式的区别

使用LR进行基于windows socket协议做接口测试,只提供了lr_load_dll方法来动态加载动态链接库.之前学习阶段,对TinyXML的学习,使用的静态链接库,当时在程序调用的时候方法也跟LR里的不一样,那问题来了:lib和dll的区别是什么,每种链接库有多少种加载方式,怎么加载呢. 链接库可以向应用程序提供一些函数,变量和类.动态链接库的动态调用(也叫显式调用,手工加载)我是可以运用了,但是静态调用(也叫隐式调用,自动加载).静态链接库:lib中的函数不仅被连接,全部实现都被直接包

freemark生成静态页面

到freemark的官方网站下载: http://sourceforge.net/projects/freemarker/files/freemarker/2.3.20/freemarker-2.3.20.tar.gz/download 建一个web project,如下: 建成的项目结构如下: 模板文件如下(test.ftl): <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html

Java项目生成静态页面

第一次做项目需要生成静态页面,网上很多大牛对将网页生成静态页面有很多异议.说一下我的看法. 不外乎有以下因素: 1.从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是访问数据量较大的页面,这种页面大多要查很多结果集,因此建立连接次数就增多了,时间不可观,而静态页面则省去了这些时间. 2.从便于搜索引擎抓取的角度来讲:搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎SEO排名更容易提高,一些大门户站页面大多都采用静态或伪静态网页来显示,更便于搜索引

浅谈php生成静态页面

一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权限限制等,但是,对应一些我们经常频频使用的文件,比方说,开发的新闻发布系统,我们不希望很多用户都读取数据库才显示结果,这样一方面消耗了服务器的资源,另一方面占去了浏览者大量可贵的响应时间,所有,有了"静态页面话"的做法,当前很多网站都采用这种技术,一般都是由管理后台控制,或者生成html直

javascript 的加载方式

本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续