freemarker API

来源:互联网 发布:全站程序员 编辑:程序博客网 时间:2024/06/05 17:13

1、configuration配置,在对象中存储常用(应用级别)的设置和定义某些想在所有模板中可以用的变量。

Configuration cfg=new Configuration();
设置共享变量,为所有模板所定义的变量。其中name为变量名,obj为变量值。

cfg.setSharedVariable(String name,Object obj);

手动清理缓存

cfg.clearTemplateCache();

模板缓存

freemarker会缓存模板(假设使用Configuration对象的方法创建Template对象),那么当调用getTemlate()时,freemarker不但返回了Template对象,而且还将它存储在了缓存中,那么当下一次以同样的方式调用Template方法时,只会返回缓存中的Template实例,而不会再次加载和解析文件了。

如果更改了模板文件,当下次调用模板时,freemarker会自动重新加载和载入模板,要检查是否更改了内容需要一定的时间,我们可以通过Configuration级别的设置叫"更新延迟"来配置这个时间,设置为0的时候表示更新后立即就可以看到效果。

何时将一个被缓存了的模板清除的实际应用策略是由配置的属性cache-storage确定。

在一级缓存中,组件被强烈引用到特定的最大数目(引用次数最多的组件不会被jvm抛弃,引用次数很少的相反),当超过最大数目时,最近最少使用的组件将被送到二级缓存中,在那里它们很少使用,直到达到最大数目。

第一个参数强烈部分最大的数目,第二个参数为轻微部分最大数目。

cfg.setCacheStorage(new MruCacheStorage(int maxStrongSize,int maxSoftSize));
或者使用:

cfg.setSetting(Configuration.CACHE_STORAGE_KEY, "strong:20,soft:250"); //要抛异常

初始值:maxStrongSize=0,maxSoftSize=Integer.MAX_VALUE;

设置编码格式:

cfg.setDefaultEncoding("UTF-8");
设置包装器,将对象包装成数据类型。ObjectWrapper是一个接口,其中定义了一个方法TemplateModel wrap(Object obj),可以传入一个Object对象,返回一个TemplateModel对象。

默认包装:

cfg.setObjectWrapper(ObjectWrapper.DEFAULT.WRAPPER);
或者

cfg.setObjectWrapper(new DefaultObjectWrapper());
也就是默认包装,如利用SimpleScalar替换String,SimpleNumber替换int等。

还一种是:ObjectWrapper.BEANS_WARPPER,这种利用了反射机制。

从多个位置加载模板:

可以将他们封装成一个MultiTemplateLoader的特殊模板加载器,最终传给Configuration对象的setTemplateLoader(TemplateLoader loader)方法。

如从/user/data/templates和/temp/templates两个地方加载模板。

FileTemplateLoader ftl1=new FileTemplateLoader(new File("/temp/templates"));FileTemplateLoader ftl2=new FileTemplateLoader(new File("/user/data/templates"));ClassTemplateLoader ctl1=new ClassTemplateLoader(getClass(),"");TemplateLoader[] loaders=new TemplateLoader[]{ftl1,ftl2,ctl1};MultiTemplateLoader mtl=new MultiTemplateLoader(loaders);cfg.setTemplateLoader(mtl);




0 0