Velocity的ContextTool、BrowserSnifferTool、ViewResourceTool工具

一开始,我对Velocity的Context感觉有点迷惑:是不是它的Context一定是VelocityContext呢?到底什么样的Context可以被Velocity Tools访问呢。其实,VelocityContext仅仅是一种Context。

在Velocity的帮助文档中,ViewContext接口给出了关于这种上下文的说明:

public interface ViewContext
Objects implementing this interface are passed to view tools upon initialization by the ServletToolboxManager.

The interface provides view tools in a servlet environment access to relevant context information, like servlet request, servlet context and the velocity context.

实现了ViewContext接口,就可以访问一个Servlet环境中的上下文信息。所以,如果想要获取到一个Servlet的上下文Context,必须启动一个Servlet才能,初始化一个ServletContext。我们通过下面的学习进行说明。

Velocity中的ContextTool、BrowserSnifferTool、ViewResourceTool这个工具都是Velocity View Tools。

org.apache.velocity.tools.view.tools.ContextTool

在toolbox.xml中配置如下:

<tool>
    <key>context</key>
    <scope>request</scope>
    <class>org.apache.velocity.tools.view.tools.ContextTool</class>
</tool>

为了初始化一个ServletContext,新建一个HttpServlet,非常简单,在doPost方法中只使用一个sendRedirect(0方法实现跳转,如下所示:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class MyVelocityServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   response.sendRedirect("templates/context.vm");
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   doGet(request,response);
}

}

一个HttpServlet在被请求的时候就已经初始化了一个ServletContext。然后,在web.xml中映射该MyVelocityServlet 。

现在,就可以使用Velocity Tools,web.xml中配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
<init-param>
    <param-name>org.apache.velocity.properties</param-name>
    <param-value>/WEB-INF/classes/velocity.properties</param-value>
</init-param>                                           
<init-param>
    <param-name>org.apache.velocity.toolbox</param-name>
    <param-value>/WEB-INF/toolbox.xml</param-value>     
   </init-param>                                                
   <load-on-startup>10</load-on-startup>
</servlet>
<servlet>
    <servlet-name>MyVelocityServlet</servlet-name>
    <servlet-class>MyVelocityServlet</servlet-class>
</servlet>


<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>     
</servlet-mapping>
<servlet-mapping>
    <servlet-name>MyVelocityServlet</servlet-name>
    <url-pattern>/MyVelocityServlet</url-pattern>
</servlet-mapping>

</web-app>

只要在应用中有“*.vm”的请求,则使用Velocity视图。现在,在templates目录下面存在Velocity模板文件.context.vm,启动Tomcat Web Server,直接在浏览器地址栏中键入http://localhost:8080/VelocityTools/MyVelocityServlet,请求我们实现的HttpServlet,初始化ServletContext。

常用的ContextTool中的方法如下所示:

