C-Velocity(模板引擎) --- B版(官方API--工具类) --- 2021年6月2日 22:57:04

非框架类总纲

https://www.jianshu.com/p/d0167f082cbf

友情链接:Velocity-前传

https://www.jianshu.com/p/b977f3f4e3d6

官方文档

http://velocity.apache.org/tools/3.1/apidocs/index.html

一、velocity tools 介绍

Velocity Tools 是 Velocity模板引擎的一个子项目,用于将 Velocity 与 Web开发环境集成的工具包。

VelocityTools项目分为两个部分:GenericToolsVelocityView .

  • GenericTools : GenericTools是一组类,它们提供在标准Velocity项目中使用工具的基本基础结构,以及在通用Velocity模板中使用的一组工具。例如 : DateTool、NumberTool和RenderTool很多其他可用的工具
  • Velocity view : 包括所有的通用工具结构和在web应用程序的视图层中使用Velocity的专用工具。这包括用于处理Velocity模板请求的VelocityViewServletVelocityLayoutServlet、用于在JSP中嵌入Velocity的VelocityViewTag和用于在Velocity模板中嵌入JSP标记库的Maven插件。这里流行的工具是LinkTool和ParameterTool。

二、GenericTools使用

1、GenericTools介绍

GenericTools : GenericTools是一组类,它们提供在标准Velocity项目中使用工具的基本基础结构,以及在通用Velocity模板中使用的一组工具。
简单来说, GenericTools就是Velocity官方提供的一组可以在模板中使用的工具类库

2、GenericTools环境搭建

2-1、创建项目

2-2、导入依赖


    
        org.apache.velocity
        velocity-engine-core
        2.2
    
    
        org.apache.velocity.tools
        velocity-tools-generic
        3.0
    
    
        junit
        junit
        4.12
        test
    



    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.8.1
            
                8
                8
                utf-8
            
        
    

2-3、创建模板




    
    Title


当前时间 : $date.get('yyyy-MM-dd HH:mm:ss')


2-4、编写配置

image.png



    
        
    

2-5、输出数据

public void test2() throws IOException {
        // 创建引擎
        VelocityEngine ve = new VelocityEngine();
        // 设置模板加载路径,这里设置的是class下
        ve.setProperty(Velocity.RESOURCE_LOADER, "class");
        ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        // 进行初始化操作
        ve.init();

        // 加载toolbox
        ToolManager manager = new ToolManager();
        manager.configure("configuration.xml");

        // 加载模板,设定模板编码
        Template tpl = ve.getTemplate("vms/01-velocitytools.vm", "UTF-8");

        // 设置初始化数据
        Context context = manager.createContext();
        context.put("now", new Date ());

        FileWriter fw  = new FileWriter("D:\\work\\demo1.html");
        //合并数据到模板
        tpl.merge(context, fw);
        //释放资源
        fw.close();
    }

3、工具类及案例

格式化工具类的主要作用就是对数据进行格式化之后输出 , 例如 : 日期格式化 , 数字格式化等 , GenericTools提供的工具类有很多 , 随着时间的推移很多工具类已经过期, 有更好更安全的替代方案, 这里我们仅仅介绍一些常用工具类

1、DateTool

用于访问和格式化日期以及格式化Date和Calendar对象。该工具还可以用于在各种日期类型之间进行转换。

模板:




    
    Title


年 : $date.getYear()
月: $date.getMonth()
日: $date.getDay()

当前时间 : $date.format($now)
当前时间 : $date.format("yyyy-MM-dd HH:mm:ss",$now)
当前时间 : $date.get('yyyy-MM-dd HH:mm:ss')


配置:


    

2、NumberTool

用于访问和格式化任意数值类型对象。该工具还可以用于检索NumberFormat实例或与各种数字类型进行相互转换。

模板:




    
    Title


原始数据 : $myNumber          12.88
格式化 : $number.format($myNumber)  12.88
取整 : $number.integer($myNumber)      13


配置:


    

3、MathTool、

用于在Velocity中执行数学运算。

模板:




    
    Title



num1+num2 : $math.add($num1,$num2);
num1-num2 : $math.sub($num1,$num2);
num1*num2 : $math.mul($num1,$num2);
num1/num2 : $math.div($num1,$num2);
向上取整 : $math.ceil($math.div($num1,$num2))
向下取整 : $math.floor($math.div($num1,$num2))
四舍五入 : $math.roundTo(2,$math.div($num1,$num2))  ## 第一个参数保留的位数 , 第二个参数运算的值



