java错误加载模板文件_freemarker报 java.io.FileNotFoundException:及TemplateLoader使用

2023-05-16

使用过freemarker的肯定其见过如下情况:

1 java.io.FileNotFoundException: Template xxx.ftl not found.

模板找不到。可能你会认为我明明指定了文件,并且文件存在,但是为什么就是说找不到呢?

经过研究官方的API,原来freemarker在加载模板时,建议使用TemplateLoader,通过TemplateLoader指定从哪个目录开始加载模板,并且把模板加载在缓存中。

API的TemplateLoader是一个接口,他有如下几个实现类:

1 ClassTemplateLoader, FileTemplateLoader, MultiTemplateLoader, StringTemplateLoader, URLTemplateLoader, WebappTemplateLoader

顾名思义,我们能从类名中猜想到freemarker的模板加载机制,举例说明两个:

1:FileTemplateLoader

此是文件模板加载器,此即可以通过文件的绝对路径加载模板,如:

1 TemplateLoader templateLoader=null;2 String path="";3

4 //使用FileTemplateLoader

5 templateLoader=new FileTemplateLoader(new File("项目根路径"));6 path="/WEB-INF/classes/com/xxx/tag/templates/page/xxx.ftl";7

8 cfg.setTemplateLoader(templateLoader);9 Template t=cfg.getTemplate(path,"UTF-8");

2:ClassTemplateLoader

此是通过指定类所在的目录来指定模板所在根路径,即指定类在哪个目录,那么这个目录就是加载模板文件的根目录,如下:

1 Configuration cfg = newConfiguration();2

3 TemplateLoader templateLoader=null;4 String path="";5

6 templateLoader=new ClassTemplateLoader(PageTag.class,"templates/page/");7 path="standardd.ftl";8

9 cfg.setTemplateLoader(templateLoader);10 Template t=cfg.getTemplate(path,"UTF-8");

此即表示比PageTag类所在的目录开始找,找这个目录下的templates/page/目录,

其它的加载器原理同上,

如果你是web项目,并且使用了spring,那么。你还可以通过spring来配置你模板文件的根目录,如下:

1

2

3

4

5 UTF-8

6

7

8

此即表示从WEB-INF目录下开始找。

原文:http://zwllxs.iteye.com/blog/996244

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java错误加载模板文件_freemarker报 java.io.FileNotFoundException:及TemplateLoader使用 的相关文章

随机推荐