ResourceLoaderAPI文档中有一个类:
https://velocity.apache.org/engine/2.0/apidocs/org/apache/velocity/runtime/resource/loader/ResourceLoader.html
我想实现自己的加载器,因为我需要从数据库中加载模板,但是要使用上下文相关的方式(换句话说:无法使用DataSourceResourceLoader,我需要编写自定义代码以从数据库中选择“正确的”模板)。数据库)。
似乎ResourceLoader有一些抽象方法,而且似乎也可以通过实现这些抽象方法来编写自定义加载程序。但是我看不到任何向引擎添加新加载程序的方法。没有“ addResourceLoader”方法。该文档仅显示了如何配置Velocity内置的装载程序:
https://velocity.apache.org/engine/2.0/developer-guide.html#resource-loaders
主要问题:如何向VelocityEngine(或VelocityContext)添加自定义资源加载器?
另一个问题:我想关闭所有内置装载机。特别WebappResourceLoader是默认情况下处于活动状态的它,在我的特定应用程序中会带来安全风险。怎么做?
我无法回答如何实现自己的资源加载器,但是第二部分非常简单:
创建VelocityEngine时,可以传递定义资源加载器“类路径”的属性。
不同的类加载器由属性键的前缀标识。所以像这样:
Properties props = new Properties();
// Add a default class path resource loader - just an example
props.setProperty("cp.resource.loader.class", ClasspathResourceLoader.class.getName());
props.setProperty("cp.resource.loader.cache", "true);
// Add your own resource loader
props.setProperty("db.resource.loader.class", MyDBResourceLoader.class.getName());
props.setProperty("db.resource.loader.cache", "false");
// Define the "class path" for the loaders
// in this case first the "db" loader is asked for resources, if nothing is found the "cp" loader
props.setProperty(RuntimeConstants.RESOURCE_LOADER, "db,cp");
// Now create the engine
VelocityEngine engine = new VelocityEngine(props);
上面仅为该引擎定义了两个资源加载器,该引擎实例将不使用其他加载器。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。