对Velocity的几个关键点问题
1、Velocity是什么?
2、Velocity最佳实践?
3、Velocity使用场景?
4、Velocity在WebApp中的使用?
5、Velocity实践?
6、Velocity技术结构?
7、Velocity技术流程?
8、Velocity技术知识点?
综述
单实例还是多实例
Velocity#init是单实例模式,内部持有RuntimeSingleton#init()
Velocity.setProperty(Velocity.RUNTIME_LOG_LOGSYSTEM,this); Velocity.init(); Template tmplate = Velocity.getTemplate("foo.vm"); |
VelocityEngine可扩展支持多实例模式,内部直接持有RuntimeInstance,每个VelocityEngine实例都有不同的RuntimeInstance。
VelocityEngine ve = new VelocityEngine(); ve.setProperty(VelocityEngine.RUNTIME_LOG_SYSTEM,this); ve.init(); Template tmplate = ve.getTemplate("foo.vm"); |
资源的加载
加载文件路径以“,”分割
1、ClasspathResourceLoader,从ClassLoader#加载模版文件,类似org.ybygjy.HelloVelocity.vm,需要配置
resource.loader = class class.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader |
2、FileResourceLoader,从操作系统的文件系统加载模版文件,可以配置Velocity.properties参数,系统默认加载方式。
file.resource.loader.path = <path to root of templates> file.resource.loader.cache = true/false file.resource.loader.modificationCheckInterval = <seconds between checks> |
3、JarResourceLoader,从Jar文件中加载模版文件
resource.loader = jar |
4、WebappLoader,从Web容器上下文中加载模版文件
webapp.resource.loader.description = Velocity Web Resource Loader webapp.resource.loader.class=org.ybygjy.velocity.loader.CustomerResourceLoader webapp.resource.loader.path=.,vm |
Velocity#与Web应用的集成
Velocity对Servlet的集成有两个基础性的Servlet
1、org.apache.velocity.servlet.VelocityServlet,这是个抽象类默认没有提供ToolBox的支持,相对VelocityViewServlet,此类比较没有太多优势,继承然后实现org.apache.velocity.servlet.VelocityServlet.handleRequest(HttpServletRequest, HttpServletResponse, Context)即可,Request和Response对象都存储在Context中,此类主要不方便的地方在于ServletContext上下文需要自己控制。
2、org.apache.velocity.tools.view.servlet.VelocityViewServlet,此类在velocity-tools包中,支持toolbox功能,通常velocity与Web应用的集成会优先选择它,通过扩展resource.loader可支持模板自动加载。
Velocity#ToolBox
ToolBox是Velocity#Tools功能,支持XML定义工具对象,这些对象服务于模板文件内容,ToolBox类似jsp体系下的JSTL。
ToolBox组件的初始和配置
这里涉及到因为版本迁移的关系有两种实现方式:
1、实现接口方式
1.1、实现org.apache.velocity.tools.view.tools.Configurable接口,用来支持对象实例在接收系统全局配置参数。
1.2、实现org.apache.velocity.tools.view.tools.ViewTool接口,用来支持对象实例初始化时接收ViewContext上下文
2、Velocity改良后使用org.apache.velocity.tools.view.ViewToolInfo类封装了具体ToolBox组件对象创建的生命周期,定义组件对象提供configuration(Map dataMap)和init(Object obj)方法,分别接收系统配置信息、ViewContext上下文信息。
参考资料