函数举例显示结果
$contextorg.apache.velocity.tools.view.tools.ContextTool@1fe28a7
$context.keys[sorter, date, math, text, context, browser, mill, number, esc, lists]
$context.toolbox{text=org.apache.velocity.tools.view.tools.ViewResourceTool@165d118, context=org.apache.velocity.tools.view.tools.ContextTool@1fe28a7, browser=org.apache.velocity.tools.view.tools.BrowserSnifferTool@18297fe, sorter=org.apache.velocity.tools.generic.SortTool@1b08cf3, date=2008-04-24, math=org.apache.velocity.tools.generic.MathTool@dbf79d, mill=org.apache.velocity.tools.generic.IteratorTool, number=org.apache.velocity.tools.generic.NumberTool@15d7752, esc=org.apache.velocity.tools.generic.EscapeTool@144dc7b, lists=org.apache.velocity.tools.generic.ListTool@1e73e0d}
$context.values[org.apache.velocity.tools.generic.MathTool@dbf79d, org.apache.velocity.tools.view.tools.ViewResourceTool@165d118, org.apache.velocity.tools.generic.EscapeTool@144dc7b, org.apache.velocity.tools.generic.IteratorTool, org.apache.velocity.tools.view.tools.ContextTool@1fe28a7, org.apache.velocity.tools.generic.NumberTool@15d7752, org.apache.velocity.tools.generic.SortTool@1b08cf3, org.apache.velocity.tools.view.tools.BrowserSnifferTool@18297fe, org.apache.velocity.tools.generic.ListTool@1e73e0d, 2008-04-24]
#foreach( $key in $context.keys )      $key = $context.get($key)
#end
sorter = org.apache.velocity.tools.generic.SortTool@1b08cf3
date = 2008-04-24
math = org.apache.velocity.tools.generic.MathTool@dbf79d
text = org.apache.velocity.tools.view.tools.ViewResourceTool@165d118
context = org.apache.velocity.tools.view.tools.ContextTool@1fe28a7
browser = org.apache.velocity.tools.view.tools.BrowserSnifferTool@18297fe
mill = org.apache.velocity.tools.generic.IteratorTool
number = org.apache.velocity.tools.generic.NumberTool@15d7752
esc = org.apache.velocity.tools.generic.EscapeTool@144dc7b
lists = org.apache.velocity.tools.generic.ListTool@1e73e0d

从测试结果可以看出,获取到了非常详细的ServletContext上下文。

org.apache.velocity.tools.view.tools.BrowserSnifferTool

在toolbox.xml中配置如下:

<tool>
    <key>browser</key>
    <scope>request</scope>
    <class>org.apache.velocity.tools.view.tools.BrowserSnifferTool</class>
</tool>
<tool>

这个Velocity工具也需要一个Context上下文,就上面的那个ServletContext为基础。

BrowserSnifferTool提供了关于User Agent的详细信息,包括浏览器的详细特性,尤其是对各种不同浏览器的不同版本都做了详细的描述,以及支持的操作系统等等。

BrowserSnifferTool提供的大部分都是通过一个布尔型变量值来判断。

测试结果可以看到:

