首先,你应该创建一个 freemarker.template.Configuration
实例,
然后调整它的设置。Configuration
实例是存储 FreeMarker 应用级设置的核心部分。同时,它也处理创建和
缓存 预解析模板(比如 Template
对象)的工作。
也许你只在应用(可能是servlet)生命周期的开始执行一次:
// Create your Configuration instance, and specify if up to what FreeMarker // version (here 2.3.22) do you want to apply the fixes that are not 100% // backward-compatible. See the Configuration JavaDoc for details. Configuration cfg = new Configuration(Configuration.VERSION_2_3_22); // Specify the source where the template files come from. Here I set a // plain directory for it, but non-file-system sources are possible too: cfg.setDirectoryForTemplateLoading(new File("/where/you/store/templates")); // Set the preferred charset template files are stored in. UTF-8 is // a good choice in most applications: cfg.setDefaultEncoding("UTF-8"); // Sets how errors will appear. // During web page *development* TemplateExceptionHandler.HTML_DEBUG_HANDLER is better. cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
从现在开始,应该使用 单 实例配置(也就是说,它是单例的)。
请注意不管一个系统有多少独立的组件来使用 FreeMarker,
它们都会使用他们自己私有的 Configuration
实例。
Warning!
不需要重复创建 Configuration
实例;
它的代价很高,尤其是会丢失缓存。Configuration
实例就是应用级别的单例。
当使用多线程应用程序(比如Web网站),Configuration
实例中的设置就不能被修改。它们可以被视作为 "有效的不可改变的"
对象, 也可以继续使用 安全发布 技术
(参考 JSR 133 和相关的文献)来保证实例对其它线程也可用。比如,
通过final或volatile字段来声明实例,或者通过线程安全的IoC容器,但不能作为普通字段。
(Configuration
中不处理修改设置的方法是线程安全的。)