freemaker:使用 class 加载程序从不同路径读取模板
freemaker: read template from different path using class loader
我的 TemplateLoader
class 在路径 src/main/java
我的模板文件位于 src/resources/template
当我尝试使用以下代码加载模板时
Configuration config = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
config.setClassForTemplateLoading(this.getClass(), "/");
Template template = config.getTemplate( "resources/template/test.ftl");
它给出以下错误:
freemarker.template.TemplateNotFoundException: Template not found for
name "resources/template/test.ftl".
文件位于正确的位置。那么如何使用免费标记加载此文件?
问题是 resources
仅存在于您的源代码中(这是 Maven 的东西),但不存在于已编译的项目中。所以应该是config.getTemplate( "template/test.ftl");
。但是,如果先使用 config.setClassForTemplateLoading(this.getClass(), "/template");
然后使用 config.getTemplate( "test.ftl");
会更好。拥有模板根目录的目的是使实际位置透明,并防止模板包含并因此暴露不是模板的任意资源的安全问题。
我的 TemplateLoader
class 在路径 src/main/java
我的模板文件位于 src/resources/template
当我尝试使用以下代码加载模板时
Configuration config = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
config.setClassForTemplateLoading(this.getClass(), "/");
Template template = config.getTemplate( "resources/template/test.ftl");
它给出以下错误:
freemarker.template.TemplateNotFoundException: Template not found for name "resources/template/test.ftl".
文件位于正确的位置。那么如何使用免费标记加载此文件?
问题是 resources
仅存在于您的源代码中(这是 Maven 的东西),但不存在于已编译的项目中。所以应该是config.getTemplate( "template/test.ftl");
。但是,如果先使用 config.setClassForTemplateLoading(this.getClass(), "/template");
然后使用 config.getTemplate( "test.ftl");
会更好。拥有模板根目录的目的是使实际位置透明,并防止模板包含并因此暴露不是模板的任意资源的安全问题。