code: @Override
    protected TemplateLoader createTemplateLoader(ServletContext servletContext, String templatePath) {
      // construct a FileTemplateLoader for the init-param 'TemplatePath'
      String[] paths = split(templatePath, ",");
      List<TemplateLoader> loaders = CollectUtils.newArrayList();
      for (String path : paths) {
        if (path.startsWith("class://")) {
          loaders.add(new BeangleClassTemplateLoader(substringAfter(path, "class://")));
        } else if (path.startsWith("file://")) {
          try {
            loaders.add(new FileTemplateLoader(new File(substringAfter(path, "file://"))));
          } catch (IOException e) {
            throw new RuntimeException("templatePath: " + path + " cannot be accessed", e);
          }
        } else if (path.startsWith("webapp://")) {
          loaders.add(new WebappTemplateLoader(servletContext, substringAfter(path, "webapp://")));
        } else {
          throw new RuntimeException("templatePath: " + path
              + " is not well-formed. Use [class://|file://|webapp://] seperated with ,");
        }
  
      }
      return new MultiTemplateLoader(loaders.toArray(new TemplateLoader[loaders.size()]));
    }
docs: The default template loader is a MultiTemplateLoader which includes
  BeangleClassTemplateLoader(classpath:) and a WebappTemplateLoader
  (webapp:) and FileTemplateLoader(file:) . All template path described
  in init parameter templatePath or TemplatePlath
  <p/>
  The ClassTemplateLoader will resolve fully qualified template includes that begin with a slash.
  for example /com/company/template/common.ftl
  <p/>
  The WebappTemplateLoader attempts to resolve templates relative to the web root folder