freemarker模板解析过程
2016-03-06 21:18
363 查看
原文地址
例如:一个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解释得到输入字符串的值,返回并写到响应流,即解释完成。
例如:一个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解释得到输入字符串的值,返回并写到响应流,即解释完成。
相关文章推荐
- iOS UI基础学习历程
- OnCreateContextMenuListener,MultiChoiceModeListener和OnLongClickListener的优先级
- 算法_10 : 图算法_3: 图的遍历、匹配
- Linux多线程编程实例解析
- CentOS 7.1编译安装Nginx1.9.0
- 【历届试题】大臣的旅费
- 傻瓜式理解之一致哈希(仅供初学者理解)
- 思考.视界
- freemarker常用的基本命令
- BCBestCoder Round #74
- doracms 安装
- 【LeetCode】Valid Sudoku
- UIButton
- 最短路径:我的理解--SPFA算法
- [Java] Tcp/udp 简单通信
- 最短路径:我的理解--SPFA算法
- 最短路径:我的理解--SPFA算法
- 最短路径:我的理解--SPFA算法
- 最短路径:我的理解--SPFA算法
- 如何让代码封装性强,耦合度低(持续更新)