ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Velocity

2022-01-22 14:35:16  阅读:174  来源: 互联网

标签:set name ## new Velocity foo 模板


velocity

velocity是什么?

它是一个模板引擎,用模板语言(template language)来引用由java代码定义的对象

引擎

  • Velocity Engine
  • Velocity Tools

语法

  • #关键字 、$ 变量、{}变量、! 变量

    • 声明定义
    #set($root = "www")  ## 字符串变量
    #set($name = "index")  ## 设置name的变量为"index"
    #set($template = "$root/$name") ## 设置template
    $template ## 输出结果 www/index
    
    • 变量赋值
    #set($name = $bill)   ## 变量引用  
    #set($name.pre = "monica")  ## 字符串  
    #set($name.last = $address.num) ## 属性引用
    #set($name.mid = $hotel.find($web)) ## 方法引用  
    #set($name.num = 123) ##数字  
    #set($name.say = ["yes",$my,"yes"]) ## 数组 
    
    • velocity会将属性解释为属性的get方法, 比如
    $foo.Bar   ## 等同于 $foo.getBar()
    $foo.User("join")  ## 等同于 $foo.getUser("join")
    $foo.Request.ServerName ## 等同于$foo.getRequest().getServerName()
    

转义字符\

#set($mail = "foo")  
$mail    ## 输出foo
\$mail   ## 输出$mail
\\$mail  ## 输出 \foo   (第一个\转义第二个\)
\\\$mail ## 输出 \$mail  (第一个\转义第二个\第三个\转义$mail)

循环

#foreach( $num in [2..-2])  
    this is $num</br>
#end
#*
this is 2 
this is 1
this is 0
this is -1
this is -2
*#

条件

#if(condition)  ## if()
......
#elseif(condition)  ## else if
......
#else  ## else 
......
#end 

关系和逻辑操作符

&& 并且  || 或者   ! 取反

注释

  • 单行注释: ## 注释内容
  • 多行注释
#*  
    这个写注释  可以写多行的注释
*#  

  • 宏的定义
#macro(宏的名称  $参数1  $参数2 .....)  
       语句体(即函数体)  
#end
  • 宏调用
#宏的名称 ($参数1  $参数2 .....)  

应用场景

导入jar包:velocity-1.4.jar,velocity-dept.jar;log4j.jar

  • 场景一:
//test.java生成文件
public static void main(String[] args) {
    //获取模板引擎
    VelocityEngine ve = new VelocityEngine();
    //模板文件所在的路径
    String path = "D:/work/velocity/WebRoot";
    //设置参数
    ve.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);
    //处理中文问题
    ve.setProperty(Velocity.INPUT_ENCODING, "GBK");
    ve.setProperty(Velocity.OUTPUT_ENCODING, "GBK");
    try {
        //初始化模板
        ve.init();
        //获取模板(hello.html)
        Template template = ve.getTemplate("hello.html");
        //获取上下文
        VelocityContext root = new VelocityContext();
        //把数据填入上下文
        root.put("name", "world");
        //输出路径
        String outpath = "e:/helloworld.html";
        //输出
        Writer mywriter = new PrintWriter(new FileOutputStream(new File(outpath)));
		// 页面合并
        template.merge(root, mywriter);
        mywriter.flush();
    } catch(Exception e) {
        e.printStackTrace();
    }
}
  • 场景二
  1. 配置模板文件

  2. 定义类继承VelocityServlet中

    • loadConfiguration找出模板路径

    配置velocity.properties文件,定义模板加载路径

    • handleRequest处理请求(将数据放入模板)
  3. 编写web.xml文件,当访问哪个地址的时候进行处理

<!-- hello.html 模板文件 -->
<table cellspacing="0" cellpadding="5" width="20%" >
    <tr>
        <td bgcolor="#eeeeee" align="center"> Names:</td>
    </tr>
    <!-- 遍历名字 -->
    #foreach($name in $theList)
    <tr>
        <td>
        	$name
        </td>
    </tr>
    #end
</table>
//TestVelocityServlet.java
public class TestVelocityServlet extends VelocityServlet {
    /**
    *   由TestVelocityServlet.init()调用
    *   在此找出模版的路径
    */
    protected Properties loadConfiguration(ServletConfig config) throws IOException, FileNotFoundException {
        //配置模板路径
        Properties prop = new Properties();
        String path = config.getServletContext().getRealPath("/"); 
        prop.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);
        return prop;
    }
    /**
    *  Velocity主要的商业逻辑处理方法,由VelocityServlet自动调用
    *  @param ctx 模板上下文            
    *  @return Template 模板信息
    */  
    protected Template handleRequest(Context ctx) throws Exception {
        //主要在此设置演示用的数据,开发中在此调用相应的业务处理流程,
        //并设置返回到页面的数据
        //待展示的列表数据
        String p1 = "first";
        String p2 = "second";
        Vector personList = new Vector();
        personList.addElement(new String(p1.getBytes()));
        personList.addElement(new String(p2.getBytes()));
        //定义模板 
        Template outty = null;
        //设置数据,供页面模版替换成显示的数据
        ctx.put("theList", personList);
        try {
        //取模板
        outty = getTemplate("example.html");
        } catch (Exception e) {
        	e.printStackTrace();
        }
        return outty;
    }
}
//web.xml
<servlet> 
   <servlet-name>SampleServlet</servlet-name>
   <servlet-class>com.huang.servlet.TestVelocityServlet</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>SampleServlet</servlet-name>
   <url-pattern>/a</url-pattern>
</servlet-mapping>

标签:set,name,##,new,Velocity,foo,模板
来源: https://www.cnblogs.com/dragonyoung/p/15830509.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有