toolbox.xml工具箱和自定义小工具

velocity-tools包提供了很多实用的工具类,不过在JavaWeb工程中使用这些小工具前需要在web.xml中配置toolbox.xml文件,我们可以在VelocityViewServlet后加入org.apache.velocity.toolbox参数。

<init-param>
   <param-name>org.apache.velocity.toolbox</param-name>
   <param-value>/WEB-INF/toolbox.xml</param-value>
</init-param>

这个参数指定了toolbox.xml的位置,通常我们可以把该配置文件放在WEB-INF下,toolbox可以灵活配置一些预先提供的工具类,下面是一个例子。

toolbox.xml

<?xml version="1.0" encoding="UTF-8"?>
<toolbox>
   <tool>
      <key>date</key>
      <scope>request</scope>
      <class>org.apache.velocity.tools.generic.DateTool</class>
      <parameter name="format" value="yyyy-MM-dd HH:mm:ss"/>
   </tool>
</toolbox>

这里我们配置了一个日期工具,从配置的参数就可以看出,这个小工具可以用来执行日期相关的操作。下面是一个例子,我们在test.vm中加入如下变量。

<!DOCTYPE html>
<html lang="zh">
<head>
   <meta charset="UTF-8">
   <title>Test Velocity</title>
</head>
<body>
   $date
</body>
</html>

输出结果如下图所示。

更多关于velocity-tools的信息可以参看Apache的官方文档http://velocity.apache.org/tools/2.0/index.html,官网列出了GenericToolsVelocityViews等分类,点击可以查看具体的文档,文档详述了toolbox.xml配置和在.vm模板中的具体用法。由于这些预定义的小工具局限性比较大,这里就不再赘述。

自定义小工具

我们也可以自定义velocity工具类,相比于预先提供的工具类,可能对于我们手头的项目来说,自定义的工具类更加灵活,下面例子中我们自定义了一个小工具。

首先定义一个普通Java类作为我们的工具类。

com.gacfox.web.tools.DemoUtils

package com.gacfox.web.tools;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class DemoUtils {

    public String getInfo() throws Exception {
        Runtime runtime = Runtime.getRuntime();
        Process p = runtime.exec("uname -a");
        InputStream inputStream = p.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        StringBuffer stringBuffer = new StringBuffer();
        while ((line = bufferedReader.readLine()) != null) {
            stringBuffer.append(line);
        }
        bufferedReader.close();
        inputStream.close();

        return stringBuffer.toString();
    }
}

这个有趣的小工具类返回了一条系统信息字符串(笔者使用的是Linux操作系统,uname -a是一个查看操作系统内核和CPU架构的命令)。

接下来在toolbox.xml中配置该工具。

<tool>
   <key>myutil</key>
   <scope>application</scope>
   <class>com.gacfox.web.tools.DemoUtils</class>
</tool>

这样我们就能直接在vm模板中引用该小工具了。

<!DOCTYPE html>
<html lang="zh">
<head>
   <meta charset="UTF-8">
   <title>Test Velocity</title>
</head>
<body>
   $myutil.info
</body>
</html>

这里注意调用方式,$myutil.info有两种含义,一种是指myutil的可访问字段info,而这里是指myutil的可访问方法getInfo()。执行结果如下图所示。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap