freemarker模板解析过程
2015-11-23 00:02
155 查看
例如:一个freemarker表达式<body> ${hello} </body>,会被解析成三个部分,分别是
<body>
${hello}
</body>
前面和后面的body标签,在freemarker中被定义为TextBlock,中间的变量定义为DollarVariable。那么目前的结构也就是RootExpression = TextBlock DollarVariable TextBlock。解释器一进来将会对RootExpression进行解析,RootExpression将会依次调用TextBlock DollarVariable TextBlock进行解析。不同类型将会做不同操作,根据传进来的Context参数进行相应赋值并输出等。
当Template启动解释时,由Environment进入调用根元素的访问动作,根元素会依次访问所包含的TemplateElement,直到所有叶子节点访问完成,这些访问动作是通过调用Environment的visit方法控制,Environment做些相关必要操作,再根据访问的节点类型调用相应节点的访问操作。当访问到包含需要解释器的元素节点时,则会启动解释器做解释操作,根据Expression类型,调用getStringValue,并传入参数Environment,相应类型的表达式根据Environment解释得到输入字符串的值,返回并写到响应流,即解释完成。
<body>
${hello}
</body>
前面和后面的body标签,在freemarker中被定义为TextBlock,中间的变量定义为DollarVariable。那么目前的结构也就是RootExpression = TextBlock DollarVariable TextBlock。解释器一进来将会对RootExpression进行解析,RootExpression将会依次调用TextBlock DollarVariable TextBlock进行解析。不同类型将会做不同操作,根据传进来的Context参数进行相应赋值并输出等。
当Template启动解释时,由Environment进入调用根元素的访问动作,根元素会依次访问所包含的TemplateElement,直到所有叶子节点访问完成,这些访问动作是通过调用Environment的visit方法控制,Environment做些相关必要操作,再根据访问的节点类型调用相应节点的访问操作。当访问到包含需要解释器的元素节点时,则会启动解释器做解释操作,根据Expression类型,调用getStringValue,并传入参数Environment,相应类型的表达式根据Environment解释得到输入字符串的值,返回并写到响应流,即解释完成。
相关文章推荐
- Oracle数据库按时间进行分组统计数据的方法
- 程序员偷偷深爱的 9 个不良编程习惯
- 腾讯内部推广人员亲述:QQ阅读4.6亿用户的产品推广思路
- 巨头与资本为何青睐企业级软件服务市场?BAT谁最有戏
- 省钱宝~网购返利网站
- html5+css3实现抽奖活动的效果
- 移动平台WEB前端开发技巧汇总
- python 监控jvm脚本
- ansible api简单应用
- Day 9:(12)用户定义函数实训参考答案
- authentication vs authorization 验证与授权的区别
- scala中函数调用
- scala中默认擦描述和带名参数
- scala可变长度参数(一)
- scala可变长度参数(二)
- Android开发之listview 的使用中Item获取焦点的处理
- Android 开发之自定义滑动开关
- Android开发之细说ListView上拉加载,下拉刷新过程
- how to setup c develop environment for windows
- golang windows 交叉编译 Linux