velocity基础教程--2自定义ResourceLoader实现字符模板
来源:互联网 发布:安卓机推荐2017 知乎 编辑:程序博客网 时间:2024/04/27 20:41
velocity虽然已经为我们提供了一些资源加载器,基本已经可以满足大部分的用户需求。有的时候还需要我们必须手动去写一些,比如:我们打算采用String的模板而不是vm文件形式,为的是将模板存入db中。
这是我们只需要继承org.apache.velocity.runtime.resource.ResourceLoader 并实现我们想要的功能。
下面的例子就是拿上面的需求来进行一个简单的实现。
我们只需实现getResourceStream方法就可以了。很简单吧
应用就更简单了,基本上和我们的上一个例子没有区别
主要就是 p.put("resource.loader","srl");
p.put("srl.resource.loader.class","test.velocity.MyResourceLoader");
这两行,来定义资源加载器
这样Template t=ve.getTemplate("你好 $name !\r\n$project project.","gbk");
模板中的内容我们就可以通过数据库读取出来
该实现虽然简单,不过我认为还是比较有用。
这是我们只需要继承org.apache.velocity.runtime.resource.ResourceLoader 并实现我们想要的功能。
下面的例子就是拿上面的需求来进行一个简单的实现。
- import java.io.ByteArrayInputStream;
- import java.io.InputStream;
- import org.apache.commons.collections.ExtendedProperties;
- import org.apache.velocity.exception.ResourceNotFoundException;
- import org.apache.velocity.runtime.resource.Resource;
- import org.apache.velocity.runtime.resource.loader.ResourceLoader;
- public class MyResourceLoader extends ResourceLoader {
- @Override
- public long getLastModified(Resource arg0) {
- // TODO Auto-generated method stub
- return 0;
- }
- @Override
- public InputStream getResourceStream(String arg0)
- throws ResourceNotFoundException {
- InputStream result = null;
- if (arg0 == null || arg0.length() == 0) {
- throw new ResourceNotFoundException(
- "模板没有被定义~!");
- }
- result = new ByteArrayInputStream(arg0.getBytes());
- return result;
- }
- @Override
- public void init(ExtendedProperties arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public boolean isSourceModified(Resource arg0) {
- // TODO Auto-generated method stub
- return false;
- }
- }
我们只需实现getResourceStream方法就可以了。很简单吧
应用就更简单了,基本上和我们的上一个例子没有区别
- import java.io.StringWriter;
- import java.util.Properties;
- import org.apache.velocity.Template;
- import org.apache.velocity.VelocityContext;
- import org.apache.velocity.app.VelocityEngine;
- public class Simple2 {
- /**
- * 入门,自定义资源加载器
- */
- public static void main(String[] args) {
- // 创建引擎
- VelocityEngine ve=new VelocityEngine();
- Properties p=new Properties();
- p.put("resource.loader","srl");
- p.put("srl.resource.loader.class","test.velocity.MyResourceLoader");
- try {
- //进行初始化操作
- ve.init(p);
- //加载模板,设定模板编码
- Template t=ve.getTemplate("你好 $name !\r\n$project project.","gbk");
- //设置初始化数据
- VelocityContext context = new VelocityContext();
- context.put("name", "张三");
- context.put("project", "Jakarta");
- //设置输出
- StringWriter writer = new StringWriter();
- //将环境数据转化输出
- t.merge(context, writer);
- //简化操作
- //ve.mergeTemplate("test/velocity/simple1.vm", "gbk", context, writer );
- System.out.println(writer.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
主要就是 p.put("resource.loader","srl");
p.put("srl.resource.loader.class","test.velocity.MyResourceLoader");
这两行,来定义资源加载器
这样Template t=ve.getTemplate("你好 $name !\r\n$project project.","gbk");
模板中的内容我们就可以通过数据库读取出来
该实现虽然简单,不过我认为还是比较有用。
0 0
- velocity基础教程--2自定义ResourceLoader实现字符模板
- velocity基础教程--2自定义ResourceLoader实现字符模板
- SpringMVC实现velocity多Resourceloader通过文件、数据库等方式加载模版
- 实现自定义Velocity Context
- velocity基础教程
- Apache Velocity实现模板化
- ResourceLoader
- 使用 Velocity 实现客户端和服务器端模板
- 使用 Velocity 实现客户端和服务器端模板
- 使用 Velocity 实现客户端和服务器端模板
- 使用 Velocity 实现客户端和服务器端模板
- 使用 Velocity 实现客户端和服务器端模板
- 使用 Velocity 实现客户端和服务器端模板
- 使用 Velocity 实现客户端和服务器端模板
- 使用 Velocity 实现客户端和服务器端模板
- Velocity 实现客户端和服务器端模板
- velocity基础教程--4通过velocity生成文件--网站静态化实现方案
- velocity基础教程--4通过velocity生成文件--网站静态化实现方案
- 通过配置Flavors和自定义buildConfigField进行多个服务器地址打包
- QT中PRO文件写法的详细介绍!
- git学习
- Tomcat安装与使用
- 【Halcon】显示图片+opencv转halcon
- velocity基础教程--2自定义ResourceLoader实现字符模板
- 最近比较流行LUA闭包,顺便了解下原理并记录使用方式
- android greenDao 编译问题总结
- db2 winds系统搭建数据库详解
- 深入理解乐观锁与悲观锁
- GCD学习之——Dispatch I/O
- delphi常用日期函数
- 68天-数据库网络---相机调用之读取相册、编辑照片、拍照
- Linux中存储管理使用的数据结构和函数