x

配置:


    

4、DisplayTool

用于控制数据显示和隐藏 , 以及数据格式的处理

模板:




    
    Title



## list方法用于展示数据或集合中的数据 , 默认的展示格式为 A, B and C
默认输出格式 : $display.list($list)
使用,分割输出 : $display.list($list,",")

## truncate方法用于字符串截取 , 默认截取30个长度
字符串截取, 默认30个长度 : $display.truncate("truncate方法用于字符串截取默认截取30个长度")
字符串截取, 给定20个长度 : $display.truncate("truncate方法用于字符串截取默认截取30个长度",20)
字符串截取, 给定20个长度 : $display.truncate("truncate方法用于字符串截取默认截取30个长度",20,"")

## alt方法用于判断给定的数据是否为空 , 如果为空展示第二个参数 , 如果不为空展示数据本身
不为空:$display.alt($num1,"num1不为空")
为空:$display.alt($num3,"num3为空")



配置:


    

5、EscapeTool

用于对一些特殊字符进转义处理 , 例如 $ , #, & 等...

模板:




    
    Title



    $velocity    -------转换 -------
    $esc.velocity($velocity)

    $html     -------转换  -------
    $esc.html($html)

    $url      -------转换 -------
    $esc.url($url)
    $esc.unurl($esc.url($url))

    $esc.dollar     ## $
    $esc.d          ## $

    $esc.hash       ## #
    $esc.h          ## #

    $esc.backslash  ## \
    $esc.b          ## \

    $esc.quote      ## "
    $esc.q          ## "

    $esc.singleQuote    ## '
    $esc.s              ## '

    $esc.exclamation    ## !
    $esc.e              ## !



配置:


    

6、FieldTool

用于访问类中定义public修饰的静态常量

6.1、定义MyConstants常量类

public class MyConstants {

    public static  String COUNTER_NAME = "COUNTER";
}

6.2、定义Counter常量类

public class Counter {
   public static Integer MAX_VALUE = 100 ;
   public static Integer MIN_VALUE = 100 ;
}

模板:




    
    Title



## 访问在配置中定义的静态常量
获取MyConstants中的常量 : $field.COUNTER_NAME

## 通过一个类中的常量
获取Counter类中的量 : $field.in("com.kk.counter.Counter").MAX_VALUE

## 传入一个对象的实例 , 通过对象的实例获取其类中定义的常量
获取日历对象中的YEAR常量 : $field.in($calender).YEAR

## 默认情况下, 当我们查找了一个类的常量之后, 这个类回保存在FieldTool工具中, 可以直接获取下一个常量
获取日历对象中的DATE常量 : $field.DATE  ## 因为之前已经获取过 , 所以可以直接获取



配置:


    

include属性可以引入一些类, 引入之后想要获取其中的常量, 直接使用 $field.常量字段名称即可 ! 引入多个类以,分割

7、ClassTool

ClassTool用于访问一个类的Class对象信息以及其Filed , Method , Constructor等信息 , 它的设计没有考虑到代码的反射执行,因此无法通过反射执行代码。

模板:




    
    Title



## 获取要查看的类上的所有注解 , 只有运行时期的注解才能够获取到
注解 : $class.getAnnotations()
构造方法 :
#foreach($constructor in $class.getConstructors())
    $constructor
#end
属性 :
#foreach($f in $class.getFields())
    $f
#end
方法 :
#foreach($m in $class.getMethods())
    $m
#end
包名 : $class.getPackage()
类名 : $class.getName()

## 也可以不通过配置文件 , 自己指定一个要查找的类
包名 : $class.inspect("java.lang.String").getPackage()
类名 : $class.inspect("java.lang.String").getName()
构造方法 :
#foreach($constructor in $class.inspect("java.lang.String").getConstructors())
    $constructor
#end


配置:


    

inspect : 指定一个需要查找的类

8、ContextTool

用于获取Context中保存的数据和元数据

模板:




    
    Title



context中的所有key :
#foreach( $key in $context.keys )
    $key
#end

