Java中不乏优秀的模板引擎,Velocity,mvel,FreeMarker等。在构建框架的时候,通常可以拿来即用,但我们需要控制它。最近需要一个数据准备的框架,便选择了FreeMarker,FreeMarker使用起来很简单,data+template=out.今天主要写一下其中template加载组件TemplateLoader

TemplateLoader的实现

作为一个模板文件加载的抽象,自然不能限制模板来自何方,在FreeMarker中由几个主要的实现类来体现,这些TemplateLoader是可以独立使用的,Webapp需要Servlet环境。当然你可以实现自己的TemplateLoader.

  • StringTemplateLoader 直接将内存中的String对象放入并使用
  • FileTemplateLoader 本地文件目录
  • ClassTemplateLoader ClassPath 加载
  • WebappTemplateLoader ServletContext
  • MultiTemplateLoader 多个TemplateLoader的叠加,顺序按照数组的顺序优先加载

StringTemplateLoader

刚开始总觉得StringTemplateLoader简单,其实挺麻烦,而且也无大用。

@Test
public void testStringTL() throws IOException {
StringTemplateLoader stl = new StringTemplateLoader();
String template = "${key}";
stl.putTemplate("hello", template);
Object source = stl.findTemplateSource("hello");
Reader reader = stl.getReader(source, "utf-8");
String dest = IOUtils.toString(reader);
Assert.assertEquals(template, dest); }

MultiTemplateLoader

TemplateLoader是可以多种类型,同种类型组合起来使用的,查询顺序按照数组的顺序优先。

@Test
public void testMultiTL() throws IOException {
TemplateLoader ctl = new ClassTemplateLoader(TemplateLoaderTest.class,
"/");
TemplateLoader ftl1 = new FileTemplateLoader(new File(
System.getProperty("user.dir")));
MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[] {
ftl1,ctl }); Object source = mtl.findTemplateSource("test.ftl");
Reader reader = mtl.getReader(source, "utf-8");
String dest = IOUtils.toString(reader);
Assert.assertEquals("${hello}", dest);
}

通常在Configuration中使用,才能方便的处理FreeMarker的表达式

@Test
public void testInConfiguration() throws IOException {
Configuration configuration = new Configuration(
Configuration.VERSION_2_3_21);
configuration.setDefaultEncoding("utf-8");
TemplateLoader ctl = new ClassTemplateLoader(TemplateLoaderTest.class,
"/");
TemplateLoader ftl1 = new FileTemplateLoader(new File(
System.getProperty("user.dir")));
MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[] {
ftl1,ctl });
configuration.setTemplateLoader(mtl);
//configuration.getTemplate("test.ftl").process(data, out);
}

其它

缓存

模板加载通常是耗费资源的,默认是开启缓存的,缓存的实现,是否使用缓存取决于你

configuration.setCacheStorage(new freemarker.cache.NullCacheStorage());

configuration.clearTemplateCache();

FreeMarker-TemplateLoader的更多相关文章

  1. Caused by: java.lang.NoClassDefFoundError: freemarker/cache/TemplateLoader

    1.错误描写叙述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -he ...

  2. freemarker模板加载TemplateLoader常见方式

    使用过freemarker的肯定其见过如下情况: java.io.FileNotFoundException: Template xxx.ftl not found. 模板找不到.可能你会认为我明明指 ...

  3. freemarker报 java.io.FileNotFoundException:及TemplateLoader使用

    使用过freemarker的肯定其见过如下情况: java.io.FileNotFoundException: Template xxx.ftl not found. 模板找不到.可能你会认为我明明指 ...

  4. Freemarker 程序开发

    Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...

  5. 利用freemarker 静态化网页

    1.介绍-FreeMarker是什么 模板引擎:一种基于模板的.用来生成输出文本的通用工具 基于Java的开发包和类库 2.介绍-FreeMarker能做什么 MVC框架中的View层组件 Html页 ...

  6. 用 Freemarker 生成 word 文档(包含图片)

    1. 用word写一个需要导出的word模板,然后存为xml格式. 2. 将xml中需要动态修改内容的地方,换成freemarker的标识符,例如: <w:p wsp:rsidR="0 ...

  7. Freemarker常用技巧(二)

    1 list.break指令<#list sequence as item>  ...</#list>tem_index:当前变量的索引值.item_has_next:是否存在 ...

  8. 利用FreeMarker静态化网页

    1.介绍-FreeMarker是什么 模板引擎:一种基于模板的.用来生成输出文本的通用工具 基于Java的开发包和类库 2.介绍-FreeMarker能做什么 MVC框架中的View层组件 Html页 ...

  9. SpringMVC源码情操陶冶-FreeMarker之web配置

    前言:本文不讲解FreeMarkerView视图的相关配置,其配置基本由FreeMarkerViewResolver实现,具体可参考>>>SpringMVC源码情操陶冶-ViewRe ...

  10. SpringBoot下配置FreeMarker配置远程模版

    需求产生原因 要求在同一个接口中,根据不同的参数,返回不同的视图结果 所有的视图中的数据基本一致 要求页面能静态化,优化SEO 例如:A接口返回客户的信息 客户A在调用接口时,返回其个性化定制的页面A ...

随机推荐

  1. HTML5 Canvas实现刮刮卡效果实例

    HTML: <style> #canvas { border: 1px solid blue; position: absolute; left: 10px; top: 10px; bac ...

  2. myEclipse修改deploy location

  3. 对xml操作

    已知有一个XML文件(bookshop.xml)如下: <?xml version="1.0" encoding="gb2312" ?> <b ...

  4. wpf 大控件 打印 将控件转成 xps格式 并分页打印

    //PayRollPrintList:要打印的 list 可换成自己要打印的类型 private List<PayRoll> _PayRollPrintList = new List< ...

  5. oracle 的 startup,startup mount,startup nomount之间的区别

    startup,startup mount,startup nomount之间的区别   startup nomount选项:(读初始化参数文件,启动实例) startup nomount选项启动实例 ...

  6. XCODE6 提交至 App Store

    新到一个公司,以前的苹果开发人员离职,临时接手他的苹果代码,需要修改并上线到APP STORE.  xcode6.0升级到最新的6.1后, 发现各种坑 1. 路径配置不对, 这个是个人习惯问题,之前的 ...

  7. C#入门经典(第五版)学习笔记(四)

    ---------------集合.比较和转换--------------- C#中的数组是作为System.Array类的实例实现的,它们是集合类(Collection Classes)中的一种类型 ...

  8. VisualStudio2013内置SQLServer入门(二)--增删改查

    前一篇 http://www.cnblogs.com/qixi233/p/4766451.html 这篇是sqlserver的操作 界面比较走心哈哈哈,将就着看,主要就是下面增删改查四个btn 对于s ...

  9. mysql如何将一个表导出为excel表格

    方法一:进入到mysql的控制台,输入: 1. SELECT * INTO OUTFILE ‘./test.xls‘ FROM tb1 WHERE 1 ORDER BY id DESC  LIMIT ...

  10. Fedora 21 安装Infinality

    原文地址: Fedora 21 用infinality美化你的字体 http://blog.csdn.net/element207/article/details/41746683 安装infinal ...