ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java VelocityEngine 属性key值得组成说明

2022-04-21 12:34:05  阅读:193  来源: 互联网

标签:VelocityEngine resource ve classpath list loader key new java


今天看了下模板类VelocityEngine得使用,代码如下:

   public static String testVelocityEngine() throws IOException {
        //初始化
        VelocityEngine ve = new VelocityEngine();
        ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
       //ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
        ve.setProperty("classpath.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        ve.init();

        // 载入(获取)模板对象
        Template t = ve.getTemplate("HelloVelocity.vm");

        VelocityContext ctx = new VelocityContext();
        // 域对象加入参数值
        ctx.put("name", "best");
        ctx.put("date", (new Date()).toString());
            // list集合
            List list = new ArrayList();
            list.add("1111");list.add("2222");
            list.add("3333");list.add("4444");
        ctx.put("list", list);

        //内容打印
//        StringWriter sw = new StringWriter();
//        t.merge(ctx, sw);
//        System.out.println(sw.toString());
        //写入文件
        File file = new File("E:\\MyWorkSpace\\StudySpring\\Study-Velocity\\src\\main\\resources\\out.txt");
        FileWriter writer = new FileWriter(file);
        t.merge(ctx, writer);
        writer.flush();
        writer.close();
        return "testVelocityEngine";
    }
View Code

Velocity得模板语法网上有很多文档,在此不做讨论! 本例模板如下:

#set( $iAmVariable = "good!" )
Welcome $name to velocity.com
today is $date.
#foreach ($i in $list)
    $i
#end
$iAmVariable
View Code

我的问题就是:在 ve.setProperty("classpath.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); 里,这个key ("classpath.resource.loader.class")是怎么来的?这个肯定不是乱写得,那如果我用其他得加载器,这个key值应该怎么填呢?毕竟还有很多其他类加载器(当然可能用不到,此处只做研究),如下图

经过查看源代码,其实这个key是由三部分组成得:

1.第一部分很显然,ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");决定key得第一部分内容:

2.第二部分内容由 RuntimeConstants.RESOURCE_LOADER里得宏定义确定得

3.第三部分,就得根据源代码里得获取情况去分别去看看源代码了

下面是源码:

 

此文件是通过RuntimeInstance里得initializeResourceManager()方法过来得,而此方法中

String rm = getString(RuntimeConstants.RESOURCE_MANAGER_CLASS);
其实走的是在前面截图里的默认配置velocity.properties,
此处说明一下,希望大家不要迷惑,很多配置,在默认配置里其实已经有了,自行查看
以上解决了1、2两点的由来,相对比较固定!


第三部分源码如下:

 

源码里,第三部分的key其实是写死的"class"/"instance",这些都是固定的:
所以,我们如果设置一个ve.setProperty("classpath.resource.loader.instance", instance);
那么ve.setProperty("classpath.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");的设置其实是不生效的,大家自行查看源码吧,篇幅太长,我折叠了!
到此,这三部分的由来基本说清楚了!

下面是官网地址:https://velocity.apache.org/engine/1.6.2/ 这是1.6.2版本,大家可以查看其他版本的使用情况

当然还有很多其他key值得使用情况,基本上可以通过查看源码、官网、默认配置这三个途径去了解!祝好运!





 

标签:VelocityEngine,resource,ve,classpath,list,loader,key,new,java
来源: https://www.cnblogs.com/ruber/p/16173590.html

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

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

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

ICode9版权所有