`

velocity宏加载顺序

阅读更多

    假如在两个vm文件中,a.vm和b.vm,这两个vm文件分别独立,并且分别在这两个vm里面都包含了一个宏叫jsonlist,宏的名称和参数都一样,但是宏内容不一样。那么是不是a.vm和b.vm里面使用的都是各自vm文件里包含的宏呢?

   今天在项目中发现,a.vm里面调用jsonlist这个宏的时候调用的不是a.vm文件里面的这个宏,而是b.vm文件里面的jsonlist的这个宏?很奇怪,为什么a.vm里面没有包含b.vm文件啊,怎么会调用到b.vm文件里面的宏呢?然后再做了下测试,重启服务器后,我先访问a.vm这个页面,这是a.vm调用的是a.vm里面的这个宏了,而不是b.vm里面的这个宏了,然后我接着去访问b.vm这个页面,此时b.vm里面调用到的jsonlist这个宏却成了a.vm里面的jsonlist这个宏了。

  我用的是tomcat服务器,以此断定,velocity加载的时候是每次访问一个页面,发现这个页面有宏的时候,就把这个页面所有的宏load到服务器中,不是一开始就加载所有的宏,然后下次再访问其它页面的时候,发现如果存在同样名称和参数的宏,那么它不会再加载这个宏到服务器中,所以下次其它页面用到的宏都是第一次加载进来的名称相同的那个宏,后面名称相同的都不会再加载进来。

  所以velocity中不能存在名称相同内容不能的多个宏,否则由于访问页面顺序的不同,加载的宏顺序也不同,而服务器只加载第一次用到的那个宏,这种就会出现不可预知的问题。

分享到:
评论
1 楼 zxjlwt 2016-02-18  
学习了
素人派
http://surenpi.com

相关推荐

Global site tag (gtag.js) - Google Analytics