函数举例显示结果
$browserorg.apache.velocity.tools.view.tools.BrowserSnifferTool@a5ba31
$browser.Version7.0;
$browser.MajorVersion7
$browser.MinorVersion0
/$browser.GeckoVersion$browser.GeckoVersion
$browser.GeckoMajorVersion-1
$browser.GeckoMinorVersion-1
$browser.Geckofalse
$browser.Firefoxfalse
$browser.Safarifalse
$browser.Netscapefalse
$browser.Nav2false
$browser.Nav3false
$browser.Nav4false
$browser.Nav4upfalse
$browser.Nav45false
$browser.Nav45upfalse
$browser.Navgoldfalse
$browser.Nav6false
$browser.Nav6upfalse
$browser.Mozillafalse
$browser.Ietrue
$browser.Ie3false
$browser.Ie4false
$browser.Ie4uptrue
$browser.Ie5false
$browser.Ie5uptrue
$browser.Ie55false
$browser.Ie55uptrue
$browser.Ie6false
$browser.Ie6uptrue
$browser.Neoplanetfalse
$browser.Neoplanet2false
$browser.Aolfalse
$browser.Aol3false
$browser.Aol4false
$browser.Aol5false
$browser.Aol6false
$browser.AolTVfalse
$browser.Operafalse
$browser.Opera3false
$browser.Opera4false
$browser.Opera5false
$browser.Opera6false
$browser.Opera7false
$browser.Hotjavafalse
$browser.Hotjava3false
$browser.Hotjava3upfalse
$browser.Amayafalse
$browser.Curlfalse
$browser.Starofficefalse
$browser.Icabfalse
$browser.Lotusnotesfalse
$browser.Konquerorfalse
$browser.Lynxfalse
$browser.Linksfalse
$browser.WebTVfalse
$browser.Mosaicfalse
$browser.Wgetfalse
$browser.Getrightfalse
$browser.Lwpfalse
$browser.Yahoofalse
$browser.Googlefalse
$browser.Javafalse
$browser.Altavistafalse
$browser.Scooterfalse
$browser.Lycosfalse
$browser.Infoseekfalse
$browser.Webcrawlerfalse
$browser.Linkexchangefalse
$browser.Slurpfalse
$browser.Robotfalse
$browser.Blackberryfalse
$browser.Audreyfalse
$browser.Iopenerfalse
$browser.Avantgofalse
$browser.Wapfalse
$browser.Win16false
$browser.Win3xfalse
$browser.Win31false
$browser.Win95false
$browser.Win98false
$browser.Winnttrue
$browser.Win2kfalse
$browser.Winxpfalse
$browser.Dotnettrue
$browser.Winmefalse
$browser.Win32true
$browser.Windowstrue
$browser.Macfalse
$browser.Macosxfalse
$browser.Mac68kfalse
$browser.Macppcfalse
$browser.Amigafalse
$browser.Emacsfalse
$browser.Os2false
$browser.Sunfalse
$browser.Sun4false
$browser.Sun5false
$browser.Suni86false
$browser.Irixfalse
$browser.Irix5false
$browser.Irix6false
$browser.Hpuxfalse
$browser.Hpux9false
$browser.Hpux10false
$browser.Aixfalse
$browser.Aix1false
$browser.Aix2false
$browser.Aix3false
$browser.Aix4false
$browser.Linuxfalse
$browser.Scofalse
$browser.Unixwarefalse
$browser.Mprasfalse
$browser.Reliantfalse
$browser.Decfalse
$browser.Sinixfalse
$browser.Freebsdfalse
$browser.Bsdfalse
$browser.X11false
$browser.VMSfalse
$browser.Unixfalse
$browser.Csstrue
$browser.Css1true
$browser.Css2true
$browser.Dom0true
$browser.Dom1true
$browser.Dom2true
$browser.Javascripttrue

 

org.apache.velocity.tools.view.tools.ViewResourceTool

在toolbox.xml中配置如下:

<tool>
    <key>text</key>
    <scope>request</scope>
    <class>org.apache.velocity.tools.view.tools.ViewResourceTool</class>
    <parameter name="bundles" value="resources,myresources"/>
</tool>

其中,resources是默认的,位于目录/WEB-INF/classes之下,myresources是我们自己定制的。

假设resources.properties的内容如下所示:

shirdrn.url = http://hi.baidu.com/shirdrn
shirdrn.email.hotmail = shirdrn@hotmail.com
shirdrn.parameters = There are parameters {0} and {1}!

myresources.properties的内容如下所示:

soloor.url = http://hi.baidu.com/soloor
soloor.email.www163com = shirdrn@163.com

使用默认的resources.properties时,可以直接使用Velocity的org.apache.velocity.tools.view.tools.ViewResourceTool工具来读取,例如:

$text.shirdrn.url

但是,如果使用其它的,则需要使用#set命令指定并加载,如下所示:

#set( $mytext = $text.bundle('myresources') )
      $mytext.soloor.url

这样就可以读取到myresources.properties资源文件中的soloor.url。

测试结果如下所示:

函数举例显示结果
$text.shirdrn.urlhttp://hi.baidu.com/shirdrn
$text.shirdrn.email.hotmailshirdrn@hotmail.com
$text.shirdrn.parametersThere are parameters {0} and {1}!
$text.shirdrn.parameters.insert(2)
$text.shirdrn.parameters
There are parameters 2 and {1}!
There are parameters {0} and {1}!
$text.shirdrn.parameters.insert(3,false)
$text.shirdrn.parameters
There are parameters 3 and false!
There are parameters {0} and {1}!
#set( $mytext = $text.bundle('myresources') )
$mytext.soloor.url
$mytext.soloor.www163com
http://hi.baidu.com/soloor
shirdrn@163.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值