第二十六章 使用 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é
服务器上的 类和程序,
- 使用 `` 标记语言读取和解析 HTML 文档,
- 应用基于
CSP
规则的模式匹配逻辑, - 生成一个
Caché
类,并且 - 将类编译为可执行代码。
例如,当编译以下简单的 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
服务器将源文件的时间戳与类时间戳进行比较,并重新编译源比其类更新的任何页面。通常,在部署的应用程序中会关闭此模式,以避免检查时间戳的开销:
要关闭自动编译,
- 在管理门户中,导航到系统管理 > 安全 > 应用程序 > Web 应用程序。
- 在表中选择一个应用程序并单击编辑。
- 在编辑
CSP
应用程序页面上,清除自动编译。
可以将 CSP
源文件显式编译为类。这对于查找错误很有用。
- 在
Studio
中打开CSP
源文件。 - 选择
Build
>Compile
.
还可以使用 $System.CSP API
从 Caché
命令行(终端)编译 CSP
源文件(如示例中所示)。此方法使用 URL
路径(不是物理路径)/csp/user/mypage.csp
加载和编译 CSP
文件。 c
(编译)标志编译生成的类。 k
标志(保留)保存生成的中间代码以供查看。
Do $System.CSP.LoadPage("/csp/user/mypage.csp","ck")