使用CompositeResourceLoader

组合加载器,可以包含多个已有的ResourceLoader,如下代码将创建一个包含俩个文件和内存的ResourceLoader

  1. FileResourceLoader fileLoader1 = new FileResourceLoader(path1);
  2. FileResourceLoader fileLoader2 = new FileResourceLoader(path2);
  3. Map data = getData();
  4. // 根据id加载
  5. MapResourceLoader mapLoader = new MapResourceLoader(data);
  6. CompositeResourceLoader loader = new CompositeResourceLoader();
  7. loader.addResourceLoader(new StartsWithMatcher("http:").withoutPrefix(), fileLoader2);
  8. loader.addResourceLoader(new StartsWithMatcher("db:"), mapLoader);
  9. loader.addResourceLoader(new AllowAllMatcher(), fileLoader1);
  10. GroupTemplate gt = new GroupTemplate(loader, conf);
  11. Template t = gt.getTemplate("/xxx.html");

如上例子,groupTemplate从CompositeResourceLoader里加载/xxx.html,由于http:和db:前缀都不匹配,因此,将实际采用fileLoader1加载path1+/xxx.html,如下是xxx.html文件内容

  1. <%
  2. include("/xxx2.html"){}
  3. include("http:/xxx.html"){}
  4. %>

第2行仍然是由fileLoader1加载,但第3行以http:前缀开头,因此将fileLoader2加载path2+/xxx.html.xxx.html内容如下

  1. <%
  2. include("db:1"){}
  3. %>

因为以db:开头,因此会采用MapResourceLoader加载,内容是key为db:1对模板