context中的所有value : #foreach( $value in $context.values ) $value #end
context中的所有key-value : #foreach( $key in $context.keys ) $key = $context.get($key) #end

配置:


    

需要注意的是在application作用范围中没有ContextTool , 所以scope需要指定为request

9、RenderTool

Render用于将给定的字符串当作VTL秩序

模板:




    
    Title


#set($list = [1,2,3] )
#set($object = '$list' )
#set($method = 'size()' )
## 将字符串当作VTL秩序
$render.eval("${object}.$method")


## 使用当前上下文递归地评估包含VTL的字符串,并将结果作为字符串返回。
#macro(say_hi)
    hello world!
#end

#set($foo = "#say_hi()")
#set($bar = "$foo" )
$render.recurse($bar)



配置:


    

使用recurse递归时 ,RenderTool 默认将递归限制为20个周期,以防止无限循环

10、SortTool

SortTool用于对集合和数组数据进行排序 , 在排序操作期间,通过调用compareTo() 来进行比较,但要调用compareToIgnoreCase()的字符串除外。将集合数据转化为合适的类型后 , 通过调用Collections.sort()来执行排序

模板:




    
    Title



简单类型排序 :
#set($strList = $sorter.sort($strs))
#foreach($str in $strList)
    $str
#end

对象类型排序 - 单个字段 :
#set($users = $sorter.sort($userList,"age:asc"))
#foreach($user in $users)
    $user.name : $user.age  :  $user.sex
#end

对象类型排序 - 多字段 :
#set($users = $sorter.sort($userList,["sex:desc","age:asc"]))
#foreach($user in $users)
    $user.name : $user.age  :  $user.sex
#end


配置:


    

SortTool已经被标注为过期, 建议使用下面CollectionTool的排序方法

11、CollectionTool

CollectionTool允许用户对集合中包含的对象公开的任意任意属性集对集合(或数组,迭代器等)进行排序,并通过拆分字符串来生成数组。

模板:




    
    Title



简单类型排序 :
#set($strList = $collection.sort($strs))
#foreach($str in $strList)
    $str
#end

对象类型排序 - 单个字段 :
#set($users = $collection.sort($userList,"age:asc"))
#foreach($user in $users)
    $user.name : $user.age  :  $user.sex
#end

对象类型排序 - 多字段 :
#set($users = $collection.sort($userList,["sex:desc","age:asc"]))
#foreach($user in $users)
    $user.name : $user.age  :  $user.sex
#end

拆分字符串 :
#set($str="hello word , how are you !")
#foreach($s in $collection.split($str))
    $s
#end




配置:



stringsDelimiter : 指定进行字符串分割时的分割符 , 默认是,

12、XmlTool

XmlTool用于读取和浏览XML文件。它底层使用dom4j为遍历XML文件提供完整的XPath支持。

xml文件:



     喜欢看书 
     喜欢睡觉 
     喜欢玩游戏 
     喜欢喝酒 

模板:




    
    Title



$xml.find("//user[@id='1']")
$xml.find("//user[@id='1']").attr("name")
$xml.find("//user[@id='1']").text




配置:


    

resource : 加载类路径下的XML资源
source : 加载一个URL路径下的XML资源

三、Velocity View

1、Velocity View j介绍

VelocityView包含所有GenericTools并添加了用于在Web应用程序(Java EE项目)的视图层中使用Velocity的基础结构和专用工具。这包括用于处理Velocity模板请求的VelocityViewServletVelocityLayoutServlet,以及用于将Velocity嵌入JSP中的VelocityViewTag

2、环境搭建

2-1、导入依赖(插件:锁定 JDK版本,Tomcat版本)


        
            org.apache.velocity
            velocity-engine-core
            2.2
        
        
            org.apache.velocity.tools
            velocity-tools-generic
            3.0
        
        
            org.apache.velocity.tools
            velocity-tools-view
            3.0
        
        
            junit
            junit
            4.12
            test
        
        
            org.apache.tomcat
            tomcat-api
            9.0.10
            provided
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    11
                    11
                    utf-8
                
            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
                
                    /
                    8080
                    utf-8
                
            
        
    

2-2、配置Servlet

在web.xml中配置整合VelocityViewServlet




    
        velocity
        org.apache.velocity.tools.view.VelocityViewServlet
        
            org.apache.velocity.toolbox
            /WEB-INF/tools.xml
        
    

    
        velocity
        *.vm
    

