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

原文源自:https://zwllxs.iteye.com/blog/996244

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

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

模板找不到。可能你会认为我明明指定了文件,并且文件存在,但是为什么就是说找不到呢? 
经过研究官方的API,原来freemarker在加载模板时,建议使用TemplateLoader,通过TemplateLoader指定从哪个目录开始加载模板,并且把模板加载在缓存中。 

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

ClassTemplateLoader, FileTemplateLoader, MultiTemplateLoader, StringTemplateLoader, URLTemplateLoader, WebappTemplateLoader  

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

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

 TemplateLoader templateLoader=null;
            String path="";
            
            //使用FileTemplateLoader
           templateLoader=new FileTemplateLoader(new File("项目根路径"));
           path="/WEB-INF/classes/com/xxx/tag/templates/page/xxx.ftl";
                        
            cfg.setTemplateLoader(templateLoader);
            Template t=cfg.getTemplate(path,"UTF-8");

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

Configuration cfg = new Configuration();
            
            TemplateLoader templateLoader=null;
            String path="";
            
            templateLoader=new ClassTemplateLoader(PageTag.class,"templates/page/");
            path="standardd.ftl";
            
            cfg.setTemplateLoader(templateLoader);
            Template t=cfg.getTemplate(path,"UTF-8");

此即表示比PageTag类所在的目录开始找,找这个目录下的templates/page/目录, 
其它的加载器原理同上, 如果你是web项目,并且使用了spring,那么。你还可以通过spring来配置你模板文件的根目录,如下:

	<bean id="freemarkerConfig" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
		<property name="templateLoaderPath" value="/WEB-INF" />
		 <property name="freemarkerSettings">
			<props>       
				<prop key="defaultEncoding">UTF-8</prop>       
			</props>       
		</property>
	</bean>

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值