velocity找不到模版?

当Velocity在Servlet环境中使用FileResourceLoader时,可能导致找不到模板的问题。为解决此问题,可以改用ClasspathResourceLoader,它能从类路径加载模板,如将模板放在/WEB-INF/classes/templates目录下。Velocity还提供其他资源加载器,如DataSourceResourceLoader、JarResourceLoader、URLResourceLoader和StringResourceLoader。配置示例展示了如何使用StringResourceLoader加载资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

velocity默认的资源加载器是FileResourceLoader,该加载器从文件系统中加载资源,当Velocity使用于Servlet中时,这会成为一个问题,很多人因此找不到模板。


velocity还有另外的资源加载器ClasspathResourceLoader,该加载器从类路径中加载资源。简单的说,该加载器会加载放置在类路径中的模版资源(比如在某个jar中)。在使用符合Servlet2.2或之后的版本的容器时,这是一个比较简单的机制。例如,你可以把模版放在/WEB-INF/classes/templates目录下。

下面代码获取模版/WEB-INF/classes/templates/hello.vm

Properties p = new Properties();
p.setProperty("resource.loader", "class");
p.setProperty("class.resource.loader.class","org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
//设置资源加载器器为ClasspathResourceLoader,这段可以写到配置文件中
...
VelocityEngine ve = new VelocityEngine();
ve.init(p);
template = ve.getTemplate("/templates/hello.vm", "UTF-8");
...

 

目前velocity 1.5提供了6种加载器,除了上文提到的FileResourceLoader和ClasspathResourceLoader外,还包括:


DataSourceResourceLoader : 在加载器会从一个DataSource中加载资源,比如一个数据库中。

JarResourceLoader : 该资源加载器从一个指定的jar文件中加载资源。

URLResourceLoader : 一个简单的URL资源加载器。

StringResourceLoader : 从一个字符串加载资源。
下面是一个使用该loader的配置实例:


string.resource.loader.description = Velocity StringResource loader
string.resource.loader.class = org.apache.velocity.runtime.resource.loader..StringResourceLoader
string.resource.loader.repository.class = org.apache.velocity.runtime.resource.loader.StringResourceRepositoryImpl


该加载器可加载下列资源:

StringResourceRepository vsRepository = StringResourceLoader.getRepository();
String myTemplateName = "/somewhere/intherepo/name";
String myTemplateBody = "Hi, ${username}... this is a some template!";
vsRepository.putStringResource(myTemplateName, myTemplateBody);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值