该配置表示拦截所有的vm结尾的请求 , vm就是velocity模板文件的扩展名

2-3、引入配置文件
在web.xml中可以引入的配置文件有两个 :

  • tools.xml : 配置页面使用的一些工具
  • velocity.properties : 配置一些日志, 编码, 宏等一些配置

如果要引入配置文件, 官方建议将配置文件放置在web项目的/WEB-INF目录下

2-3-1配置文件一:tools.xml



    
        
        
        
        
        
        
        
        
        
        
    

    
        
        
    

2-3-2配置文件二:tools.xml
官网截取,具体看官网(写法改成properties即可):http://velocity.apache.org/engine/devel/configuration.html#configuration-summary-tree

context. +-- scope_control. +-- define = false
         |                  +-- evaluate = false
         |                  +-- foreach = true
         |                  +-- macro = false
         |                  +-- template = false
         |                  +-- *somebodymacro* = false
         +-- self_reference_key = *key_name*

directive. +-- define.max_depth = 2
           +-- foreach. +-- max_loops = -1
           |            +-- skip_invalid = true
           +-- if.empty_check = true
           +-- parse.max_depth = 10

event_handler. +-- include.class = *classname*, *classname* ...
               +-- invalid_reference. +-- class = *classname*, *classname* ...
                                      +-- exception = false
                                      +-- null = false
                                      +-- quiet = false
                                      +-- tested = false
               +-- method_exception.class = *classname*, *classname* ...
               +-- reference_insertion.class = *classname*, *classname* ...

introspector. +-- conversion_handler. +-- class = org.apache.velocity.util.introspection.TypeConversionHandlerImpl
              |                       +-- instance = *Java Object instance*
              +-- uberspect.class = org.apache.velocity.util.introspection.UberspectImpl

parser. +-- allow_hyphen_in_identifiers = false
        +-- pool. +-- class = org.apache.velocity.runtime.ParserPoolImpl
        |         +-- size = 20
        +-- space_gobbling = lines

resource. +-- default_encoding = UTF-8
          +-- loaders = file, ...
          +-- loader.*loader_name*. +-- class = *classname*
          |                         +-- instance = *Java Object instance*
          |                         +-- cache = false
          |                         +-- modification_check_interval = 2
          |                         +-- *loader_prop* = ...
          +-- manager. +-- cache. +-- class = org.apache.velocity.runtime.resource.ResourceCacheImpl
                       |          +-- default_size = 89
                       +-- class = org.apache.velocity.runtime.resource.ResourceManagerImpl
                       +-- instance = null
                       +-- log_when_found = true

runtime. +-- custom_directives = *classname*, *classname* ...
         +-- interpolate_string_literals = true
         +-- log. +-- instance = *Java Object instance*
         |        +-- log_invalid_method_calls = true
         |        +-- log_invalid_references = true
         |        +-- name = org.apache.velocity
         |        +-- track_location = false
         +-- strict_math = false
         +-- strict_mode. +-- enable = false
         |                +-- escape = false
         +--string_interning = true

velocimacro. +-- arguments.strict = false
             +-- body_reference = false
             +-- enable_bc_mode = false
             +-- inline. +-- allow = true
             |           +-- local_scope = false
             |           +-- replace_global = false
             +-- library. +-- autoreload = false
                          +-- path = velocimacros.vtl

3、案例:使用 Velocity View

当我们配置好了之后使用VelocityView非常简单 , 只需要将数据保存在web项目的中 , 在velocity模板中就可以直接获取数据展示了

3-1、展示基础数据

3-1-1、编写模板:在web项目下创建user-info.vm模板文件




    
    Title


欢迎您: $name


3-1-2、创建Servlet

public class UserInfoServlet extends HttpServlet {

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

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //在request域保存数据
        request.setAttribute("name",request.getParameter("name"));
        //设置响应数据格式以及字符集
        response.setContentType("text/html;charset=utf-8");
        request.getRequestDispatcher("/vms/user-info.vm").forward(request,response);
    }
}

3-1-3、配置Servlet


    UserInfoServlet
    com.kk.servlet.UserInfoServlet


    UserInfoServlet
    /user/info

3-2、展示列表数据

3-2-1、编写模板:在项目下创建user-list.vm用于展示列表数据




    
    Title




    #foreach($user in $userList)
        
    #end

