之前一直找不到velocity的扩展接口,导致工作一直做不下去。今天看了一个下午+一个晚上的文档,终于找到了突破口(看来我是挺笨的)。就在VelocityTools这一块。
在IBM实习时养成的很好的习惯--看源码--真是受用终身啊。通过不断的对比VelocityTools的文档,javadoc和源码,发现原来在那个toolbox.xml里大有文章。
首先,要指定toolbox.xml的位置,在web.xml里
这是toolbox.xml的一部份:
<key>里就是在VTL里写的$math,这样就算引入一个对象了。
<scope>是生命周期,有关init()方法的调用。
其它两个的作用从字面上和表达就可以猜出来了。
对于扩展的类,与web容器相关的主要是一个public void init(java.lang.Object object)的方法,传入的参数是org.apache.velocity.tools.view.context.ViewContext接口,但需要手动转换。从这个接口,可以得到request, session, response, servletContext等对象,同时根据scope的不同在调用次数上也会有不同。application的只初始化一次,request每次请求都会重新初始化,session就是在session建立时初始化。
看过这些以后,对那些VelocityStruts工具的原理就一目了然咯~~
在IBM实习时养成的很好的习惯--看源码--真是受用终身啊。通过不断的对比VelocityTools的文档,javadoc和源码,发现原来在那个toolbox.xml里大有文章。
首先,要指定toolbox.xml的位置,在web.xml里
<
servlet
>
< servlet-name > velocity </ servlet-name >
< servlet-class > org.apache.velocity.tools.view.servlet.VelocityViewServlet </ servlet-class >
< load-on-startup > 10 </ load-on-startup >
< init-param >
< param-name > org.apache.velocity.toolbox </ param-name >
< param-value > /WEB-INF/toolbox.xml </ param-value >
</ init-param >
</ servlet >
< servlet-mapping >
< servlet-name > velocity </ servlet-name >
< url-pattern > *.vm </ url-pattern >
</ servlet-mapping >
< servlet-name > velocity </ servlet-name >
< servlet-class > org.apache.velocity.tools.view.servlet.VelocityViewServlet </ servlet-class >
< load-on-startup > 10 </ load-on-startup >
< init-param >
< param-name > org.apache.velocity.toolbox </ param-name >
< param-value > /WEB-INF/toolbox.xml </ param-value >
</ init-param >
</ servlet >
< servlet-mapping >
< servlet-name > velocity </ servlet-name >
< url-pattern > *.vm </ url-pattern >
</ servlet-mapping >
这是toolbox.xml的一部份:
<
toolbox
>
< tool >
< key > math </ key >
< scope > application </ scope >
< class > org.apache.velocity.tools.generic.MathTool </ class >
< request-path > /catalog/* </ request-path >
</ tool >
</ toolbox >
< tool >
< key > math </ key >
< scope > application </ scope >
< class > org.apache.velocity.tools.generic.MathTool </ class >
< request-path > /catalog/* </ request-path >
</ tool >
</ toolbox >
<key>里就是在VTL里写的$math,这样就算引入一个对象了。
<scope>是生命周期,有关init()方法的调用。
其它两个的作用从字面上和表达就可以猜出来了。
对于扩展的类,与web容器相关的主要是一个public void init(java.lang.Object object)的方法,传入的参数是org.apache.velocity.tools.view.context.ViewContext接口,但需要手动转换。从这个接口,可以得到request, session, response, servletContext等对象,同时根据scope的不同在调用次数上也会有不同。application的只初始化一次,request每次请求都会重新初始化,session就是在session建立时初始化。
看过这些以后,对那些VelocityStruts工具的原理就一目了然咯~~