博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java-Freemarker TemplateLoader实现模版
阅读量:5064 次
发布时间:2019-06-12

本文共 4088 字,大约阅读时间需要 13 分钟。

 

TemplateLoader的实现

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

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

 

StringTemplateLoader

内存字符串的使用。

@Testpublic void testStringTL() throws IOException {    StringTemplateLoader stl = new StringTemplateLoader();    String template = "rrrrr${key}rrrrr";    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);}

 

例:

public static void main(String[] args){
     // 读取项目下的文件 Resource resource = new ClassPathResource("sqls/xxx.sql"); InputStream inputStream = null; String sql = null; try { inputStream = resource.getInputStream(); byte[] bytes = IOUtils.toByteArray(inputStream); sql = new String(bytes); sql = sql.replaceAll("\r\n\t"," "); sql = sql.replaceAll("\r\n"," "); sql = sql.replaceAll("\t",""); sql = sql.replaceAll("[ ]+"," ");        // 替换参数 Map
paramMap = new HashMap<>(); paramMap.put("beginDate","20170901"); paramMap.put("futureEndDate","20170914"); paramMap.put("taskid","8a7a8282600731bb016007324d770000"); List
cycleList = new ArrayList<>(); SqlListEntity entity1 = new SqlListEntity(); entity1.setName("第1周"); cycleList.add(entity1); SqlListEntity entity2 = new SqlListEntity(); entity2.setName("第2周"); cycleList.add(entity2); paramMap.put("cycleList",cycleList); Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);        // StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); stringTemplateLoader.putTemplate(sql,sql); configuration.setTemplateLoader(stringTemplateLoader); Template temp = configuration.getTemplate(sql); StringWriter queryStringWriter = new StringWriter(); temp.process(paramMap, queryStringWriter); System.out.println(queryStringWriter.toString()); } catch(IOException e) { e.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(inputStream); } }

 

 

MultiTemplateLoader

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

@Testpublic 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的表达式

@Testpublic 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();

 

 

转载于:https://www.cnblogs.com/hwaggLee/p/7927841.html

你可能感兴趣的文章
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
bzoj1230 开关灯 线段树
查看>>
LinearLayout
查看>>
css3动画属性
查看>>
Mongodb 基本命令
查看>>
控制文件的备份与恢复
查看>>
PHP的SQL注入技术实现以及预防措施
查看>>
软件目录结构规范
查看>>
mysqladmin
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
查看>>
Eclipse 调试的时候Tomcat报错启动不了
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>