编号 姓名 性别 年龄 操作
$foreach.index $user.name $user.sex $user.age 编辑 删除

3-2-2、创建Servlet

public class UserListServlet extends HttpServlet {

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

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List userList = new ArrayList();
        userList.add(new User("吕布",38,"man"));
        userList.add(new User("貂蝉",16,"woman"));
        userList.add(new User("刘备",28,"man"));
        userList.add(new User("关羽",25,"man"));
        userList.add(new User("张飞",20,"man"));
        userList.add(new User("甄宓",21,"woman"));

        request.setAttribute("userList",userList);

        response.setContentType("text/html;charset=utf-8");
        request.getRequestDispatcher("/vms/user-list.vm").forward(request,response);
    }
}

3-2-3、配置Servlet


    UserListServlet
    com.kk.servlet.UserListServlet


    UserListServlet
    /user/list

3-3、使用Tools工具
因为我们在配置VelocityViewServlet的时候已经加载了tools.xml配置文件 , 所以直接在模板文件中使用工具即可
例如 : 列表页面我们展示编号使用的是$foreach.index , 是从0开始的, 现在想让编号从1开始 , 可以使用MathTool , 在index的基础上+1




    
    Title



    #foreach($user in $userList)
        
    #end
编号 姓名
$math.add($foreach.index,1) $user.name

4、工具类及案例

4-1、CookieTool:用于获取和创建Cookie
模板:


$cookie.username ## 获取指定名称的cookie值
$cookie.add("phone",'18917009089')  ## 创建并设置cookie

配置:


    

4-2、BrowserTool:用于获取客户端浏览器,操作系统,设备,语言等信息。

模板:


设备信息 :   $browser.device 
用户客户端 : $browser.userAgentString
渲染引擎 : $browser.renderingEngine.name
操作系统 : $browser.operatingSystem.name
IP地址 : $browser.iPAddress

配置:


    

可以定义在在requestsession范围 , 建议在session范围使用

servlet:

public class BrowserToolServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        request.getRequestDispatcher("/vms/tool-browser.vm").forward(request,response);
    }
}

    BrowserToolServlet
    com.kk.servlet.BrowserToolServlet


    BrowserToolServlet
    /user/browser

4-3、ParameterTool:用户获取请求中的参数

模板:



## 获取所有的请求参数
#set($parameters = $params.all)
#foreach($entry in $parameters.entrySet())
    $entry.key : $entry.value  
#end
## 获取一个key对应一个值的参数 name : $params.getString("username")
## 获取一个key对应多个值得参数 hobby : $params.getStrings("hobby")

配置:


    

4-4、ViewContextTool
ViewContextTool是GenericTools中ContextTool的扩展 , 可以Velocity容器中的所有数据 , 包括HttpServletRequest, HttpSession and ServletContext中的数据

模板:


## 获取velocity容器中的所有数据
#foreach( $key in $context.keys )
    $key = $context.get($key)   
#end

配置:


   
    

四、自定义tools工具类

VelocityTools中定义了很多Tools供我们使用 , 如果官方提供的还不能满足我们的需求, 我们也可以自己定义工具类 , 自定义工具类有一些要求 , 如下 :

  1. 工具类必须声明为public
  2. 工具类中必须提供公共的无参构造方法

下面我们可以定义一个字符串的Tools类, 帮助我们对字符串进行特殊的处理 , 主要有二个功能

  1. 判断字符串是否为Null或者""
  2. 随机生成一个指定位数的数字字符串

1、编写工具类

package com.kk.tools;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.velocity.tools.config.DefaultKey;
import org.apache.velocity.tools.config.InvalidScope;
import org.apache.velocity.tools.config.ValidScope;

@DefaultKey("strings")
@ValidScope({"application","request","session"})
public class StringsTools {

    /**
     * 判断字符串是否为空
     * @param str
     * @return
     */
    public boolean isEmpty(String str){
        if(str==null || "".equals(str)){
            return true ;
        }
        return false ;
    }

    /**
     * 生成一个指定位数的随机字符串
     * @param count
     * @return
     */
    public String randomNumeric(int count){
        return RandomStringUtils.randomNumeric(count) ;
    }
}

@DefaultKey : 用于指定默认的key
@ValidScope : 用于指定可用的作用范围

