Velocity 模板加载方式如何拓展
个人了解 velocity 提供文件,类路径和jar三种模板加载方式。
现在有个需求是这样的: 要对外提供一个 servlet ,别人提供两个参数:一个是数据,另一个是template 但是都是以url的形式给我 我怎么通过url 去加载模板 去得数据呢?
不能 把模板写成本机文件 然后再加载吧
请各位大侠 指点啊
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
多谢红薯大哥,问题已经解决。api里的那个
URLResourceLoader可以试用,之所以不行是因为少配置了属性***.resource.loader.root 这个属性。 这个属性还支持数组 ,也就是说 可以配置多个站点的ip:端口/appname/ 这点还是很强大。 有一点不好的是 如果不配置的话 就会报错。配置成“” 如
***.resource.loader.root=“”;这样在getTemplate(“http://....”)是没有问题滴。我看了源码 Engine要是对这种没有配置的属性做个容错就好啦
API提供的那个urlloader 能用么?我试了下 好像不行哈
我用API里那个 : Properties properties = new Properties(); properties.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8"); properties.setProperty(Velocity.INPUT_ENCODING, "UTF-8"); properties.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8"); properties.setProperty(Velocity.RESOURCE_LOADER, "URLResourceLoader"); properties.setProperty("URLResourceLoader.resource.loader.class", "org.apache.velocity.runtime.resource.loader.URLResourceLoader"); Velocity.init(P); Template t = Velocity.getTemplate("http://9.186.105.82:8080/velocityDemo/test.vm"); StringWriter sw = new StringWriter(); VelocityContext vc = new VelocityContext(); t.merge(vc, sw); 报道错还是找不到: SEVERE: ResourceManager : unable to find resource 'http://9.186.105.82:8080/velocityDemo/test.vm' in any resource loader. Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'http://9.186.105.82:8080/velocityDemo/test.vm'
配置写法:resource.loader = Loader类名
我看api里面有个 org.apache.velocity.runtime.resource.loader.URLResourceLoader 这个可以加载根据url得到的模板么? 如果可以,配置文件的Velocity.RESOURCE_LOADER 应该写什么? 还有如果自己实现ResourceLoader的时候 Velocity.RESOURCE_LOADER 又怎么写呢?
可以自行实现一个 ResourceLoader ,然后怎么加载就看你自己了