第四十七章 开发自定义标签 - 服务器文档对象模型

简介: 第四十七章 开发自定义标签 - 服务器文档对象模型

第四十七章 开发自定义标签 - 服务器文档对象模型

CSP编译器处理CSP文档时,它首先查找与规则匹配相关的所有标记。 当编译器扫描文档时,它会创建一个与CSP文档中包含的标记结构匹配的对象树。 这个树被称为服务器端文档对象模型,它直接类似于显示HTML页面时浏览器中可用的文档对象模型。

服务器端文档对象模型由类%CSP.AbstractAtom 的子类的实例组成,表示一个HTML文档的单元。一个HTML文档由两种类型的ATOM对象组成:RuleTextAtom,每种对象都由它们各自的类表示:%CSP.Rule%CSP.TextAtom。元素由%CSP.Rule的子类的实例表示,它表示一个HTML标记、其属性值的集合、其内部的HTML以及它可能包含的任何内部标记的集合。TextAtom表示不是元素的任何内容。为了提高效率,CSP编译器只为规则匹配中涉及的标记创建Element对象;其余的(例如,<b><i>标记)包含在TextAtom对象中。

例如,假设<MYTAG>标签有一个规则,下面的CSP文档:

<html>
<body>
Hello!
<MYTAG MSG="Welcome">
</body>
</html>
复制代码

构造以下服务器端文档对象:

  • 一个带有TagNameHTML元素,包含子元素:
  • bodyTagName元素包含子元素:
  • 带有Hello!文本的TextAtom
  • 具有MYTAG标记名和Welcome属性(MSG)的元素。

服务器端文档对象模型只在页面编译期间创建; 它在运行时不存在(同样是为了提高效率)。 这就是为什么操作可能包含在编译时执行的表达式和代码的主要原因:以利用服务器端文档对象模型。

CSP编译器构建了文档对象模型之后,它通过访问树中的对象(深度优先)并触发与每个 %CSP.Rul相关联的规则来处理文档。并将结果呈现为可执行代码。根据定义,%CSP.TextAtom 对象没有规则,因此它们直接呈现在可执行代码中。

访问规则属性值

执行规则时,对%CSP的引用。与之关联的规则对象可通过当前对象使用。

例如,假设想要定义一个自定义<MESSAGE>标记,该标记使用粗体斜体文本显示由VALUE属性指定的消息:

<MESSAGE VALUE="Yo!">
复制代码

对此的规则定义可能如下所示:

<csr:rule name="MESSAGE" match="MESSAGE" empty>
<csr:action>
<B><I>##(..GetAttribute("VALUE"))##</I></B>
</csr:action>
</csr:rule>
复制代码

每当遇到<MESSAGE>标记时,就会触发消息规则(即调用RenderStartTag)。

  1. 写出< B >< I >标签。
  2. 写出标记对象的值
  3. 关闭< B >< I >标记。
相关文章
|
16小时前
|
存储 资源调度 应用服务中间件
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
33 0
|
16小时前
|
网络协议 IDE 网络安全
GoLand远程开发IDE:使用SSH远程连接服务器进行云端编程
GoLand远程开发IDE:使用SSH远程连接服务器进行云端编程
123 0
|
16小时前
|
前端开发 数据处理 API
后端开发:构建稳健与高效的服务器逻辑
后端开发:构建稳健与高效的服务器逻辑
|
16小时前
|
运维 监控 Serverless
【专栏】无服务器架构,一种云计算模型,让开发者专注编写代码而不必管理服务器(Serverless)
【4月更文挑战第28天】无服务器架构,一种云计算模型,让开发者专注编写代码而不必管理服务器。它基于事件驱动,自动扩展资源并按需计费。优势包括缩短开发周期、优化资源利用、降低成本、提高可用性及简化维护。然而,冷启动延迟、调试困难、性能监控、安全性和学习曲线等挑战仍需解决。随着技术进步,无服务器架构将在科技发展中发挥更大作用。
|
16小时前
|
网络协议 Ubuntu Linux
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
153 0
|
16小时前
|
Java 关系型数据库 应用服务中间件
webgis Web 服务器端开发
webgis Web 服务器端开发
25 1
|
16小时前
|
网络协议 Java Linux
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
|
16小时前
|
存储 前端开发 数据处理
c++游戏服务器开发
c++游戏服务器开发
|
16小时前
|
Ubuntu 网络协议 Linux
【Linux】Android平板上远程连接Ubuntu服务器code-server进行代码开发
【Linux】Android平板上远程连接Ubuntu服务器code-server进行代码开发
65 0
|
16小时前
|
弹性计算 运维 安全
带你读《弹性计算技术指导及场景应用》——1. 所以!云服务器也可以玩转大模型?(1)
带你读《弹性计算技术指导及场景应用》——1. 所以!云服务器也可以玩转大模型?(1)

热门文章

最新文章