2、配置工具类


    

3、使用工具类




    
    Title


判断字符串是否为空   :   $strings.isEmpty("") 
随机生成数字字符串 : $strings.randomNumeric(6);

4、编写Serlvet

public class StringsToolServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        request.getRequestDispatcher("/vms/tool-strings.vm").forward(request,response);
    }
}

其实直接访问就可以, 但是我们模板中有中文, 需要在serlvet中设置响应数据的字符集 , 否则会有乱码

五、★springmvc整合velocity(页面静态化)

我们之前已经在Servlet中使用velocity作为我们的视图展示数据 , 但是在开发过程中我们一般会使用框架来进行web开发, 提高我们的开发效率 , 所以下面我们来说一说在SpringMVC框架中如何使用Velocity作为视图展示数据

1、步骤分析

在SpringMVC中使用Velocity非常简单 , 主要有以下步骤

  1. 搭建springmvc开发环境
  2. 引入velocity依赖
  3. 配置Velocity开发环境
  4. 编写Velocity模板
  5. 编写springmvc控制器

2、具体步骤

2-1、搭建springmvc开发环境

2-1-1、添加依赖


    
        org.springframework
        spring-context
        5.2.5.RELEASE
    
    
        org.springframework
        spring-web
        5.2.5.RELEASE
    
    
        org.springframework
        spring-webmvc
        5.2.5.RELEASE
    

    
        junit
        junit
        4.12
        test
    

    
        org.apache.tomcat
        tomcat-api
        7.0.37
        provided
    



    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.8.1
            
                8
                8
                utf-8
            
        
        
            org.apache.tomcat.maven
            tomcat7-maven-plugin
            2.2
            
                /
                8080
                utf-8
            
        
    

2-1-2、配置web.xml配置


    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        UTF-8
    
    
        forceRequestEncoding
        true
    
    
        forceResponseEncoding
        true
    


    characterEncodingFilter
    /*




    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
        contextConfigLocation
        classpath:springmvc.xml
    

    1


    dispatcherServlet
    /

2-1-3、配置springmvc.xml




    
    

    
    

2-2、SpringMVC整合Velocity

2-2-1、添加依赖


    org.apache.velocity
    velocity-engine-core
    2.2


    org.apache.velocity.tools
    velocity-tools-generic
    3.0


    org.apache.velocity.tools
    velocity-tools-view
    3.0

2-2-2、引入Tools配置文件:在/WEB-INF/下创建并编写tools.xml配置文件



    
        
        
        
    

这个需要根据项目中使用的工具自己配置, 目前入门案例我们简单配置几个即可

2-2-3、配置web.xml配置:在web.xml中配置VelocityViewServlet


    velocity
    org.apache.velocity.tools.view.VelocityViewServlet
    
        org.apache.velocity.toolbox
        /WEB-INF/tools.xml
    



    velocity
    *.vm

2-2-4、配置视图解析器:因为我们现在使用velocity充当SpringMVC的视图解析器 , 所以需要配置视图解析器, 指定视图模板文件的位置及扩展名


    
    

2-3、编写Velocity模板:在/vms/目录下创建user-list.vm模板文件 , 用于展示列表数据



    
    Title





    #foreach($user in $userList)
        
    #end

编号 姓名
$math.add($foreach.index,1) $user.name
2-4、创建实体类
public class User {

    private String name ;
    private Integer age ;
    private String sex ;
}
2-5、编写springmvc控制器
@Controller
@RequestMapping(path = "/user")
public class UserController {

    @RequestMapping(path = "/list")
    public String list(Model model){
        List userList = new ArrayList();
        userList.add(new User("吕布",38,"man"));
        userList.add(new User("貂蝉",16,"woman"));
        userList.add(new User("刘备",28,"man"));

        model.addAttribute("userList",userList);
        return "user-list";
    }
}

因为我们配置了SpringMVC的视图解析器 , 所以控制方法返回视图名称字符串即可, 视图解析器会自动拼接完整视图路径 , 展示数据

2-6、访问测试:http://localhost:8080/user/list

六、综合案例

SSM+Velocity来实现用户数据增删改查

你可能感兴趣的:(C-Velocity(模板引擎) --- B版(官方API--工具类) --- 2021年6月2日 22:57:04)