第二十六章 使用 CSP 进行基于标签的开发

简介: 第二十六章 使用 CSP 进行基于标签的开发

第二十六章 使用 CSP 进行基于标签的开发

CSP 允许使用标准 HTML 文件开发 CSP 应用程序。 CSP 编译器将 HTML(和 XML)文档转换为可以响应 HTTP 请求的类中的 %CSP.Page

CSP 编译器生成的类与自己创建的类没有什么不同,并且完全可以互操作。这使可以选择是通过 HTML 页面开发 CSP 页面,还是通过在中创建作为 %CSP.Page 扩展的类,该选项卡可在应用程序中使用。检查生成的 CSP 类在调试中通常很有用。

CSP 编译器处理的 HTML 文档包含可能控制类生成、提供控制流、管理数据访问和控制服务器端行为等标签。这些标签是 CSP 标记语言或 CSP 标签。这些标签在开发时在 CSP 服务器上进行解释。 CSP 发送给 HTTP 客户端的 HTML 是完全标准的,不包含 CSP 标签。

在 CSP 文件中,可以使用普通的 HTML 标记以及:

  • 使用#( )# 缓存数据表达式,在页面生成时替换值。
  • Caché CSP 标签  <csp:xxx>, 提供内置和自定义功能。
  • Caché 脚本, <script language=cache runat=server/compiler>,在页面生成或页面编译期间执行 Caché 代码。
  • Caché 方法:可以从页面中调用的可重用类方法。
  • 服务器端子例程调用,#server()#call()#,它们从客户端代码(超事件)调用服务器端子例程。
  • 自定义标签,在“开发自定义标签”一章中描述

CSP 编译器

CSP 编译器是一组运行在 Caché 服务器上的 类和程序,

  1. 使用 `` 标记语言读取和解析 HTML 文档,
  2. 应用基于 CSP 规则的模式匹配逻辑,
  3. 生成一个 Caché 类,并且
  4. 将类编译为可执行代码。

例如,当编译以下简单的 CSP 文档 hello.csp 时,

<html>
<body>
Hello!
</body>
</html>
复制代码

CSP 编译器将其转换为类似于以下内容的类:

Class csp.hello extends %CSP.Page
{
ClassMethod OnPage() As %Status
{
    Write "<html>"
    Write "<body>"
    Write "Hello!"
    Write "</body>"
    Write "</html>"
    Quit $$$OK
}
}
复制代码

当用户从浏览器请求 hello.csp 页面时,CSP 服务器调用生成的 OnPage 方法,将 CSP 文档的原始文本发送到浏览器进行显示。

自动和手动页面编译

可以让 CSP 服务器自动或手动将 CSP 源文档编译成类。

如果自动编译模式(默认)打开,CSP 服务器会自动要求 CSP 编译器根据需要将 CSP 源文档编译成类。 CSP 服务器将源文件的时间戳与类时间戳进行比较,并重新编译源比其类更新的任何页面。通常,在部署的应用程序中会关闭此模式,以避免检查时间戳的开销:

要关闭自动编译,

  1. 在管理门户中,导航到系统管理 > 安全 > 应用程序 > Web 应用程序。
  2. 在表中选择一个应用程序并单击编辑。
  3. 在编辑 CSP 应用程序页面上,清除自动编译。

可以将 CSP 源文件显式编译为类。这对于查找错误很有用。

  1. Studio 中打开 CSP 源文件。
  2. 选择 Build > Compile.

还可以使用 $System.CSP APICaché 命令行(终端)编译 CSP 源文件(如示例中所示)。此方法使用 URL 路径(不是物理路径)/csp/user/mypage.csp 加载和编译 CSP 文件。 c(编译)标志编译生成的类。 k 标志(保留)保存生成的中间代码以供查看。

Do $System.CSP.LoadPage("/csp/user/mypage.csp","ck")


相关文章
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
78 0
|
JavaScript 编译器 Go
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
88 0
|
SQL JavaScript 前端开发
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
136 0
|
JavaScript 前端开发 Go
第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子
第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子
126 0
|
前端开发 JavaScript 编译器
第三十三章 使用 CSP 进行基于标签的开发 - 使用Hyperevents #server和#call调用服务器端方法
第三十三章 使用 CSP 进行基于标签的开发 - 使用Hyperevents #server和#call调用服务器端方法
122 0
|
前端开发 程序员 Go
第三十二章 使用 CSP 进行基于标签的开发 - 服务器端方法
第三十二章 使用 CSP 进行基于标签的开发 - 服务器端方法
122 0
|
JavaScript 前端开发 Go
第三十一章 使用 CSP 进行基于标签的开发 - 转义和引用HTTP输出
第三十一章 使用 CSP 进行基于标签的开发 - 转义和引用HTTP输出
100 0
|
SQL Go
第三十章 使用 CSP 进行基于标签的开发 - 控制流
第三十章 使用 CSP 进行基于标签的开发 - 控制流
90 0
|
SQL 存储 编译器
第二十九章 使用 CSP 进行基于标签的开发 - 服务器端方法
第二十九章 使用 CSP 进行基于标签的开发 - 服务器端方法
95 0
|
JavaScript 前端开发 Go
第二十八章 使用 CSP 进行基于标签的开发 - 运行时表达式
第二十八章 使用 CSP 进行基于标签的开发 - 运行时表达式
86 0