第 十 六 章 W e b 服 务 器 的 细 节
如 果 您 仔 细 阅 读 了 前 面 一 章 的 内 容 并 实 际 创 建 了 一 个 W e b 服 务 器 应 用 程序 您 一 定 会 感 到 用 C+ + Bu ild e r 3 创 建 W e b 服 务 器 应 用 程 序 是 很 简 单 的
C+
- Bu ild e r 3 的 确 很 优 秀 实 际 上 前 面 一 章 还 只 是 简 单 的 介 绍 忽 略 了 很多 细 节 这 一 章 我 们 将 进 一 步 介 绍 细 节 包 括 W e b 模 块 和 W e b 调 度 器 动 作项 H TTP 请 求 消 息 响 应 客 户 HT M L 模 板 和 页 面 生 成 器 等 只 要 您 真 正掌 握 了 这 些 细 节 您 就 成 为 W e b 服 务 器 应 用 程 序 的 设 计 高 手
1 6. 1 We b 服 务 器 应 用 程 序 的 逻 辑 结 构
W e b 服 务 器 应 用 程 序 实 际 上 是 W e b 服 务 器 在 功 能 上 的 扩 展 就 好 象 W ind ow s 应 用 程 序 是 W ind ow s 在 功 能 上 的 扩 展 一 样 当 W e b 服 务 器 收 到 客 户 的 H TTP 请 求 时 W e b 服 务 器 应 用 程 序 能 够 从 W e b 服 务 器 检 索 到 一 个 H TTP 请 求 消 息 W e b 服 务 器 应 用 程 序 要 做 的 就 是 分 析 H TTP 请 求 消 息 然 后 作 出 不 同 的 响应 更 准 确 地 说 就 是 生 成 HT M L 页 面 传 递 给 W e b 服 务 器 再 由 W e b 服 务 器 传递 给 客 户 除 此 以 外 W e b 服 务 器 应 用 程 序 还 可 以 象 一 般 的 应 用 程 序 一 样做 任 何 事 情
C+ + Bu ild e r 3 用 T W e b R e que s t对 象 来 描 述 H TTP 请 求 消 息 用 T W e b R e sp o n se
对 象 来 描 述 W e b 服 务 器 应 用 程 序 作 出 的 反 应 W e b 服 务 器 应 用 程 序 中 的 一 个关 键 部 件 是 W e b 模 块 它 收 集 和 管 理 着 一 组 动 作 项 ( T W e bA c tionIte m 对 象 ) 并 根 据 H TTP 请 求 消 息 来 指 派 其 中 一 个 动 作 项 去 响 应 客 户 的 请 求 实 际 上 就是 填 写 T W e b R e s pons e 对 象 的 C on te n t特 性 W e b 服 务 器 应 用 程 序 的 逻 辑 结 构如 图 16 .1 所 示
图 16 .1 W e b 服 务 器 应 用 程 序 的 逻 辑 结 构
1 6. 2 W e b 模 块
当 您 用 C+ + Bu ild e r 3 创 建 W e b 服 务 器 应 用 程 序 时 它 会 自 动 包 含 一 个 空 白 的W e b 模 块 W e b 模 块 是 W e b 服 务 器 应 用 程 序 的 核 心 部 件 它 在 H TTP A P P 单元 中 是 这 样 声 明 的
c la s s P A S C A L IM P L E M EN TA T IO N TW e b M o d u le : p u b lic H ttp a p p ::T C u s to m W e b D is p a tc h e r
{
_pu b lis h e d:
_p rop e r ty A c t ions ;
_p rop e r ty B e fo re D is p a tc h ;
_p rop e r ty A f te r D is pa tc h ;
};
可 以 看 出 W e b 模 块 的 直 接 上 级 是 T C u s to m W eb D is p atch e r 而T C u s to m W eb D is p a tch e r 又 是 从 T D a ta M odu le 继 承 下 来 的 因 此 W e b 模 块 也象 传 统 的 数 据 模 块 一 样 可 以 放 一 些 非 可 视 的 元 件 如 T S e ssio n TTa b le
T P ag e P ro d u cer T D a ta S e t T a b le P roduc e r等
W e b 模 块 不 仅 仅 是 个 容 器 更 主 要 的 它 还 是 W e b 服 务 器 应 用 程 序 的 调 度 中心 它 收 集 和 管 理 着 一 组 动 作 项 由 它 决 定 指 派 哪 个 动 作 项 去 响 应 客 户 的请 求 要 说 明 的 是 如 果 应 用 程 序 中 已 经 有 了 W e b 模 块 就 没 必 要 也 不 允许 再 把 T W e b D is p atch e r 元 件 加 到 W e b 模 块 上 因 为 W e b 模 块 已 经 包 含 了T W e b D is p atch er 元 件 即 W e b 调 度 器 的 功 能 事 实 上 W e b 模 块 和
T W e b D is p atch er元 件 都 是 从 T C u s to m W eb D is p atch e r继 承 下 来 的 注 意 一 个
W e b 服 务 器 应 用 程 序 只 能 有 一 个 W e b 模 块 或 调 度 中 心
A c tio n 特 性
声 明 _prope r ty T W e b A c tionIte m * A c t ion[ in t In d e x];
通 过 这 个 只 读 的 特 性 可 以 访 问 由 W e b 模 块 收 集 和 管 理 的 每 个 动 作 项 ( T W e bA c tionIte m 对 象 ) Inde x 是 动 作 项 的 索 引 ( 序 号 ) 0 代 表 第 一 个 动 作 项1 代 表 第 二 个 动 作 项 依 次 类 推 如 果 要 通 过 名 称 来 访 问 动 作 项 请 调 用A c tio n B y N a m e 函 数
A c tio n s 特 性
声 明 _prope r ty T W e b A c tionIte m s * A c tions ;
这 个 特 性 用 于 管 理 动 作 项 如 增 加 删 减 动 作 项 等
在 设 计 期 您 可 以 单 击 这 个 特 性 边 上 的 省 略 号 按 钮 打 开 动 作 项 编 辑 器 在运 行 期 您 可 以 调 用 T W e b A c tio n Ite m s 对 象 的 A d d A ssig n C le a r等 函 数
R e que s t 特 性
声 明 _prope r ty T W e b R e que s t* R e qu e s t;
这 个 只 读 的 特 性 返 回 W e b 模 块 正 在 处 理 的 H TTP 请 求 消 息 即 T W e b R e que s t 对象 W e b 调 度 器 根 据 这 个 特 性 指 派 相 应 的 动 作 项 去 响 应 客 户 的 请 求 至 此读 者 应 该 能 够 理 解 为 什 么 在 处 理 T P ag e P ro d u cer元 件 的 O n HT M L T a g 事 件 时 能够 直 接 引 用 R e que s t
R e s p o n s e 特 性
声 明 _prope r ty T W e b R e s pons e * R e s pons e ;
这 个 只 读 的 特 性 返 回 响 应 H TTP 请 求 消 息 的 T W e b R e s pons e 对 象 在 W e b 服 务器 应 用 程 序 中 经 常 要 对 T W e b R e s pons e 对 象 的 C on te n t特 性 赋 值 读 者 可 以参 见 上 一 章 的 示 例
A c tio n B y N a m e 函 数
声 明 T W e b A c t ionIte m * _fa s tc a ll A c t ionB y N a m e ( c ons t S y s te m : : A ns i S tr in g AN a m e ) ;
这 个 函 数 返 回 一 个 动 作 项 ( T W e bA c tionIte m 对 象 ) AN a m e 参 数 指 定 动 作 项 的
名 称
构 造 函 数
声 明 _fa s tc a l l v ir tua l T W e b M odu le ( C la s s e s :: T C o m pon e n t* AOw n e r ) ;
构 造 函 数 用 于 创 建 T W e b M odu le 对 象 的 实 例 然 后 触 发 O n C reate 事 件 这 样您 就 有 机 会 对 W e b 模 块 初 始 化 要 说 明 的 是 一 般 情 况 下 并 不 需 要 调 用 构造 函 数 来 创 建 W e b 模 块 因 为 当 您 用 C+ + Bu ild e r 3 创 建 W e b 服 务 器 应 用 程 序时 它 会 自 动 创 建 一 个 空 白 的 W e b 模 块 一 个 W e b 服 务 器 应 用 程 序 只 允 许 有一 个 W e b 模 块
析 构 函 数
声 明 _fa s tc a l l v ir tua l ~ T W e bM odu le ( vo id) { }
析 构 函 数 用 于 删 除 W e b 模 块 的 实 例 由 W e b 模 块 收 集 和 管 理 的 动 作 项 也 将 一并 删 除 同 时 将 触 发 O n D e s tro y 事 件 不 过 一 般 情 况 下 并 不 需 要 调 用 析 构函 数 因 为 当 W e b 服 务 器 应 用 程 序 关 闭 时 会 自 动 删 除 W e b 模 块 的 实 例
O n C re a te 事 件
声 明 _prope r ty C la s s e s :: T N o tif y E v e nt O n C re a te ;
正 在 创 建 W e b 模 块 时 将 触 发 这 个 事 件 这 样 您 就 有 机 会 对 W e b 模 块 初 始 化例 如 假 设 W e b 模 块 上 包 含 一 个 TTa b le 元 件 此 时 就 可 以 打 开 数 据 集 记 住一 点 W e b 服 务 器 应 用 程 序 中 的 W e b 模 块 就 相 当 于 一 般 应 用 程 序 中 的 Fo rm 因 此 W e b 服 务 器 应 用 程 序 的 所 有 初 始 化 工 作 都 可 以 在 处 理 O n C reate 事 件 的句 柄 中 进 行
O n D e s tro y 事 件
声 明 _prope r ty C la s s e s :: T N o tif y E v e nt O n D e s tro y ;
当 W e b 正 在 删 除 的 时 候 将 触 发 这 个 事 件 这 样 您 就 有 机 会 做 一 些 清 场的 工 作 以 保 证 先 前 占 用 的 资 源 能 得 到 释 放
O n B e fo re D is p a tc h 事 件
声 明 _prope r ty T H T T P M e thodE ve nt B e fo re D is p a tc h ;
其 中 T H T T P M e thodE ve n t是 这 样 声 明 的
ty pe de f v o id _ fa s tc a l l (_ c losure ∗ T H T T P M e th o d E v e n t)( S y s te m ::T O b je c t∗ Se n d e r, T W eb R e q u es t∗ R e q u es t , T W eb R e s p o n se ∗ R e sp o n s e , b ool & H a n d le d ) ;
当 W e b 模 块 检 索 到 一 个 H TTP 请 求 消 息 时 就 触 发 这 个 事 件 这 样 您 就 有 机 会在 指 派 具 体 的 动 作 项 之 前 先 对 H TTP 请 求 消 息 作 一 个 总 的 处 理 然 后 再 响应 动 作 项 的 O n A c tio n 事 件 对 H TTP 请 求 消 息 作 具 体 的 处 理
如 果 不 需 要 区 分 H TTP 请 求 消 息 您 可 以 在 响 应 O n B e fo re D is p a tc h 事 件 的 句柄 中 填 充 R e s pons e 参 数 ( T W e bR e s pons e 对 象 ) 同 时 把 H a nd le d 参 数 设 为 T ru e 表 示 消 息 已 处 理 过 这 样 W e b 模 块 就 不 再 把 H TTP 请 求 消 息 传 递 给 任 何 一个 动 作 项 换 句 话 说 就 是 不 再 触 发 动 作 项 的 O n A c tio n 事 件 如 果 您 并 没 有填 充 R e s pons e 参 数 却 把 H a nd le d 参 数 设 为 T ru e W e b 模 块 也 不 把 H TTP 请 求消 息 传 递 给 任 何 一 个 动 作 项 但 将 触 发 O n A fte r D is p a tc h 事 件 这 样 您 还 有一 次 机 会 对 H TTP 请 求 消 息 进 行 处 理
O n A fter D is p a tc h 事 件
声 明 _prope r ty T H T T P M e thodE ve nt A f te r D is pa tc h;
当 W e b 模 块 指 派 了 某 个 动 作 项 并 且 已 经 填 充 了 H TTP 响 应 消 息 ( T W e bR e s pons e 对 象 ) 就 触 发 这 个 事 件 此 时 H TTP 响 应 消 息 还 没 有 发 出 这 样 您 就 有 机 会 对 T W e b R e s pons e 对 象 作 最 后 的 修 改 如 果 您 把 H a nd le d 参 数设 为 Fa ls e 表 示 不 发 出 H TTP 响 应 消 息
1 6.3 We b 调 度 器
从 上 一 节 可 以 看 出 W e b 模 块 不 仅 仅 是 个 容 器 更 主 要 的 它 是 W e b 服 务 器 应用 程 序 的 调 度 中 心 起 着 举 足 轻 重 的 作 用 不 过 有 时 候 您 可 能 还 得 用 传
统 的 数 据 模 块 这 是 因 为 过 去 可 能 已 经 为 数 据 模 块 写 了 很 多 代 码 数 据模 块 中 封 装 了 许 多 成 熟 的 商 业 规 则 如 果 一 切 从 头 开 始 就 非 常 可 惜 甚 至 是不 可 能 的 这 时 候 您 可 以 用 数 据 模 块 代 替 W e b 模 块 只 要 把 一 个T W e b D is p atch er元 件 加 到 数 据 模 块 上 这 样 也 能 构 成 W e b 服 务 器 应 用 程 序 的调 度 中 心 事 实 上 W e b 模 块 本 来 就 扮 演 着 容 器 和 调 度 中 心 两 种 角 色 现在 只 是 分 开 实 现 而 已
T W e b D is p atch er 元 件 的 直 接 上 级 是 T C u s to m W eb D is p atch e r 在 H TTP A P P 单元 中 T C u s to m W eb D is p atch er是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T C us to m W e b D is p a tc h e r : pu b lic F o rm s : : T D a ta M odu le
{
pub l ic :
T W e b A c tio n Ite m ∗ _ fas tcall A c t io n B y N am e( co n s t S y s tem : : A n s i S tr in g A N a m e ) ;
_p rop e r ty T W e b A c t ionIte m s ∗ A c tio n s ;
_p rop e r ty T W e b A c t ionIte m ∗ A c tio n [ in t In d e x ] ;
_p rop e r ty T W e b R e q u e s t∗ R e q u e s t ;
_p rop e r ty T W e b R e s p onse ∗ R e sp o n s e ;
};
T W e b D is p atch er元 件 的 特 性 方 法 和 事 件 请 参 见 W e b 模 块 与 W e b 模 块 一 样 T W e b D is p atch er元 件 也 有 收 集 和 管 理 动 作 项 的 功 能 在 T W e b D is p atch e r元 件上 双 击 鼠 标 左 键 或 单 击 鼠 标 右 键 再 选 择 A c tio n E d i tor 命 令 将 弹 出 动 作编 辑 器
1 6. 4 动 作 项
W e b 模 块 用 动 作 项 来 响 应 H TTP 请 求 消 息 一 个 动 作 项 就 是 一 个T W e b A c t ionIte m 对 象 C+ + Bu ild e r 3 用 动 作 编 辑 器 来 管 理 W e b 服 务 器 应 用 程序 的 动 作 项 要 打 开 动 作 编 辑 器 有 三 种 方 法 一 是 直 接 双 击 W e b 模 块 或T W eb D is p atch e r 元 件 二 是 用 鼠 标 右 键 单 击 W e b 模 块 或 T W e b D is p atch er 元件 在 弹 出 的 菜 单 中 选 择 A c tio n E d i tor 命 令 三 是 在 O b ject In s p ecto r 中找 到 A c tio n s 特 性 单 击 该 特 性 边 上 的 省 略 号 按 钮 打 开 的 动 作 编 辑 器 如 图
16 .2 所 示
图 16 . 2 动 作 编 辑 器
- 个
W e b 服 务 器 应 用 程 序 往 往 有 多 个 动 作 项 您 可 以 让 每 个 动 作 项 单 独 完成 对 H TTP 请 求 消 息 的 响 应 也 可 以 只 进 行 一 部 分 响 应 让 其 它 动 作 项 共 同
参 与 完 成 对 H TTP 请 求 的 响 应 最 后 一 个 动 作 项 往 往 比 较 特 殊 通 常 用 于 对H TTP 响 应 消 息 作 最 后 的 检 查 然 后 再 决 定 是 发 送 H TTP 响 应 消 息 还 是 返 回一 个 错 误 码 动 作 项 一 般 不 需 要 显 式 地 发 送 H TTP 响 应 消 息 因 为 W e b 服 务器 应 用 程 序 会 自 动 把 HT M L 页 面 传 递 给 W e b 服 务 器
在 H TTP A P P 单 元 中 T W e b A c tio n Ite m 对 象 是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T W e b A c tio n Ite m : p u b lic C la s se s ::T C o lle c tio n Ite m
{
pub l ic :
_ fa s tc a ll v ir tu a l T W e b A c tio n I te m ( C la s s e s ::T C o lle c tio n * C o lle c tio n ) ;
_ fa s tc a ll v ir tu a l ~ T W e b A c tio n Ite m ( v o id ) ;
v ir tu a l v o id _ fa s tc a ll A s s ig n T o ( C la s s e s ::T P e rs is te n t* D e s t) ;
_pu b lis h e d:
_p rop e r ty boo l D e fa u lt;
_p rop e r ty boo l E n a b le d;
_p rop e r ty T M e th odT y p e M e thodT y p e ;
_ p ro p e rty S y s te m ::A n s iS trin g N a m e ;
_ p ro p e rty S y s te m ::A n s iS trin g P a th In fo ;
_p rop e r ty T H T T P M e thodE ve nt O n A c t io n;
};
D e fa u lt 特 性
声 明 _prope r ty bool D e fa u lt;
如 果 这 个 特 性 设 为 T ru e 此 动 作 项 就 成 为 默 认 的 动 作 项 在 动 作 编 辑 器 中默 认 动 作 项 的 D e fa u l t 栏 有 一 个 * 号 ( 见 图 16 .2)
当 W e b 模 块 检 索 到 一 个 H TTP 请 求 消 息 就 在 所 有 的 动 作 项 中 查 找 与 此 消 息匹 配 的 动 作 项 如 没 有 找 到 就 指 派 默 认 的 动 作 项 去 响 应 此 消 息 即 使 该动 作 项 与 H TTP 请 求 消 息 并 不 匹 配 这 就 是 D e fa u l t特 性 的 作 用 因 此 默 认的 动 作 项 往 往 是 最 后 一 个 动 作 项
在 一 个 W e b 服 务 器 应 用 程 序 中 只 能 有 一 个 动 作 项 被 指 定 为 默 认 动 作 项对 于 默 认 的 动 作 项 来 说 如 果 它 的 En a b le d 特 性 设 为 Fa ls e W e b 调 度 器 先 从非 默 认 的 动 作 项 中 查 找 匹 配 的 动 作 项 只 有 当 所 有 的 非 默 认 动 作 项 都 不 匹
配 时 才 指 派 默 认 的 动 作 项 如 果 默 认 动 作 项 的 En a b le d 特 性 设 为 T ru e W e b 调 度 器 将 从 包 括 默 认 动 作 项 在 内 的 所 有 动 作 项 中 查 找 匹 配 的 动 作 项 如 果都 不 匹 配 就 指 派 默 认 的 动 作 项 由 此 可 见 默 认 的 动 作 项 有 着 特 殊 的 作用 处 理 默 认 动 作 项 的 O n A c tio n 事 件 的 句 柄 应 当 能 够 处 理 任 何 类 型 的 H TTP 请 求 消 息
注 意 一 般 情 况 下 您 应 当 在 设 计 期 就 确 定 哪 个 动 作 项 为 默 认 动 作 项 尽量 不 要 在 运 行 期 指 定 默 认 动 作 项 因 为 这 可 能 导 致 不 可 预 计 的 后 果
这 里 顺 便 介 绍 一 下 匹 配 的 条 件 必 须 同 时 满 足 下 列 两 个 条 件 才 算 是 匹 配一 是 动 作 项 的 M e thodT y p e 特 性 与 H TTP 请 求 消 息 ( T W e bR e que s t 对 象 ) 的M e thodT y p e 特 性 相 同 二 是 动 作 项 的 P a th In fo 特 性 与 H TTP 请 求 消 息 ( T W e bR e que s t对 象 ) 的 P a th In fo 特 性 相 同
En a b le d 特 性
声 明 _prope r ty bool E n a b le d;
如 果 动 作 项 的 En a b le d 特 性 设 为 Fa ls e 动 作 项 就 被 暂 时 禁 止 W e b 调 度 器 将不 检 查 此 动 作 项 是 否 与 H TTP 请 求 消 息 匹 配 更 不 会 指 派 该 动 作 项 去 响 应H TTP 请 求 消 息 En a b le d 特 性 对 默 认 的 动 作 项 无 效 如 果 默 认 的 动 作 项 的En a b le d 特 性 设 为 Fa ls e W e b 调 度 器 将 首 先 从 非 默 认 的 并 且 En a b le d 特 性 设 为T ru e 的 动 作 项 中 查 找 匹 配 的 动 作 项 只 有 当 这 些 动 作 项 都 不 匹 配 时 才 指派 默 认 的 动 作 项 即 使 默 认 的 动 作 项 可 能 正 好 与 H TTP 请 求 消 息 匹 配
M e th o d Ty p e 特 性
声 明 _prope r ty T M e thodT y p e M e thodT y p e ;
这 个 特 性 指 定 一 个 方 法 类 型 动 作 项 将 只 响 应 该 类 型 的 H TTP 请 求 消 息M e thodT y p e 特 性 可 以 设 为 以 下 值 m tG e t m t H ead m t P o s t m tP u t m tA n y 注 意 M e thodT y p e 特 性 设 为 m tA n y 的 动 作 项 最 好 加 在 其 它 动 作 项 的 后 面 这 样 能 保 证 先 找 到 精 确 匹 配 的 动 作 项
N a m e 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing N a m e ;
这 个 特 性 用 于 给 动 作 项 指 定 名 称 每 个 动 作 项 的 名 称 应 该 是 唯 一 的 否 则将 触 发 异 常
Pa th I n fo 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing P a th In fo ;
这 个 特 性 用 于 指 定 入 口 路 径 动 作 项 将 只 处 理 与 此 入 口 路 径 匹 配 的 H TTP 请求 消 息 假 设 H TTP 请 求 消 息 的 目 标 UR L 是
h t tp :// w w w . T S ite . c o m / a rt/ g a lle ry. d l l / m a m m a ls ? a n im a l= d o g & c o lo r= b la c k
其 中 ga lle r y .d ll是 W e b 服 务 器 应 用 程 序 /m a m m a ls 就 是 入 口 路 径
A ssig n To 函 数
声 明 v ir tu a l v o id _ fa s tc a ll A s s ig n T o ( C la s s e s ::T P e rs is te n t* D e s t) ;
这 个 函 数 把 一 个 动 作 项 ( 本 身 ) 赋 给 由 D e s t参 数 指 定 的 另 一 个 动 作 项 包 括 动作 项 的 D e fa u l t En a b le d M e thod T y pe 和 Pa th In fo 等 特 性 的 值
构 造 函 数
声 明 _fa s tc a l l v ir tua l T W e b A c tionIte m ( C la s s e s : : T C o lle c tion* C o lle c tion);
构 造 函 数 用 于 创 建 T W e b A c tio n Ite m 对 象 的 实 例 并 对 该 实 例 初 始 化 En a b le d
特 性 设 为 T ru e P a th In fo 特 性 设 为 空
析 构 函 数
声 明 _fa s tc a l l v ir tua l ~ T W e bA c tionIte m ( vo id ) ;
析 构 函 数 用 于 删 除 T W e b A c tio n Ite m 对 象 的 实 例 不 过 一 般 情 况 下 并 不 需要 调 用 析 构 函 数 因 为 当 W e b 服 务 器 应 用 程 序 终 止 时 会 自 动 删 除 W e b 模 块 的实 例 同 时 删 除 由 W e b 模 块 收 集 和 管 理 的 所 有 动 作 项 要 显 式 地 删 除
T W e b A c t ionIte m 对 象 的 实 例 用 d e le te
O n A c tio n 事 件
声 明 _prope r ty T H T T P M e thodE ve nt O n A c t ion;
其 中 T H T T P M e thodE ve n t是 这 样 声 明 的
ty pe de f v o id _ fa s tc a l l (_ c lo sure ∗ T H T T P M e th o d E v e n t)( S y s te m ::T O b je c t∗ Se n d e r , T W e b R e que s t∗ R e q u es t , T W eb R e sp o n s e ∗ R e s p o n s e , b o ol & H a nd le d ) ;
这 个 事 件 可 能 是 W e b 服 务 器 应 用 程 序 中 最 重 要 的 事 件 上 一 章 已 多 次 提 到
当 W e b 调 度 器 检 索 到 一 个 H TTP 请 求 消 息 并 且 找 到 了 匹 配 的 动 作 项 就 触 发这 个 事 件 这 样 您 就 有 机 会 对 客 户 的 请 求 作 出 反 应 O n A c tio n 事 件 有 三 个参 数
R e que s t参 数 是 个 T W e b R e que s t对 象 用 于 描 述 H TTP 请 求 消 息 动 作 项 正 是通 过 R e que s t 参 数 来 分 析 客 户 发 出 的 请 求 R e s pons e 参 数 是 个 T W e b R e s pons e 对 象 用 于 描 述 H TTP 响 应 消 息 所 谓 响 应 实 际 上 就 是 把 HT M L 代 码 赋 给T W e b R e s pons e 对 象 的 C on te n t特 性 这 些 HT M L 代 码 被 传 送 到 客 户 端 后 由W e b 浏 览 器 解 释 并 显 示 成 W e b 页 面 如 果 此 动 作 项 已 经 完 成 了 对 H TTP 请 求消 息 的 处 理 就 把 H a nd le d 参 数 设 为 T ru e 如 果 此 动 作 项 没 有 响 应 H TTP 请 求消 息 或 只 是 部 分 响 应 H TTP 请 求 消 息 应 当 把 H a nd le d 特 性 设 为 Fa ls e 让 其它 动 作 项 有 机 会 作 进 一 步 的 处 理
一 般 来 说 您 并 不 需 要 显 式 地 调 用 S e n d R ed irect或 S e ndR e s pon s e 来 发 送 H TTP
响 应 消 息 因 为 W e b 服 务 器 应 用 程 序 会 自 动 把 HT M L 页 面 传 递 W e b 服 务 器再 传 递 给 客 户
1 6.5 HT TP 请 求 消 息
C+
- Bu ild e r 3 用 T W e b R e que s t对 象 来 描 述 和 解 释 H TTP 请 求 消 息 W e b 服 务器 应 用 程 序 可 以 从 中 检 索 到 许 多 信 息 从 而 作 出 不 同 的 响 应
1 6.5. 1 HTTP 请 求 消 息 是 怎 样 传 递 的
当 客 户 在 W e b 浏 览 器 中 单 击 一 个 超 级 链 接 W e b 浏 览 器 就 开 始 收 集 协 议 种类 W e b 服 务 器 的 主 机 名 信 息 的 入 口 路 径 当 前 的 日 期 和 时 间 操 作 系统 以 及 W e b 浏 览 器 连 接 状 态 等 信 息 然 后 把 这 些 信 息 组 合 成 H TTP 请 求 消 息发 送 给 W e b 服 务 器
如 果 W e b 服 务 器 需 要 区 分 H TTP 请 求 消 息 中 的 入 口 路 径 并 分 门 别 类 地 加 以 处理 W e b 服 务 器 必 须 把 H TTP 请 求 消 息 传 递 给 W e b 服 务 器 应 用 程 序 更 准 确地 说 就 是 W e b 模 块 具 体 的 传 递 方 式 取 决 于 W e b 服 务 器 应 用 程 序 的 类 型
对 于 CG I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 W e b 服 务 器 与 W e b 服 务 器 应 用 程序 之 间 是 通 过 标 准 的 输 入 输 出 设 备 交 换 信 息 的 因 此 W e b 服 务 器 直 接 把H TTP 请 求 消 息 传 递 给 CG I程 序 然 后 等 待 CG I程 序 执 行 CG I程 序 把 响 应 结果 直 接 传 递 给 W e b 服 务 器
对 于 W in - C G I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 W e b 服 务 器 与 W e b 服 务 器 应用 程 序 之 间 通 过 文 件 交 换 信 息 因 此 W e b 服 务 器 首 先 把 H TTP 请 求 消 息 写到 一 个 配 置 文 件 中 ( 扩 展 名 是 .IN I) 然 后 执 行 W in - C G I 程 序 并 传 递 两 个 文 件位 置 一 个 是 包 含 H TTP 请 求 消 息 的 配 置 文 件 的 位 置 另 一 个 是 让 W in - C G I 程 序 写 响 应 结 果 的 文 件 的 位 置 W e b 服 务 器 会 等 待 W in - C G I程 序 执 行 执 行
完 毕 后 就 从 指 定 的 文 件 中 读 取 响 应 结 果
对 于 IS A P I 或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 当 W e b 服 务 器 检 索 到一 个 H TTP 请 求 消 息 它 就 加 载 动 态 链 接 库 形 式 的 IS A P I 或 NS A P I 程 序 ( 如 果IS A P I 或 NS A P I 程 序 还 没 有 加 载 的 话 ) 然 后 把 H TTP 请 求 消 息 以 一 个 结 构 的形 式 传 递 给 IS A P I或 NS A P I程 序 等 IS A P I或 N S A P I程 序 执 行 关 闭 就 把 响 应结 果 直 接 传 递 给 W e b 服 务 器
1 6.5.2 TWeb Request 是 怎 样 声 明 的
T W e b R e que s t 只 是 一 个 虚 拟 基 类 对 于 不 同 类 型 的 W e b 服 务 器 应 用 程 序 来说 描 述 和 解 释 H TTP 请 求 消 息 的 实 际 上 是 T W e b R e que s t的 派 生 类 对 于 IS A P I 或 NS AP I类 型 的 W e b 服 务 器 应 用 程 序 来 说 就 是 T ISA P IR e q u e s t 对 于 CG I类 型的 W e b 服 务 器 应 用 程 序 来 说 就 是 TC G IR e q u e s t 对 于 W in - C G I 类 型 的 W e b 服务 器 应 用 程 序 来 说 就 是 T W in C G IR e que s t
在 H TTP A P P 单 元 中 T W e b R e que s t是 怎 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T W e b R e q u e s t : p u b lic S y s te m ::T O b je c t
{
priv a te :
// 私有的成 员此处省略
pub l ic :
_fa s tc a l l T W e b R e qu e s t( vo id);
_fa s tc a l l v ir tua l ~ T W e bR e q ue s t( v o id);
v ir tu a l in t _ fa s tc a ll R e a d C lie n t( v o id * B u ffe r , in t C o u n t);
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll R e a d S tr in g ( in t C o u n t);
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll T ra n s la te U R I ( c o n s t S y s te m ::A n s iS trin g U R I ) ; v ir tu a l in t _ fa s tc a ll W rite C lie n t( v o id * B u f fe r , in t C o u n t) ;
v ir tu a l b o ol _ fa s tc a l l W r i te S tr ing( c o ns t S y s te m : : A n s i S tr ing A S tr ing);
v o id _ fas tc a l l E x tract F ield s ( c o n s t T C h a r S et & S ep arato rs , co n s t T C h a r S et & W h i te S p ace, c h a r * C on te n t , C la s s e s : : T S tr ings * S tr in g s ) ;
v o id _ fa s tc a ll E x tra c t C o n te n tF ie ld s ( C la s s e s ::T S tr in g s * S tr in g s ) ; vo id _ fa s tc a l l E x tra c t C o o k ie F ie lds ( C la s se s : : T S tr ings * S tr ings ) ; v o id _ fa s tc a ll E x tra c t Q u e ry F ie ld s ( C la s s e s ::T S tr in g s * S tr in g s ) ;
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll G e tF ie ld B y N a m e ( c o n s t A n s i S tr in g N a m e ) ;
_p rop e r ty T M e th odT y p e M e thodT y p e ;
_ p ro p e rty C la s s e s ::T S tr in g s * C o n te n tF ie ld s ;
_p rop e r ty C la s s e s : : T S tr ings * C o ok ie F ie ld s ;
_ p ro p e rty C la s s e s ::T S tr in g s * Q u e ry F ie ld s ;
_p rop e r ty S y s tem : : A ns i S tr ing M e thod;
_p rop e r ty S y s tem : : A ns i S tr ing P ro toc o l V e rs io n;
_ p ro p e rty S y s te m ::A n s iS trin g U R L ;
_ p ro p e rty S y s te m ::A n s iS trin g Q u e ry ;
_ p ro p e rty S y s te m ::A n s iS trin g P a th In fo ;
_ p ro p e rty S y s te m ::A n s iS trin g P a th T ra n s la te d ;
_p rop e r ty S y s tem : : A ns i S tr ing A u thoriz a t ion;
_p rop e r ty S y s tem : : A ns i S tr ing C a c h e C on tro l;
_ p ro p e rty S y s te m ::A n s iS trin g C o o k ie ;
_ p ro p e rty S y s te m ::T D a te T im e D a te ;
_ p ro p e rty S y s te m ::A n s iS trin g A c c e p t;
_p rop e r ty S y s tem : : A ns i S tr ing F rom ;
_ p ro p e rty S y s te m ::A n s iS trin g H o s t ;
_ p ro p e rty S y s te m ::T D a te T im e I f M o d ifie d S in c e ;
_ p ro p e rty S y s te m ::A n s iS trin g R e fe re r ;
_ p ro p e rty S y s te m ::A n s iS trin g U s e r A g e n t;
_ p ro p e rty S y s te m ::A n s iS trin g C o n te n tE n c o d in g ;
_ p ro p e rty S y s te m ::A n s iS trin g C o n te n tT y p e ;
_p rop e r ty in t C on te n t L e n g th ;
_ p ro p e rty S y s te m ::A n s iS trin g C o n te n tV e rs io n ;
_ p ro p e rty S y s te m ::A n s iS trin g C o n te n t;
_p rop e r ty S y s tem : : A ns i S tr ing C o n n e c t ion;
_p rop e r ty S y s tem : : A ns i S tr ing D e r ive dF ro m ;
_p rop e r ty S y s tem : : T D a te T im e E xp ire s ;
_ p ro p e rty S y s te m ::A n s iS trin g T itle ;
_p rop e r ty S y s tem : : A ns i S tr ing R e m o te A ddr;
_ p ro p e rty S y s te m ::A n s iS trin g R e m o te H o s t ;
_p rop e r ty S y s tem : : A ns i S tr ing S c r ip t N a m e ;
_ p ro p e rty in t S e rv e r P o r t ;
};
T W e b R e que s t对 象 的 作 用 就 是 描 述 和 解 释 H TTP 请 求 消 息 它 的 特 性 都 是 只读 的 要 说 明 的 是 由 于 H TTP 协 议 本 身 还 在 不 断 发 展 之 中 因 此 并 非 H TTP 请 求 消 息 中 的 所 有 信 息 都 可 以 通 过 T W e b R e que s t对 象 的 特 性 访 问 到 例 如
有 些 头 标 域 目 前 还 没 法 确 定 要 访 问 这 些 头 标 域 您 可 以 调 用
G e tF ie ld B y N a m e 函 数
1 6.5.3 TWeb Request 对 象 的 特 性 和 方 法
A cce p t 特 性
声 明 _ p ro p e r ty S y s te m : : A n s i S tr in g A ccep t;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 A cce p t头 标 A cce p t 头 标 用 于 描 述 客 户 希望 接 受 的 媒 体 类 型 例 如 假 设 客 户 请 求 在 HT M L 页 面 中 包 含 得 到 一 段 声 音 A cce p t头 标 可 能 是 这 样 的 字 符 串 a ud io /*; q= 0 .2, a u d io /ba s ic 表 示 希 望 的媒 体 类 型 是 a ud io / ba s ic
并 不 是 所 有 的 H TTP 请 求 消 息 都 有 A cce p t 头 标 如 果 H TTP 请 求 消 息 中 没 有
A cce p t头 标 A cce p t特 性 就 返 回 空 表 示 客 户 可 接 受 所 有 的 媒 体 类 型
A u th or iz atio n 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing A u thoriz a t ion;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 A u th o riz a tio n 头 标 A u th o riz a tio n 头 标 描 述客 户 的 授 权 信 息 这 样 W e b 服 务 器 应 用 程 序 就 可 以 根 据 客 户 的 权 限 限 制 客户 的 某 些 访 问
C a ch e C o n tro l 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C a c h e C on tro l;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 C ach e- C o n tro l头 标 C ach e- C o n tro l头 标 用于 描 述 客 户 发 出 的 缓 存 机 制 指 示 字 H TTP 1 . 1 标 准 中 定 义 了 若 干 个 指 示 字n o - ca ch e no- s tore m a x
- ag e= s s m a x - s ta le= s s 或 m a x - s ta le = s s m in- f re s h= s s 其 中 ss 是 秒 数 一 旦 缓 存 的 时 间 超 过 预 定 的 秒 数 就 认 为 H TTP 请 求 是 无效 的
C o n n ectio n 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C onne c tio n ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 C onne c tio n 头 标 C onne c tio n 头 标 用 于 描 述客 户 与 W e b 服 务 器 应 用 程 序 之 间 的 连 接 选 项 如 果 C onne c tio n 头 标 是K eep - A liv e 表 示 一 直 保 持 连 接 状 态 如 果 C onne c tio n 头 标 是 C lo s e
当 响 应 结 束 就 断 开 连 接
C o n te n t 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C on te n t;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 内 容 ( 未 分 解 ) 如 果 H TTP 请 求 方 法 是PO ST 该 内 容 就 是 要 发 送 到 W e b 服 务 器 的 信 息 您 可 以 通 过 C o n te n tF ie ld s 特 性 访 问 分 解 后 的 每 一 个 域 如 果 H TTP 请 求 方 法 是 PU T 该 内 容 就 是 要 替代 UR L 特 性 所 定 位 的 内 容
C o n te n t E nc o d in g 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C on te n t E nc od ing;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 C on te n t- E n c od ing 头 标 C on te n t- E n c od ing 头 标 用 于 描 述 H TTP 请 求 消 息 中 的 内 容 的 编 码 方 式 也 就 是 怎 样 压 缩 和 传 输扩 展 的 AS C I I 字 符 如 果 有 多 种 编 码 方 式 的 话 这 些 编 码 方 式 按 客 户 指 定 的顺 序 依 次 排 列 彼 此 之 间 用 逗 号 隔 开
C o n te n t F ie ld s 特 性
声 明 _prope r ty C la s s e s :: T S tr ings * C on te n t F ie ld s ;
这 个 特 性 是 T S tr ings 对 象 用 于 返 回 H TTP 请 求 消 息 中 的 内 容 ( 已 分 解 ) 其 中每 个 字 符 串 的 形 式 是 N a me = V a lu e 字 符 串 之 间 用 & 符 号 隔 开
C o n ten t L en g th 特 性
声 明 _prope r ty in t C on te n t L e ng th;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 C on te n t- L e ng th 头 标 C on te n t- L e n g th 头 标是 H TTP 请 求 消 息 中 内 容 的 长 度 如 果 C on te n t L e ng th 特 性 返 回 0 表 示 长 度 不确 定 这 可 能 是 因 为 H TTP 请 求 消 息 中 没 有 包 含 任 何 内 容 也 可 能 是 因 为客 户 无 法 确 定 内 容 的 长 度
C o n te n t Ty p e 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C on te n t T y p e ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 C on te n t- T y p e 头 标 C on te n t- T y p e 头 标 用 于
描 述 H TTP 请 求 消 息 中 内 容 的 媒 体 类 型 形 式 是 T y p e / S ubT y p e 例 如
te x t/h tm l
C o n ten t Vers io n 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C on te n t V e rs ion ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 C o n te n t- V e rs io n 头 标 C o n te n t- V e rs io n 头 标用 于 描 述 H TTP 请 求 消 息 中 内 容 的 版 本 大 多 数 H TTP 请 求 消 息 不 需 要 这 个头 标
C ook ie 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C ook ie ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 C ook ie 头 标 ( 未 分 解 ) C ook ie 头 标 用 于 跟踪 客 户 访 问 站 点 的 踪 迹 C ook ie 头 标 可 能 由 多 个 域 组 成 彼 此 之 间 用 分 号隔 开 通 过 C ook ie F ie ld s 特 性 可 以 访 问 C ook ie 头 标 的 每 一 个 域
C ook ie F ie ld s 特 性
声 明 _prope r ty C la s s e s :: T S tr ings * C ook ie F ie ld s ;
这 个 特 性 是 T S tr ings 对 象 用 于 访 问 H TTP 请 求 消 息 中 C ook ie 头 标 的 每 一 个域 每 个 字 符 串 的 形 式 是 N a m e = V a lu e 注 意 W e b 服 务 器 应 用 程 序 可 以 随便 给 状 态 变 量 取 名 但 不 能 是 C ook ie 中 的 域 名 换 句 话 说 C ook ie 中 的 域 名是 保 留 的
D a te 特 性
声 明 _prope r ty S y s te m : : T D a te T im e D a te ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 D a te 头 标 D a te 头 标 用 于 描 述 发 起 H TTP 请求 消 息 时 的 日 期 和 时 间 这 样 W e b 服 务 器 应 用 程 序 就 知 道 H TTP 请 求 消 息中 的 内 容 是 否 太 老
D eriv e d F ro m 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing D e r ive dF ro m ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 D e r ive d- F rom 头 标 D e r ive d- F ro m 头 标 用于 描 述 H TTP 请 求 消 息 中 内 容 的 UR I
E x p ir e s 特 性
声 明 _prope r ty S y s te m : : T D a te T im e E x p ire s ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 E xp ire s 头 标 E xp ire s 头 标 实 际 上 是 日 期 和时 间 如 果 超 过 了 这 个 日 期 和 时 间 就 认 为 H TTP 请 求 消 息 是 过 期 的 注 意如 果 H TTP 请 求 消 息 中 有 C ach e- C o n tro l 头 标 并 且 指 示 字 是 m a x - a g e 的 话
E xp ire s 特 性 无 效
F ro m 特 性
声 明 |
_prope r ty S y s te m : : A n s i S tr ing F rom ; |
||
---|---|---|---|
这 个 特 |
性 返 回 H TTP 请 求 消 息 中 的 F ro m 头 标 |
F ro m 头 标 很 有 用 |
它 是 客 户 的 |
e- m a i l地 址 W e b 服 务 器 应 用 程 序 可 以 记 录 访 问 者 或 者 与 客 户 联 系
H o s t 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing H o s t;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 H o s t头 标 H o s t头 标 是 客 户 正 在 请 求 的 主机 名 和 端 口 号 假 设 UR L 是
h ttp ://w w w . T S ite .c o m / a r t / g a l le r y . d l l/m a m m a ls ? a n im a l= dog& c o lo r= b la c k 主 机名 就 是 其 中 的 www .T S ite . c o m
I f M o d ifie dS inc e 特 性
声 明 _prope r ty S y s te m : : T D a te T im e I f M od if ie d S in c e ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 If-M o d ifie d -S in c e 头 标 W e b 服 务 器 应 用 程序 应 当 先 判 断 自 If-M o d ifie d -S in c e 头 标 设 定 的 日 期 和 时 间 以 来 客 户 所 请 求 的信 息 是 否 修 改 过 注 意 日 期 和 时 间 以 W e b 服 务 器 端 为 准
M e th o d 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing M e thod;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 M e thod 头 标 M e thod 头 标 用 于 描 述 客 户 发出 H TTP 请 求 的 目 的 H TTP 1 . 1 标 准 中 定 义 了 下 列 种 类 OP T IO N S GE T
HE AD PO ST PU T D E LETE TR A C E 等 对 于 W e b 服 务 器 应 用 程 序 来说 并 不 是 所 有 种 类 的 H TTP 请 求 都 需 要 响 应 不 过 GE T 和 HE AD 是 必 须 响应 的
M e th o d Ty p e 特 性
声 明 _prope r ty T M e thodT y p e M e thodT y p e ;
这 个 特 性 的 含 义 与 M e thod 特 性 是 基 本 一 致 的 只 是 用 法 不 同 M e thod 特 性是 字 符 串 M e thodT y p e 特 性 是 枚 举 常 量 可 以 直 接 用 来 比 较 而 字 符 串 的比 较 相 对 麻 烦 些
如 果 M e thodT y p e 特 性 返 回 的 是 m tA n y 就 得 用 M e thod 特 性 才 知 道 确 切 的 方法 类 型
Pa th I n fo 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing P a th In fo ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 UR L 中 的 入 口 路 径 例 如 假 设 UR L 是
h ttp : / /
www .T S i te .c o m /a r t/ g a lle r y . d ll/m a m m a ls ? a n im a l= dog& c o lo r= b la c k 入 口 路 径就 是 /m a m m a ls
P a th Tr an s late d 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing P a th T ra n s la te d ;
这 个 特 性 类 似 于 P a th In fo 特 性 不 同 的 是 它 还 包 含 完 整 的 路 径
P rotoc o l Ve r s io n 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing P ro toc o l V e rs ion;
这 个 特 性 返 回 客 户 端 所 使 用 的 H TTP 协 议 的 版 本 号 如 果 H TTP 协 议 的 版 本
号 不 同 H TTP 请 求 消 息 的 解 释 也 稍 有 不 同 例 如 对 于 H TTP 协 议 1 .0 来 说即 使 C onne c tio n 头 标 没 有 设 为 C lo s e 客 户 与 W e b 服 务 器 应 用 程 序 的 连 接也 不 是 永 久 的
Q u e r y 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing Q u e r y ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 UR L 的 参 数 |
部 分 |
假 设 |
UR L 是 |
|
---|---|---|---|---|
h ttp ://w w w . T S ite .c o m / a r t / g a lle r y .d ll / m a m m a ls ? a n im a l= dog& c o lo r= b la c k |
参 |
数 |
部 |
分 就 是 |
a n im a l= dog& c o lo r= b la c k |
Q u e r y F ie ld s 特 性
声 明 _prope r ty C la s s e s :: T S tr ings * Q u e ry F ie ld s ;
这 个 特 性 是 T S tr ings 对 象 返 回 已 分 解 的 H TTP 请 求 消 息 中 UR L 的 参 数 部 分每 个 字 符 串 的 形 式 是 N a m e = V a lu e
R e fe re r 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing R e fe r e r ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 R e fe re r 头 标 R e fe re r 头 标 是 资 源 的 UR I W e b 服 务 器 应 用 程 序 用 它 建 立 相 关 的 超 级 链 接
R e m o te A dd r 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing R e m o te A ddr;
这 个 特 性 返 回 客 户 端 的 IP 地 址 例 如 127 .8 .34 .19
R e m o te H o s t 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing R e m o te H o s t;
这 个 特 性 返 回 客 户 端 的 主 机 名 ( 不 包 括 路 径 ) 例 如 w w w . borla nd .c o m
S crip t N a m e 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing S c r ip t N a m e ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 UR L 的 脚 本 部 分 假 设 UR L 是
h ttp ://w w w . T S ite .c o m / a r t / g a lle r y .d l l/ m a m m a ls ? a n im a l= dog& c o lo r= b la c k 脚 本部 分 就 是 /a r t/g a lle r y
S erv e r P o r t 特 性
声 明 _prope r ty in t S e rv e r P o r t;
这 个 特 性 返 回 W e b 服 务 器 上 检 索 H TTP 请 求 消 息 的 端 口 号
T it le 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing T i tle ;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 T itle 头 标 T itle 头 标 描 述 客 户 要 请 求 的 信息 的 头 标
URL 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing U R L ;
前 面 已 多 次 提 到 这 个 特 性 在 实 际 应 用 中 一 般 要 把 UR L 分 解 成 H o s t Sc r ip t N a m e P a th In fo 和 Q u e ry 等 四 大 部 分
U s er A g e n t 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing U s e r A g e n t;
这 个 特 性 返 回 H TTP 请 求 消 息 中 的 U s e r - A ge nt头 标 (W e b 浏 览 器 的 名 称 和 版 本号 )
E x tra c t C o n ten t F ie ld s 函 数
声 明 vo id _fa s tc a ll E x tra c t C on te n t F ie ld s ( C la s s e s :: T S tr ings * S tr ings ) ;
在 M e thodT y p e 特 性 返 回 m tP o s t的 前 提 下 这 个 函 数 把 H TTP 请 求 消 息 中 的 内容 分 解 成 一 个 个 域 存 到 S tr ings 参 数 中 ( 假 设 域 与 域 之 间 用 & 隔 开 )
E x tra c t C o o k ie F ie ld s 函 数
声 明 vo id _fa s tc a ll E x tra c t C ook ie F ie ld s ( C la s s e s : : T S tr ings * S tr ings ) ;
这 个 函 数 把 H TTP 请 求 消 息 中 的 C ook ie ( 如 果 有 的 话 ) 分 解 成 一 个 个 域 存 到
S tr ings 参 数 中 ( 假 设 域 与 域 之 间 用 分 号 隔 开 )
E x tra c t F ie ld s 函 数
声 明 v o id _ fastcall E x tractF ield s(co n st T C h arS et & S ep arato rs, co n st T C h arS et
& W h ite S p ace, ch ar * C o n ten t, C lasses::T S trin g s* S trin g s);
这 个 函 数 用 于 把 由 多 个 域 组 成 的 字 符 串 分 解 为 一 个 个 域 其 中 Se p a ra to rs 参 数 指 定 一 个 字 符 集 合 该 集 合 中 的 字 符 用 于 分 隔 域 W h iteS p ace 参 数 也 是字 符 集 合 该 集 合 中 的 字 符 是 要 忽 略 的 C on te n t参 数 就 是 要 分 解 的 字 符 串S tr ings 参 数 用 于 存 储 分 解 后 的 域
E x tr a c t Q u ery F ield s 函 数
声 明 vo id _fa s tc a ll E x tra c t Q ue r y F ie lds ( C la s s e s :: T S tr ings * S tr ings ) ;
这 个 函 数 把 H TTP 请 求 消 息 中 的 Q u e ry 分 解 为 一 个 个 域 存 到 S tr ings 参 数 中 假设 域 与 域 之 间 用 分 号 隔 开
G e t F ie ld B y N a m e 函 数
声 明 v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll G e tF ie ld B y N a m e ( c o n s t A n s i S tr in g N a m e ) ;
- 般
来 说 您 可 以 由 T W e b R e que s t对 象 来 访 问 H TTP 请 求 消 息 中 的 头 标 不
过 由 于 H TTP 协 议 还 在 不 断 地 发 展 C+ + Bu ild e r 3 不 能 保 证 H TTP 协 议 的 每一 个 头 标 都 能 由 T W e b R e que s t对 象 来 访 问 这 个 函 数 允 许 通 过 名 称 从 H TTP 请 求 消 息 中 返 回 指 定 的 头 标
R e a d C lie n t 函 数
声 明 v ir tu a l in t _ fa s tc a l l R e a d C lie n t( v o id * B u f fe r , in t C o u n t);
这 个 函 数 从 H TTP 请 求 消 息 的 内 容 中 读 取 C ount个 字 节 到 Bu f fe r 缓 冲 区 中 并
返 回 实 际 返 回 的 字 节 数
R e a dS tr in g 函 数
声 明 v ir tua l S y s te m :: A ns i S tr ing _fa s tc a ll R e a d S tr ing( in t C oun t) ;
这 个 函 数 从 H TTP 请 求 消 息 的 内 容 中 读 取 C oun t个 字 节 到 一 个 字 符 串 中
W r ite C lie n t 函 数
声 明 v ir tua l in t _fa s tc a l l W r i te C l ie n t( vo id *B uffe r , in t C oun t) ;
这 个 函 数 从 B u ffe r 缓 冲 区 中 取 C ount个 字 节 发 送 给 客 户 并 返 回 实 际 写 的 字节 数
W r ite S tr in g 函 数
声 明 v ir tu a l b o o l _ fa s tc a ll W rite S trin g ( c o n s t S y s te m ::A n s iS trin g A S trin g ) ;
这 个 函 数 把 一 个 字 符 串 发 送 给 客 户 如 果 成 功 就 返 回 T ru e
1 6.5.4 TISA PIRequest 对 象
对 于 IS A P I或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 描 述 和 解 释 H TTP 请 求消 息 的 是 T ISA P IR e q u e s t对 象 它 在 IS A P IA P P 单 元 中 是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T IS A P IR e q u e s t : p u b lic H ttp a p p ::T W e b R e q u e s t
{
priv a te :
// 私有的成 员此处省略
pub l ic :
_ fa s tc a ll T IS A P IR e q u e s t( Isa p i2 ::P E X T E N S IO N _ C O N T R O L _ B L O C K A E C B ) ; v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll G e tF ie ld B y N a m e ( c o n s t A n s i S tr in g N a m e ) ; v ir tu a l in t _ fa s tc a ll R e a d C lie n t( v o id * B u ffe r , in t C o u n t);
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll R e a d S tr in g ( in t C o u n t);
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll T ra n s la te U R I ( c o n s t A n s i S tr in g U R I ) ; v ir tu a l in t _ fa s tc a ll W rite C lie n t( v o id * B u f fe r , in t C o u n t) ;
v ir tu a l b o ol _ fa s tc a l l W r i te S tr ing( c o ns t S y s te m : : A n s i S tr ing A S tr ing);
_ p ro p e r ty Is a p i 2 : : P E X T E NS ION _ C ONT R O L _ B L OC K E C B ;
_fa s tc a l l v ir tua l ~ T IS A P IR e q ue s t( v o id) { }
};
可 以 看 出 T ISA P IR e q u e s t 是 从 T W e b R e que s t 继 承 下 来 的 最 主 要 的 变 化 是增 加 了 EC B 特 性 并 且 重 载 了 构 造 函 数 用 于 创 建 T ISA P IR e q u e s t对 象 的 实 例
EC B 特 性
声 明 _ p ro p e r ty Is a p i 2 :: P E X T E N S ION _ C ONT R O L _ B L OC K E C B ;
前 面 讲 过 W e b 服 务 器 与 IS A P I 或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 之 间 通过 一 个 结 构 来 传 递 H TTP 请 求 消 息 这 就 是T E X T E N S IO N _ CO N T RO L _ BL O C K 结 构 EC B 特 性 可 以 返 回 指 向 该 结 构 的指 针 要 说 明 的 是 在 实 际 编 程 中 您 并 不 一 定 需 要 直 接 与 EC B 打 交 道因 为 C+ + Bu ild e r 3 已 经 把 H TTP 请 求 消 息 中 的 头 标 分 解 出 来 了 关 于T E X T E N S IO N _ CO N T RO L _ BL O C K 结 构 您 可 以 查 阅 C+ + Bu ild e r 3 的 帮 助
构 造 函 数
声 明 _ fa s tc a l l T IS A P IR e q u e s t( Is a p i2 :: P E X T E N S IO N _ C ONT R O L _ B L OC K A E CB );
构 造 函 数 用 于 创 建 T IS A P IR e que s t对 象 的 实 例 要 说 明 的 是 您 并 不 需 要 调
用 构 造 函 数 因 为 当 IS A P I 或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 检 索 到 一 个H TTP 请 求 消 息 就 会 自 动 创 建 T IS A P IR e que s t对 象 这 里 只 是 想 让 您 知 道 调 用 构 造 函 数 时 传 递 了 EC B 块
1 6.5.5 TCGI Request 对 象
对 于 CG I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 描 述 和 解 释 H TTP 请 求 消 息 的 是
TC G IR e q u e s t对 象 它 在 CG IA P P 单 元 中 是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T C G IR e q u e s t : p u b lic H ttp a p p ::T W e b R e q u e s t
{
priv a te :
// 私有的成 员此处省略
pro te c te d:
// 保护的成 员此处省略
pub l ic :
_ fa s tc a ll T C G IR e q u e s t( v o id ) ;
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll G e tF ie ld B y N a m e ( c o n s t A n s i S tr in g N a m e ) ; v ir tu a l in t _ fa s tc a ll R e a d C lie n t( v o id * B u ffe r , in t C o u n t);
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll R e a d S tr in g ( in t C o u n t);
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll T ra n s la te U R I ( c o n s t A n s i S tr in g U R I ) ; v ir tu a l in t _ fa s tc a ll W rite C lie n t( v o id * B u f fe r , in t C o u n t) ;
v ir tu a l b o ol _ fa s tc a l l W r i te S tr ing( c o ns t S y s te m : : A n s i S tr ing A S tr ing);
};
可 以 看 出 TC G IR e q u e s t是 从 T W e b R e que s t 继 承 下 来 的 它 的 特 性 和 方 法 可以 参 见 前 面 关 于 T W e b R e que s t对 象 的 介 绍
1 6.5.6 TWin CGIRequest 对 象
对 于 W in - C G I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 描 述 和 解 释 H TTP 请 求 消 息的 是 T W in C G IR e que s t对 象 它 在 CG IA P P 单 元 中 是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T W in C G IR e q u e s t : p u b lic C g ia p p ::T C G IR e q u e s t
{
priv a te :
// 私有的成 员此处省略
pub l ic :
_ fa s tc a ll T W in C G IR e q u e s t( S y s te m ::A n s iS tr in g In iF ile N a m e , S y s te m ::A n s iS trin g C o n te n tF ile , S y s te m ::A n s iS trin g O u tp u t F ile ) ;
_ fa s tc a ll v ir tu a l ~ T W in C G IR e q u e s t( v o id ) ;
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll G e tF ie ld B y N a m e ( c o n s t A n s i S tr in g N a m e ) ; v ir tu a l in t _ fa s tc a ll R e a d C lie n t( v o id * B u ffe r , in t C o u n t);
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll R e a d S tr in g ( in t C o u n t);
v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll T ra n s la te U R I ( c o n s t A n s i S tr in g U R I ) ;
v ir tu a l in t _ fa s tc a ll W rite C lie n t( v o id * B u f fe r , in t C o u n t) ;
v ir tu a l b o ol _ fa s tc a l l W r i te S tr ing( c o ns t S y s te m : : A n s i S tr ing A S tr ing);
};
可 以 看 出 T W in C G IR e que s t是 从 TC G IR e q u e s t继 承 下 来 的 它 的 特 性 和 方 法可 以 参 见 前 面 关 于 T W e b R e que s t对 象 的 介 绍
1 6.6 HT TP 响 应 消 息
C+
- Bu ild e r 3 用 T W e b R e s pons e 对 象 来 描 述 H TTP 响 应 消 息 当 W e b 服 务 器 应用 程 序 检 索 到 一 个 H TTP 请 求 消 息 它 就 创 建 一 个 T W e b R e que s t对 象 来 描 述和 解 释 H TTP 请 求 消 息 同 时 还 创 建 一 个 T W e b R e s pons e 对 象 准 备 响 应 客 户 的请 求
1 6.6. 1 怎 样 建 立 HTTP 响 应 消 息
大 多 数 情 况 下 客 户 请 求 的 是 HT M L 页 面 也 就 是 说 H TTP 响 应 消 息 中 应当 包 含 内 容 因 此 您 至 少 要 在 一 个 O n A c tio n 事 件 的 句 柄 中 对 T W e b R e s pons e 对 象 的 C on te n t 特 性 或 C o n te n tS tre a m 特 性 赋 值 不 过 有 的 情 况 下 只 需 要填 充 一 些 头 标 就 够 了 不 需 要 内 容
要 对 C on te n t特 性 或 C o n te n tS tre a m 特 性 赋 值 您 既 可 以 用 事 先 设 计 到 的 HT M L 代 码 也 可 以 用 T C u s to m P ag eP ro d u cer 的 派 生 对 象 如 T P a g e P roduc e r 或T D a ta S e t T a b le P roduc e r 自 动 生 成 页 面 然 后 再 赋 值 给 C on te n t 特 性 或C o n te n tS tre a m 特 性
C on te n t与 C o n te n tS tre a m 的 区 别 是 C on te n t只 能 是 HT M L 代 码 C+ + Bu ild e r 3 并 不 检 查 这 些 代 码 的 语 法 它 只 把 这 些 代 码 当 作 一 个 个 字 符 串 如 果 HT M L 代 码 事 先 存 在 一 个 文 件 中 这 时 候 用 C o n te n tS tre a m 比 较 方 便 因 为 您 可 以用 T F ile S tre a m 对 象 读 写 文 件 请 注 意 两 点 一 是 读 写 完 毕 后 您 不 需 要 删 除T F ile S tre a m 对 象 T W e b R e s pons e 对 象 会 自 动 删 除 它 二 是 如 果 C o n ten t S tream 特 性 有 值 的 话 C on te n t特 性 就 被 忽 略
1 6.6.2 怎 样 传 递 HTTP 响 应 消 息
H TTP 响 应 消 息 首 先 传 递 给 W e b 服 务 器 再 由 W e b 服 务 器 传 递 给 客 户 对 于不 同 类 型 的 W e b 服 务 器 应 用 程 序 来 说 传 递 H TTP 响 应 消 息 的 方 式 也 是 不 同的
对 于 W in - C G I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 它 是 把 HT M L 页 面 写 到 一 个文 件 中 把 其 它 信 息 写 到 另 一 个 文 件 中 然 后 把 这 两 个 文 件 的 位 置 传 递 给W e b 服 务 器 再 由 W e b 服 务 器 打 开 这 两 个 文 件 把 HT M L 页 面 传 递 给 客 户
对 于 IS A P I 或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 它 是 直 接 把 HT M L 页面 和 其 它 信 息 传 递 给 W e b 服 务 器 再 由 W e b 服 务 器 传 递 给 客 户
从 这 里 可 以 看 出 W in - C G I 类 型 的 W e b 服 务 器 应 用 程 序 可 能 要 频 繁 地 写 磁盘 而 IS A P I或 NS A P I类 型 的 W e b 服 务 器 应 用 程 序 就 没 有 这 方 面 的 开 销
1 6.6.3 自 己 传 递 HTTP 响 应 消 息
- 般
来 说 您 只 要 建 立 H TTP 响 应 消 息 就 够 了 并 不 需 要 考 虑 怎 样 传 递 H TTP
响 应 消 息 因 为 W e b 服 务 器 应 用 程 序 会 自 动 传 递 H TTP 响 应 消 息 如 果 您 能
够 确 信 已 经 最 终 完 成 了 响 应 您 也 可 以 自 己 发 送 H TTP 响 应 消 息
T W e b R e s pons e 对 象 提 供 了 两 个 方 法 S e ndR e s pon s e 和 S e n d R ed irect 其 中
S e ndR e s pon s e 用 于 发 送 H TTP 响 应 消 息 包 括 内 容 和 所 有 的 头 标 S e n d R ed irect 用 于 把 客 户 的 请 求 重 新 定 向 注 意 如 果 响 应 是 分 几 步 进 行 的 在 最 终 完成 响 应 之 前 不 要 发 送 H TTP 响 应 消 息 因 为 这 时 候 的 H TTP 响 应 消 息 是 不 完整 的
T W e b R e s pons e 只 是 个 虚 拟 基 类 对 于 不 同 类 型 的 W e b 服 务 器 应 用 程 序 来 说描 述 H TTP 响 应 消 息 的 实 际 上 是 T W e b R e s pons e 的 派 生 类 例 如 对 于 IS A P I 或 NS AP I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 就 是 T ISA P IR e s p o n s e 对 于 CG I 类型 的 W e b 服 务 器 应 用 程 序 来 说 就 是 T C G IR e s pon s e 对 于 W in - C G I类 型 的 W e b 服 务 器 应 用 程 序 来 说 就 是 T W in C G IR e s pons e
1 6.6.4 TWeb Response 是 怎 样 声 明 的
T W e b R e s pons e 只 是 一 个 虚 拟 基 类 对 于 不 同 类 型 的 W e b 服 务 器 应 用 程 序 来说 操 纵 H TTP 响 应 消 息 的 实 际 上 是 T W e b R e s pons e 的 派 生 类 对 于 IS A P I 或NS AP I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 就 是 T ISA P IR e s p o n s e 对 于 CG I 类 型的 W e b 服 务 器 应 用 程 序 来 说 就 是 T C G IR e s pon s e 对 于 W in - C G I类 型 的 W e b 服务 器 应 用 程 序 来 说 就 是 T W in C G IR e s pons e
在 H TTP A P P 单 元 中 T W e b R e s pons e 是 怎 样 声 明 的
clas s P A S C A L IM P L E M E N T A T IO N T W eb R e s p o n s e : p u b l ic S y s te m : : T O b ject
{
priv a te :
// 私有的成 员此处省略
pro te c te d:
// 保护的成 员此处省略
pub l ic :
_ fas tc all T W eb R e s p o n s e ( T W e b R e q u e s t* H T T P R e q u es t) ;
_ fa s tc a ll v ir tu a l ~ T W e b R e s p o n s e ( v o id ) ;
S y s te m : : A n s i S tr in g _ fa s tc a ll G e tC u s to m H e a d e r ( c o n s t S y s te m ::A n s iS trin g N a m e ) ; v ir tu a l v o id _ fa s tc a l l S e n d R e sp o n s e ( vo id) = 0 ;
v ir tu a l v o id _ fa s tc a l l S e n d R e d ire c t( c on s t S y s te m : : A n s i S tr ing U R I ) = 0 ; v ir tu a l v o id _ fa s tc a ll S e n d S tre a m ( C la s s e s ::T S tre a m * A S tre a m ) = 0 ;
vo id _fa s tc a l l S e t C ook ie F ie ld ( C la s se s : : T S tr ings * V a lu e s , c ons t A n s i S tr ing A D o m a in , co n s t S y s tem : : A n s i S tr in g A P ath , T D ateT im e A E x p ire s , bo o l A S ec u re);
vo id _ fa s tc a l l S e t C us to m H e a d e r ( c on s t A n s i S tr ing N a m e , c o n s t A n s i S tr ing V a lu e ) ;
_p rop e r ty T C ook ie C o lle c t io n * C o ok ie s = { re a d = F C o o k ie s } ;
_ p ro p e r ty T W eb R e q u es t* H T T P R e q u es t = {read = F H T T P R e q u es t} ;
_ p ro p e rty S y s te m ::A n s iS trin g V e r s io n ;
_p rop e r ty S y s tem : : A ns i S tr ing R e a s onS tr in g;
_ p ro p e rty S y s te m ::A n s iS trin g S e rv e r ;
_ p ro p e rty S y s te m ::A n s iS trin g W W W A u th e n tic a te ;
_ p ro p e rty S y s te m ::A n s iS trin g R e a lm ;
_ p ro p e rty S y s te m ::A n s iS trin g A llo w ;
_p rop e r ty S y s tem : : A ns i S tr ing L o c a t ion;
_ p ro p e rty S y s te m ::A n s iS trin g C o n te n tE n c o d in g ;
_ p ro p e rty S y s te m ::A n s iS trin g C o n te n tT y p e ;
_ p ro p e rty S y s te m ::A n s iS trin g C o n te n tV e rs io n ;
_p rop e r ty S y s tem : : A ns i S tr ing D e r ive dF ro m ;
_ p ro p e rty S y s te m ::A n s iS trin g T itle ;
_p rop e r ty in t S ta tu s C ode ;
_p rop e r ty in t C on te n t L e n g th ;
_ p ro p e rty S y s te m ::T D a te T im e D a te ;
_p rop e r ty S y s tem : : T D a te T im e E xp ire s ;
_p rop e r ty S y s tem : : T D a te T im e L a s t M od if ie d ;
_ p ro p e rty S y s te m ::A n s iS trin g C o n te n t;
_p rop e r ty C la s s e s : : T S tre a m * C on te n t S tre a m ;
_p rop e r ty S y s tem : : A ns i S tr ing L ogM e s s a ge ;
_p rop e r ty C la s s e s : : T S tr ings * C u s tom H e a d e rs ;
};
1 6.6.5 TWeb Response 对 象 的 特 性 和 方 法
A llo w 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing A llo w ;
这 个 特 性 向 客 户 表 明 您 这 个 W e b 服 务 器 应 用 程 序 可 以 响 应 哪 些 方 法 种 类 的
H TTP 请 求 A llo w 是 个 字 符 串 方 法 名 称 之 间 用 逗 号 隔 开 其 中 至 少 要 包
含 GE T 和 HE AD
C o n te n t 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C on te n t;
这 个 特 性 很 重 要 用 于 指 定 要 传 递 给 客 户 的 H TTP 响 应 消 息 中 的 内 容 一 般就 是 HT M L 页 面 不 过 有 些 类 型 的 请 求 并 不 需 要 H TTP 响 应 消 息 中 包 含 内容 因 此 像 OP T IO N S HE AD PO S T PU T D ELE TE TR A C E 等 类 型
的 请 求 就 不 需 要 设 置 C on te n t特 性
C o n te n t S tre a m 特 性
声 明 _prope r ty C la s s e s :: T S tre a m * C on te n t S tre a m ;
这 个 特 性 与 C on te n t特 性 相 似 也 是 用 于 指 定 传 递 给 客 户 的 H TTP 响 应 消 息 中的 内 容 不 同 的 是 C o n te n tS tre a m 适 合 于 从 流 中 获 取 内 容 而 C on te n t特 性是 个 字 符 串
C o n te n t E nc o d in g 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C on te n t E nc od ing;
这 个 特 性 用 于 设 置 H TTP 响 应 消 息 中 内 容 的 编 码 方 式 编 码 方 式 之 间 用 逗 号隔 开
C o n ten t L en g th 特 性
声 明 _prope r ty in t C on te n t L e ng th;
这 个 特 性 用 于 给 出 H TTP 响 应 消 息 中 内 容 的 长 度 ( 字 节 数 ) 如 果 H TTP 响 应 消息 中 没 有 内 容 或 者 长 度 是 未 知 的 就 把 C on te n t L e ng th 特 性 设 为 0
C o n te n t Ty p e 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C on te n t T y p e ;
这 个 特 性 设 置 H TTP 响 应 消 息 中 内 容 的 媒 体 类 型 形 式 是 T y p e / S ubT y p e 例如 te x t/h tm l
C o n ten t Vers io n 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C on te n t V e rs ion ;
这 个 特 性 用 于 设 置 H TTP 响 应 消 息 中 内 容 的 版 本 其 含 义 与 C on te n t T y p e 特 性所 指 定 的 媒 体 类 型 有 关 假 设 媒 体 类 型 是 te x t/h tm l C o n ten t V ers io n 就 是 HT M L 语 言 的 版 本
C ook ie s 特 性
声 明 _prope r ty T C o ok ie C o lle c t ion* C ook ie s ;
C ook ie s 是 T C ook ie C o lle c tio n 对 象 用 于 收 集 和 管 理 HT T P 响 应 消 息 中 的
C ook ie 每 个 C ook ie 是 一 个 T C ook ie 对 象 程 序 示 例 如 下
/ /-
boo l S e c u re C o o k ie s ( T W e b R e sp o n s e *R e sp o ns e )
{
fo r (in t I = 0 ; I < R e s p o n s e -> C o o k ie s -> C o u n t ; I+ + )
if ( R es p o n s e -> C oo k ies -> I tem s [ I ]-> S ecu re = = tru e ) re tu rn tru e ;
re tu rn fa lse ;
}
Cu s to m H e a d e r s 特 性
声 明 _prope r ty C la s s e s :: T S tr ings * C u s to m H e a d e rs ;
如 果 您 要 向 H TTP 响 应 消 息 中 加 入 一 个 头 标 但 是 T W e b R e s pons e 对 象 却 没 有提 供 相 应 的 特 性 此 时 就 要 用 C u s to m H ead ers 自 己 定 义 一 组 头 标 每 个 头 标的 形 式 是 H ead e r N a m e = V alu e 其 中 H ead er N a m e 是 头 标 名 V a lu e 是 该 头标 的 值
D a te 特 性
声 明 _prope r ty S y s te m : : T D a te T im e D a te ;
在 开 始 发 送 H TTP 响 应 消 息 之 前 把 D a te 特 性 设 为 当 前 的 日 期 和 时 间 因 为有 的 客 户 希 望 知 道 信 息 是 否 陈 旧
D eriv e d F ro m 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing D e r ive dF ro m ;
这 个 特 性 用 于 通 知 客 户 H TTP 响 应 消 息 中 内 容 的 UR I H TTP 响 应 消 息 中 的 内容 一 般 取 自 于 服 务 器 本 身 的 UR L 但 也 可 能 取 自 于 其 它 路 径 这 时 候 就 要设 置 D e r ive dF ro m 特 性
E x p ir e s 特 性
声 明 _prope r ty S y s te m : : T D a te T im e E x p ire s ;
这 个 特 性 设 定 一 个 日 期 和 时 间 如 果 客 户 收 到 H TTP 响 应 消 息 超 过 这 个 日 期和 时 间 客 户 可 以 认 为 信 息 是 过 时 的 和 非 法 的
H TTP R e q u e s t 特 性
声 明 _prope r ty T W e b R e que s t* H T T P R e qu e s t;
这 个 只 读 的 特 性 返 回 当 前 正 在 处 理 的 H TTP 请 求 消 息 这 样 您 就 可 以 分 析 其中 的 头 标 和 内 容 从 而 作 出 不 同 的 响 应 当 然 如 果 是 在 O n A c tio n 事 件 中您 可 以 通 过 R e que s t参 数 直 接 访 问 H TTP 请 求 消 息 无 须 借 助 于 T W e b R e s pons e 对 象 的 H TTP R e q u e s t特 性
La s t M o d ifie d 特 性
声 明 _prope r ty S y s te m : : T D a te T im e L a s t M o d if ie d ;
这 个 特 性 用 于 表 明 H TTP 响 应 消 息 中 内 容 的 最 后 修 改 日 期 和 时 间 这 样 客 户就 可 以 先 用 HE AD 方 法 请 求 头 标 然 后 判 断 信 息 是 否 最 新 如 否 就 不 必 传输 内 容 了
Lo c a tio n 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing L o c a tion ;
如 果 需 要 由 其 它 UR I共 同 参 与 完 成 响 应 应 当 设 置 L o c a tio n 特 性 为 该 UR I
L og M e s s ag e 特 性
声 明 |
_prope r ty S y s te m : : A n s i S tr ing L ogM e s s a ge ; |
||
---|---|---|---|
这 个 特 |
性 用 于 在 H TTP 响 应 消 息 中 附 带 一 个 描 述 性 的 字 符 串 |
例 如 |
您 可 以 |
把 它 设 |
为 处 理 客 户 请 求 的 UR I以 及 内 容 的 日 期 和 时 间 |
R e a lm 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing R e a lm ;
如 果 客 户 的 访 问 未 被 授 权 或 需 要 支 付 费 用 W e b 服 务 器 应 用 程 序 返 回 401 或
402 此 时 应 当 设 置 R ealm 特 性 通 知 客 户 哪 些 UR I需 要 口 令 或 支 付 费 用
R e a s o nS tr in g 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing R e a s onS tr ing;
您 可 以 通 过 S ta tu s C o d e 特 性 设 置 状 态 代 码 用 R eas o n S tr in g 特 性 给 每 个 状 态代 码 附 带 一 个 简 短 的 说 明
S erv e r 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing S e rv e r ;
这 个 特 性 用 于 在 H TTP 响 应 消 息 中 给 出 W e b 服 务 器 应 用 程 序 的 名 称 和 版 本号 形 式 为 程 序 名 / 版 本 号
S ta tus C o d e 特 性
声 明 _prope r ty in t S ta tus C ode ;
每 一 个 H TTP 响 应 消 息 必 须 包 含 一 个 状 态 代 码 以 表 明 响 应 状 态 这 是 通 过
S ta tu s C o d e 特 性 设 置 的 H TTP 协 议 中 定 义 了 若 干 个 标 准 的 状 态 代 码
100( 继 续 处 理 ) 101( 切 换 协 议 ) 200( O K ) 201( 已 创 建 ) 20 2 ( 已 接 受 )
203( 未 授 权 的 信 息 ) 204( 没 有 内 容 ) 205( 重 设 内 容 ) 206( 部 分 内 容 ) 300( 多项 选 择 ) 301( 永 久 删 除 ) 302( 临 时 删 除 ) 303( 参 见 ) 304( 未 修 改 ) 305( 使用 代 理 ) 400( 错 误 的 请 求 ) 401( 未 授 权 ) 402( 需 支 付 费 用 ) 403( 禁 止 ) 404( 未找 到 ) 405( 不 允 许 的 方 法 ) 406( 不 可 接 受 ) 407( 需 代 理 授 权 ) 408( 请 求 超时 ) 409( 冲 突 ) 410 ( G one ) 411( 需 要 给 出 长 度 ) 412( 预 处 理 失 败 ) 413( 实体 太 大 ) 414( U R I太 大 ) 415 ( 不 支 持 的 媒 体 类 型 ) 500( 服 务 器 内 部 出 错 )
501( 未 实 现 ) 502( 错 误 的 网 关 ) 503( 不 能 提 供 服 务 ) 504( 网 关 超 时 ) 505( 不支 持 的 H TTP 版 本 )
除 |
了 上 |
述 标 准 的 |
状 态 代 码 以 外 您 也 可 以 定 义 自 己 的 状 态 代 码 每 |
个 状 |
态 |
---|---|---|---|---|---|
代 |
码 都 |
是 三 位 数 |
最 高 的 一 位 表 示 响 应 类 别 1 表 示 客 户 的 请 求 已 收 |
到 |
但 |
未 |
能 完 |
全 处 理 |
2 表 示 客 户 的 请 求 已 收 到 并 且 已 成 功 地 处 理 3 表 |
示 需 |
要 |
客 |
户 进 |
一 步 提 示 |
才 能 最 终 完 成 响 应 4 表 示 客 户 的 请 求 不 能 被 识 别 |
5 表 |
示 |
客 户 的 请 求 是 合 法 的 但 服 务 器 无 法 处 理
您 可 以 给 每 一 个 状 态 代 码 附 带 一 个 字 符 串 作 为 简 短 的 说 明 这 是 通 过R eas o n S tr in g 特 性 实 现 的 不 过 对 于 预 定 义 的 状 态 代 码 您 不 要 再 附 带 说明
T it le 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing T i tle ;
这 个 特 性 用 于 给 出 H TTP 响 应 消 息 中 内 容 的 头 标 通 常 就 是 内 容 的 主 题
Ver s io n 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing V e rs ion;
这 个 特 性 给 出 H TTP 协 议 的 版 本 号
G e t C u s tom H e a d e r 函 数
声 明 S y s te m : : A n s i S tr in g _ fa s tc a l l G e tC u s to m H e a d e r ( c o n s t S y s te m ::A n s iS trin g N a m e ) ;
这 个 函 数 返 回 某 个 自 定 义 的 头 标 的 值 N a m e 参 数 是 头 标 的 名 称
Se nd R e d ire c t 函 数
声 明 v ir tu a l v o id _ fa s tc a ll S e n d R e d ire c t( c o n s t S y s te m ::A n s iS trin g U R I ) ;
如 果 您 需 要 把 客 户 的 请 求 重 新 定 向 到 其 它 UR I 就 要 调 用 S e n d R ed irect函 数调 用 S e n d R ed irec t 函 数 相 当 于 先 把 S ta tu s C o d e 特 性 设 为 301 把 Lo c a tio n 特 性设 为 UR I参 数 然 后 调 用 S e ndR e s pon s e 发 送 H TTP 响 应 消 息
Se nd R e s po ns e 函 数
声 明 v ir tua l vo id _fa s tc a ll S e ndR e s pons e ( vo id);
如 果 您 想 自 己 发 送 H TTP 响 应 消 息 就 调 用 S e ndR e s pon s e 函 数
Se ndS tre a m 函 数
声 明 v ir tu a l v o id _ fa s tc a ll S e n d S tre a m ( C la s s e s ::T S tre a m * A S tre a m ) ;
如 果 H TTP 响 应 消 息 中 的 内 容 是 以 流 的 形 式 给 出 的 调 用 S e ndS tre a m 来 发 送H TTP 响 应 消 息 就 更 方 便 些 注 意 在 调 用 S e ndS tre a m 之 前 先 要 调 用S e ndR e s pon s e
S e t C ook ie F ie ld 函 数
声 明 vo id _fa s tc a ll S e t C ook ie F ie ld ( C la s s e s :: T S tr ings * V a lu e s , c ons t S y s te m : : A n s i S tr ing A D o m a in, c ons t S y s te m : : A n s i S tr ing A P a th, S y s te m : : T D a te T im e A E xp ire s , bool A S e c ure ) ;
这 个 函 数 在 H TTP 响 应 消 息 中 加 入 一 个 C ook ie 头 标 V a lu e s 参 数 就 是 要 加 入
的 C ook ie 头 标 它 是 T S tr ings 对 象 其 中 每 个 字 符 串 的 形 式 是 N a m e / V a lu e
AD o m a in 参 数 和 AP a th 参 数 组 成 C ook ie 要 发 送 给 哪 个 UR L A E xp ire s 参 数 给出 一 个 日 期 和 时 间 超 过 这 个 时 间 C ook ie 就 是 无 效 的 如 果 A S ecu re 参 数 设为 T ru e 表 示 只 在 安 全 连 接 的 情 况 下 传 递 C ook ie
Se t C us to m H e a de r 函 数
声 明 vo id _fa s tc a ll S e t C us to m H e a d e r ( c ons t S y s te m : : A n s i S tr ing N a m e , c o ns t S y s te m : : A n - s iS trin g V a lu e ) ;
这 个 函 数 向 自 定 义 的 头 标 即 C u s to m H ead ers 特 性 中 加 入 一 个 新 的 头 标 或 者
改 变 已 有 头 标 的 值 N a m e 参 数 是 头 标 的 名 称 V a lu e 参 数 是 头 标 的 值
1 6.6.6 TISA PIResponse 对 象
对 于 IS A P I或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 操 纵 H TTP 响 应 消 息 的是 T IS A P IR e s pons e 对 象 在 IS A P IA P P 单 元 中 T ISA P IR e s p o n s e 是 这 样 声 明的
c la s s P A S C A L IM P L E M E N T A T IO N T IS A P IR e s pon s e : pub lic H ttp a pp :: T W e bR e s pons e
{
p r iv a te:
// 私 有 的 成 员 此 处 省 略
pro te c te d:
// 保 护 的 成 员 此 处 省 略
pub lic :
_fa s tc a l l T IS A P IR e s pons e ( H ttp a pp :: T W e bR e q u e s t* H T T P R e que s t) ; v ir tua l vo id _fa s tc a ll S e ndR e s pons e ( vo id);
v ir tu a l v o id _ fa s tc a ll S e n d R e d ire c t( c o n s t S y s te m :: A n s i S tr in g U R I ) ; v ir tu a l v o id _ fa s tc a ll S e n d S tre a m ( C la s s e s ::T S tre a m * A S tre a m ) ;
_fa s tc a l l v ir tu a l ~ T IS A P IR e s pons e ( vo id) { }
};
可 以 看 出 T IS A P IR e s pons e 是 从 T W e b R e s pons e 继 承 下 来 的 它 没 有 自 己 的特 性 和 方 法 只 是 重 载 了 T W e b R e s pons e 的 构 造 函 数 S e ndR e s pon s e
S e n d R ed irec t S e ndS tre a m
1 6.6.7 TCGI Response 对 象
对 于 CG I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 操 纵 H TTP 响 应 消 息 的 是
T C G IR e s pon s e 对 象 在 CG IA P P 单 元 中 T C G IR e s pon s e 是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T C G IR e s p o n s e : p u b lic H ttp a p p ::T W e b R e s p o n s e
{
priv a te :
// 私有的成 员此处省略
pro te c te d:
// 保护的成 员此处省略
pub l ic :
_fa s tc a l l T C G IR e s p ons e ( H ttp a pp :: T W e b R e q ue s t* H T T P R e qu e s t) ; v ir tu a l v o id _ fa s tc a l l S e n d R e sp o n s e ( vo id);
v ir tu a l v o id _ fa s tc a l l S e n d R e d ire c t( c on s t S y s te m : : A n s i S tr ing U R I ) ; v ir tu a l v o id _ fa s tc a ll S e n d S tre a m ( C la s s e s ::T S tre a m * A S tre a m ) ;
_fa s tc a l l v ir tua l ~ T C G IR e spo ns e ( vo id ) { }
};
可 以 看 出 T C G IR e s pon s e 也 是 从 T W e b R e s pons e 继 承 下 来 的 它 没 有 自 己 的
1 6.6.8 TWin CGIResponse 对 象
对 于 W in - C G I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 操 纵 H TTP 响 应 消 息 的 是
T W in C G IR e s pons e 对 象 在 CG IA P P 单 元 中 T W in C G IR e s pons e 的 声 明 很 简单
T W in C G IR e s pons e = C la s s ( T C G IR e s pons e ) ;
可 以 看 出 T W in C G IR e s pons e 是 从 T C G IR e s pon s e 继 承 下 来 的 它 没 有 自 己的 成 员
1 6.7 页 面 生 成 器
T P ag e P ro d u cer 元 件 能 够 基 于 一 个 事 先 设 计 好 的 HT M L 模 板 分 析 客 户 的 输 入并 自 动 生 成 动 态 的 HT M L 页 面 因 此 T P ag e P ro d u cer元 件 又 叫 页 面 生 成 器
T P ag e P ro d u cer 元 件 的 直 接 上 级 是 T C us to m P a g e P roduc e r 而
T C us to m P a g e P roduc e r又 是 从 T C us to m C on te n t P roduc e r继 承 下 来 的
1 6.7. 1 怎 样 建 立 HTML 模 板
要 使 用 页 面 生 成 器 首 先 要 建 立 HT M L 模 板 让 页 面 生 成 器 知 道 应 该 怎 样 转换 所 谓 HT M L 模 板 就 是 HT M L 命 令 和 HT M L 透 明 标 记 组 成 的 序 列 关 于HT M L 命 令 读 者 可 以 参 阅 有 关 HT M L 语 言 的 书 籍 一 个 HT M L 透 明 标 记 的形 式 是
< # T a gN a m e P a ra m 1 = V a lue 1 P a ra m 2 = V a lue 2 ...>
可 以 看 出 HT M L 透 明 标 记 必 须 用 < > 括 起 来 # 与 < 之 间 不 能 有 空 格 # 后 是标 记 名 标 记 名 可 以 是 任 何 C+ + 的 标 识 符 # 与 标 记 名 之 间 也 不 能 有 空 格
标 记 名 后 可 以 跟 一 个 或 多 个 参 数 以 进 一 步 指 定 转 换 的 细 节 每 个 参 数 的
形 式 是 Pa ra m N a m e = V a lu e 其 中 Pa ra m N a m e 是 参 数 名 V a lu e 是 参 数 的 值参 数 名 等 号 参 数 值 之 间 均 不 能 有 空 格 但 参 数 与 参 数 之 间 要 用 空 格 隔开
预定 义的 标准 标记名
标 记 名 |
对 应 的 TTa g 值 |
该标记转 换为 |
---|---|---|
L in k Im a g e T a b le Im a g e M a p O b je c t E m be d |
tg L in k tgIm a ge tgT a b le tg Im ag eM a p tg O b je c t tgE m b e d |
超 级 链 接 相 当 于 HT M L 中 的 <A > … < / A > 序列 图像 相当 于 HT M L 中的 <IM G = … > 表 格 相 当 于 HT M L 中 的 <T A B L E > … < / TA B L E> 序列 图 像 相 当 于 HT M L 中 的 <M A P " … "> … < / M A P> 序列 嵌 入 的 A c tiv e X 对 象 相 当 于 HT M L 中 的 <O B J E C T > … < / O B J E C T > 序列 与 N e ts c a p e 兼容的插 件 DL L 相当于 HT M L 中的 <E M B E D > … < / E M B E D > 序列 |
预 定 义 的 标 记 名 是 大 小 写 敏 感 的 另 外 尽 管 是 预 定 义 的 标 记 名 但 C+ + B u ild e r 3 并 没 有 提 供 默 认 的 处 理 您 得 自 己 处 理 这 些 标 记 您 也 可 以 自 己 定义 标 记 名 任 何 自 定 义 的 标 记 对 应 的 TTa g 值 都 是 tg C u s to m 下 面 是 一 个HT M L 模 板 的 示 例
<H T M L >
<H E A D >
<T IT L E > 这是一个 HT M L 模板示例 < / T IO TLE >
< / H E A D >
< B ODY>
<H 1> 感谢您加 入 C + + B u ild e r爱好者协 会 < / H 1 >
<H 3> 下面是您 刚才填写的个 人资料 < / H 3 >
< T A B L E BO RD E R = " 0 " >
<T R >
< T D> N a me < / T D >
< T D> < # N a m e > < / T D>
< / T R >
<T R >
< T D> A d d re ss < / T D >
< T D > <# A d d re s s > < / T D >
< / T R >
<T R >
< T D > P hon e < / T D >
< T D > < # P hone > < / T D >
< / T R >
<T R >
<T D > E M a i l < / T D >
<T D > < # E M a i l> < / T D >
< / T R >
< / TA B L E>
<H 5> 您的资料 已保存到会员 数据库中 我 们将经常与您 联系 谢谢 < / H 5 >
< / B ODY>
< / H T M L >
可 以 看 出 上 述 HT M L 模 板 中 有 四 个 HT M L 透 明 标 记 分 别 是 <# N a m e >
< # A d d re ss> <# P h o n e > < # E M a il>
1 6.7.2 指 定 HTML 模 板
建 立 了 HT M L 模 板 后 您 应 当 指 定 HT M L 模 板 指 定 HT M L 模 板 有 两 种 方 式如 果 HT M L 模 板 保 存 在 文 件 中 用 HT M L F ile 特 性 比 较 合 适 只 要 把T P ag e P ro d u cer元 件 的 HT M L F ile 特 性 设 为 HT M L 模 板 所 在 的 文 件 名 ( 可 以 包 括路 径 ) 注 意 您 在 交 付 此 W e b 服 务 器 应 用 程 序 时 应 一 并 交 付 HT M L 模 板 文件 否 则 W e b 服 务 器 应 用 程 序 就 不 能 正 常 工 作 另 外 HT M L 模 板 文 件 的
路 径 最 好 让 用 户 自 己 设 定 而 不 要 在 程 序 中 写 死
如 果 HT M L 模 板 是 用 T S tr ings 对 象 保 存 的 用 HT M L D o c 特 性 比 较 方 便 只 要把 包 含 HT M L 模 板 的 T S tr ings 对 象 赋 值 给 HT M L D o c 特 性 就 行 了
HT M L F ile 特 性 和 HT M L D o c 特 性 是 互 斥 的 设 置 了 其 中 一 个 另 一 个 就 清空
1 6.7.3 转 换 并 返 回 转 换 后 的 结 果
用 HT M L F ile 特 性 或 HT M L D o c 特 性 指 定 HT M L 模 板 后 T P ag e P ro d u cer 提 供了 三 种 转 换 方 式
- 是
调 用 C on te n t 函 数 这 个 函 数 能 够 逐 一 替 换 HT M L 模 板 中 的 透 明 标 记然 后 返 回 转 换 后 的 结 果 实 际 上 就 是 一 串 HT M L 命 令
如 果 HT M L 模 板 比 较 简 单 只 是 一 个 字 符 串 您 可 以 调 用 C o n te n tF ro m S trin g
函 数 并 传 递 HT M L 模 板 作 为 参 数 也 能 得 到 转 换 后 的 结 果
如 果 HT M L 模 板 可 以 从 流 中 读 取 调 用 C o n ten t F ro m S trea m 函 数 比 较 方 便 由 于 TB lo b S tre a m 对 象 支 持 流 入 和 流 出 等 操 作 您 可 以 把 HT M L 模 板 存 储 到数 据 库 的 备 注 字 段 中 以 后 再 从 备 注 字 段 中 读 取 HT M L 模 板
1 6.7.4 怎 样 转 换 (OnHTMLTag 事 件 )
调 用 C on te n t C o n te n tF ro m S tre a m 或 C o n te n tF ro m S trin g 函 数 进 行 转 换 时 如果 在 HT M L 模 板 中 遇 到 一 个 HT M L 标 记 就 会 触 发 O n HT M L T a g 事 件 这 样您 就 有 机 会 判 断 当 前 遇 到 的 是 哪 个 标 记 然 后 再 决 定 怎 样 替 换 这 个 标 记下 面 我 们 详 细 介 绍 O n HT M L T a g 事 件
O n H T M LTa g 事 件
声 明 _prope r ty T H T M L T a gE ve nt O n H T M L T a g ;
其 中 TH TM LT a g Ev e n t是 这 样 声 明 的
ty pe de f v o id _ fa s tc a l l (_ c losu re * T H T M LTa gE ve n t) ( T O b je c t∗ S e nd e r, T Ta g Ta g , con s t S y s te m : : A n s i S tr ing Ta gS tr ing, C la s se s : : T S tr ings ∗ Ta gP a ra m s , A n s i S tr ing & R e p la c e Te x t) ;
Ta g 参 数 告 诉 您 当 前 遇 到 的 是 什 么 标 记 如 果 Ta g 参 数 是 tg L in k tg Im a g e
tg T a b le tg Im ag eM a p tg O b ject tg E m b e d 中 的 一 个 表 示 是 预 定 义 的 标 记如 果 Ta g 参 数 是 tg C u s to m 表 示 是 自 定 义 的 标 记 此 时 T a g S trin g 参 数 就 是 自定 义 的 标 记 名
不 管 是 预 定 义 的 标 记 还 是 自 定 义 的 标 记 如 果 标 记 附 带 了 参 数 的 话 您 可以 通 过 O n HT M L T a g 事 件 的 Ta g P a ra m s 参 数 得 到 标 记 中 的 参 数 Ta g P a ra m s 参数 是 T S tr ings 对 象 其 中 每 个 字 符 串 的 形 式 是 Pa ra m N a m e = V a lu e 其 中
Pa ra m N a m e 是 参 数 名 V a lu e 是 参 数 值 用 T S tr ings 对 象 的 N a m e s 特 性 可 以 访问 标 记 中 的 所 有 参 数 名 用 T S tr ings 对 象 的 V a lu e s 特 性 访 问 标 记 中 的 所 有 参数 值
在 处 理 O n HT M L T a g 事 件 的 句 柄 中 至 少 要 有 这 么 一 句 就 是 对 R e p la ceT ex t参数 赋 值 实 际 上 就 是 指 定 要 替 换 标 记 的 文 本 该 文 本 既 可 以 是 一 个 普 通 的字 符 串 也 可 以 又 是 一 个 HT M L 透 明 标 记 让 下 一 个 T P ag e P ro d u cer 元 件 去转 换 从 而 构 成 转 换 链
下 面 我 们 通 过 一 个 典 型 的 示 例 来 帮 助 您 理 解 HT M L 模 板 和 O n HT M L T a g 事件 假 设 HT M L 模 板 是 这 样的
<H T M L >
< H E A D > < T IT L E > O ur bra nd ne w w e b s i te < / T IT L E > < / H E A D >
< B ODY>
H e llo < # U s e r N a m e > ! W e lc o m e to o u r w e b s ite .
< / B ODY>
< / H T M L >
可以看出 这个 HT M L 模板中只 有一个标记 标记名称是 U s e r N a me
v o id _ fas tc all T W eb M o d u le 1 : : P ag e P ro d u cer 1 H T M L T ag ( T O b jec t∗ S e nd e r , T T a g T a g, c o n s t A n s i S tr ing T a gS tr in g, T S tr ings *T a g P a ra m s , A n s i S tr ing & R e p la c e T e x t)
{
if (C o m p a re T e x t(T a g S trin g , " U se rN a m e " ) = = 0 )
R e p lac eT e x t = ( T P a g e P ro d u cer * ) S e n d er-> D isp atc h er-> R e q u es t-> C o n te n t ;
};
上 面 这 个 事 件 句 柄 首 先 判 断 当 前 遇 到 的 标 记 是 否 U s e r N a m e 如 是 就 对
R e p laceT e x t参 数 赋 值 这 里 顺 便 介 绍 T P ag e P ro d u cer 元 件 的 D is p a tch er 特 性
T P ag e P ro d u cer 元 件 一 般 应 当 放 在 W e b 模 块 上 D is p atc h er 特 性 返 回T P ag e P ro d u cer元 件 所 在 的 W e b 模 块 由 此 可 以 访 问 H TTP 请 求 消 息 进 而 得到 H TTP 请 求 消 息 中 的 内 容 即 客 户 填 写 的 U s e r N a m e
如 果 程 序 没 有 响 应 O n HT M L T a g 事 件 或 者 在 处 理 O n HT M L T a g 事 件 的 句 柄 中没 有 对 R e p laceT e x t参 数 赋 值 HT M L 透 明 标 记 就 用 空 字 符 串 替 换
1 6.8 操 纵 We b 服 务 器 应 用 程 序
C+
- Bu ild e r 3 用 T A pp lic a tio n 来 操 纵 应 用 程 序 并 且 在 Fo rm s 单 元 中 声 明 了T A pp lic a tio n 的 实 例 叫 A p p lic a t io n 对 于 W e b 服 务 器 应 用 程 序 来 说 情 况 就不 一 样 了 C+ + Bu ild e r 3 用 T W e b A p p lic a tio n 及 其 派 生 类 来 操 纵 W e b 服 务 器应 用 程 序 当 您 用 C+ + Bu ild e r 3 提 供 的 向 导 创 建 W e b 服 务 器 应 用 程 序 时 向导 同 时 还 创 建 了 一 个 W e b 服 务 器 应 用 程 序 对 象 其 实 例 也 叫 A p p lic a tio n 对于 CG I 或 W in - C G I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 这 个 实 例 的 类 型 是T C G IA p p lic a t io n 在 CG IA p p 单 元 中 声 明 对 于 IS A P I 或 NS A P I类 型 的 W e b 服务 器 应 用 程 序 来 说 这 个 实 例 的 类 型 是 T IS A P IA pp lic a tio n 在 IS A P IA p p 单元 中 声 明
由 此 可 见 W e b 服 务 器 应 用 程 序 中 的 A p p lic a tio n 和 普 通 应 用 程 序 中 的A p p lic a t io n 不 是 一 码 事 至 少 它 们 的 类 型 不 同 因 此 您 不 可 以 在 W e b 服 务器 应 用 程 序 的 项 目 文 件 中 引 用 某 个 Fo rm 的 单 元 名 因 为 这 个 单 元 会 自 动 声明 一 个 T A pp lic a tio n 类 型 的 A p p lic a t io n 同 样 的 道 理 您 不 可 以 把 IS A P IA p p 单 元 加 到 CG I或 W in - C G I类 型 的 W e b 服 务 器 应 用 程 序 中 也 不 可 以 把 CG IA p p 单 元 加 到 IS A P I或 N S A P I类 型 的 W e b 服 务 器 应 用 程 序 中
1 6.8. 1 TWeb Application 对 象
T W e b A pp lic a t io n 用 于 操 纵 W e b 服 务 器 应 用 程 序 的 基 本 行 为 包 括 创 建T W e b R e que s t 对 象 和 T W e b R e s pons e 对 象 并 且 把 这 两 个 对 象 传 递 给 W e b 调度 器 再 由 W e b 调 度 器 传 递 给 匹 配 的 动 作 项 由 动 作 项 分 析 和 处 理 H TTP 请
求 消 息 最 后 发 送 H TTP 响 应 消 息 给 客 户
在 H TTP A P P 单 元 中 T W e b A p p lic a tio n 是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T W e b A p p lic a tio n : p u b lic C la s s e s ::T C o m p o n e n t
{
pub l ic :
_ fa s tc a ll v ir tu a l T W e b A p p lic a tio n ( C la s s e s ::T C o m p o n e n t∗ AO w n e r ) ;
_ fa s tc a ll v ir tu a l ~ T W e b A p p lic a tio n ( v o id ) ;
_ p ro p e rty in t A c tiv e C o u n t ;
_p rop e r ty boo l C a c h e C o n n e c t ions ;
_ p ro p e rty in t In a c tiv e C o u n t ;
_p rop e r ty in t M a xC o nne c t io ns ;
_ p ro p e rty S y s te m ::A n s iS trin g T itle ;
};
A c tiv e C o u n t 特 性
声 明 _prope r ty in t A c tive C oun t;
对 于 IS A P I或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 每 收 到 一 个 H TTP 请 求消 息 就 会 自 动 创 建 一 个 新 的 W e b 模 块 实 例 如 果 H TTP 请 求 消 息 得 到 处 理W e b 模 块 的 这 个 实 例 要 么 被 删 除 要 么 变 成 非 活 动 状 态 备 下 次 再 用
因 此 一 个 W e b 服 务 器 应 用 程 序 中 可 能 存 在 着 W e b 模 块 的 多 个 实 例 其 中 有的 处 于 活 动 状 态 有 的 处 于 非 活 动 状 态 每 个 活 动 的 实 例 均 在 一 个 单 独 的线 程 中
A c tiv e C oun t是 个 只 读 的 特 性 返 回 当 前 处 于 活 动 状 态 的 W e b 模 块 的 实 例 数实 际 上 也 就 是 W e b 服 务 器 应 用 程 序 当 前 正 在 处 理 的 H TTP 请 求 消 息 数
In a c t iv e C oun t也 是 个 只 读 的 特 性 返 回 当 前 处 于 非 活 动 状 态 的 W e b 模 块 的 实例 数 M a xC onne c tions 特 性 用 于 设 置 最 多 可 有 多 少 个 活 动 的 W e b 模 块 实 例 因 此 A c tiv e C oun t特 性 的 值 不 会 大 于 M a xC onne c t ions
注 意 A c tiv e C ount 仅 对 IS A P I 或 N S AP I 类 型 的 W e b 服 务 器 应 用 程 序 是 有 效的 因 为 对 于 CG I 或 W in - C G I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 在 同 一 个 时刻 只 能 响 应 一 个 H TTP 请 求 消 息 也 就 是 说 W e b 模 块 只 有 一 个 实 例
C a ch e C o n n ectio n s 特 性
声 明 _prope r ty bool C a c h e C onne c tions ;
如 果 这 个 特 性 设 为 T ru e 当 一 个 H TTP 请 求 消 息 被 处 理 后 W e b 模 块 的 实 例不 是 被 删 掉 而 是 保 留 在 内 存 中 备 下 次 再 用 这 样 当 W e b 服 务 器 应 用 程序 收 到 下 一 个 H TTP 请 求 消 息 时 就 不 必 重 新 创 建 W e b 模 块 的 实 例 从 而 提高 了 程 序 的 性 能
如 果 这 个 特 性 设 为 Fa ls e 当 一 个 H TTP 请 求 消 息 被 处 理 后 W e b 模 块 的 实 例就 被 删 掉 当 W e b 服 务 器 应 用 程 序 收 到 下 一 个 H TTP 请 求 消 息 时 就 要 重 新创 建 W e b 模 块 的 一 个 实 例 这 种 方 式 的 好 处 时 每 个 实 例 总 是 反 映 W e b 模 块的 最 新 状 况
I n ac tive C o u n t 特 性
声 明 _prope r ty in t In a c t iv e C oun t;
在 C a c h e C onne c tions 特 性 设 为 T ru e 的 情 况 下 这 个 只 读 的 特 性 返 回 当 前 处 于非 活 动 状 态 的 W e b 模 块 的 实 例 数 如 果 C ach eC o n n ectio n s 特 性 设 为 Fa ls e
In a c t iv e C oun t特 性 总 是 0
M a x C o nne c tio n s 特 性
声 明 _prope r ty in t M a xC on ne c t ions ;
这 个 特 性 用 于 设 置 在 同 一 个 时 刻 最 多 允 许 W e b 模 块 的 几 个 实 例 是 活 动 的换 句 话 说 也 就 是 W e b 服 务 器 应 用 程 序 能 同 时 处 理 几 个 H TTP 请 求 消 息
M a xC onne c tions 特 性 的 值 应 当 设 得 比 较 合 适 设 得 过 小 显 然 不 行 如 果 设 得过 大 的 话 表 面 上 看 W e b 服 务 器 应 用 程 序 能 同 时 处 理 很 多 H TTP 请 求 消 息但 同 时 执 行 很 多 线 程 也 会 导 致 应 用 程 序 的 开 销 很 大 弄 不 好 反 而 会 降 低 应用 程 序 的 性 能
如 果 当 前 活 动 的 W e b 模 块 的 实 例 数 已 经 达 到 M a xC onne c tions 特 性 的 值 此 时若 收 到 一 个 H TTP 请 求 消 息 将 触 发 异 常
T it le 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing T i tle ;
这 个 特 性 用 于 指 定 一 个 字 符 串 当 W e b 服 务 器 应 用 程 序 最 小 化 时 此 字 符 串显 示 在 它 的 图 标 下 面 如 果 没 有 设 置 T itle 特 性 就 用 W e b 服 务 器 应 用 程 序 的文 件 名
I n itia liz e 函 数
声 明 v ir tua l vo id _fa s tc a ll In itia liz e ( vo id);
In itia liz e 本 来 什 么 也 不 做 由 于 用 C+ + Bu ild e r 3 创 建 的 应 用 程 序 总 是 先 调 用In itia liz e 因 此 如 果 您 需 要 对 W e b 服 务 器 应 用 程 序 做 一 些 初 始 化 工 作 的 话您 可 以 重 载 In itia liz e
1 6.8.2 TCGI Application 对 象
对 于 CG I 或 W in - C G I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 操 纵 W e b 服 务 器 应 用程 序 的 是 T C G IA p p lic a tio n 对 象 在 CG IA P P 单 元 中 T C G IA p p lic a tio n 是 这 样声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T C G IA p p lic a t io n : p u b lic H ttp a p p ::T W e b A p p lic a tio n
{
pub l ic :
v ir tu a l v o id _ fa s tc a ll R u n ( v o id ) ;
_ fa s tc a ll v ir tu a l T C G IA p p lic a tio n ( C la s se s ::T C o m p o n e n t* A O w n e r ) : H ttp a p p : : T W e b A p p l ic a t io n ( AOw n e r ) { }
_fa s tc a l l v ir tua l ~ T C G IA pp lic a t io n ( vo id) { }
};
可 以 看 出 T C G IA p p lic a tio n 是 从 T W e b A p p lic a tio n 继 承 下 来 的 它 没 有 自 己的 特 性 和 方 法 只 是 重 载 了 T W e b A p p lic a tio n 中 的 Ru n
1 6.8.3 TISA PIApplication 对 象
对 于 IS A P I 或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 操 纵 W e b 服 务 器 应 用程 序 的 是 T ISA P IA p p l ic a tio n 对 象 在 IS A P IA P P 单 元 中 T IS A P IA pp lic a tio n 是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T IS A P IA p p lic a tio n : p u b lic H ttp a p p ::T W e b A p p lic a t io n
{
pub l ic :
B O O L _ fa s tc a ll G e tE x te n s io n V e rs io n ( Isa p i2 ::T H S E _ V E R S IO N _ IN F O & V e r ) ; in t _ fa s tc a ll H ttp E x te n s io n P ro c ( T E X T E N S IO N _ C O N T R O L _ B L O C K & E C B ) ; B O O L _ fas tc all T e rm in ateE x tens io n ( in t d w F lag s ) ;
_ fa s tc a ll v ir tu a l T IS A P IA p p lic a tio n ( C la s s e s ::T C o m p o n e n t* A O w n e r ) : H ttp a p p : : T W e b A p p l ic a t io n ( AOw n e r ) { }
_fa s tc a l l v ir tua l ~ T IS A P IA pp lic a t ion ( vo id) { }
};
可 以 看 出 T ISA P IA p p l ic a tio n 也 是 从 T W e b A pp lic a tio n 继 承 下 来 的 增 加 了三 个 函 数 这 三 个 函 数 都 是 IS A P I 或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 必 须输 出 的 例 程 由 W e b 服 务 器 调 用 创 建 W e b 服 务 器 应 用 程 序 时 项 目 文 件 中已 自 动 输 出 了 这 三 个 函 数
1 6.9 We b 服 务 器 与 数 据 库
用 C+ + Bu ild e r 3 创 建 的 W e b 服 务 器 应 用 程 序 可 以 很 方 便 地 访 问 数 据 库 只 要借 助 于 T D a ta S e t T a b le P roduc e r元 件 和 T Q ue r y T a b le P roduc e r 元 件 就 可 以 从 标准 的 数 据 集 中 引 入 数 据 并 动 态 生 成 HT M L 页 面 T Q ue ry T a b le P roduc e r元 件 还能 从 H TTP 请 求 消 息 中 检 索 SQ L 语 句 的 参 数 值 从 而 实 现 满 足 特 定 需 求 的 交互 式 查 询 和 信 息 发 布
1 6.9. 1 用 TSession 管 理 与 数 据 库 的 连 接
对 于 IS A P I或 NS A P I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 每 一 个 H TTP 请 求 消 息都 是 在 一 个 单 独 的 线 程 中 处 理 的 如 果 W e b 服 务 器 应 用 程 序 连 接 了 数 据 库的 话 每 个 线 程 都 有 可 能 涉 及 到 数 据 库 连 接 断 开 等 问 题 为 了 避 免 冲 突您 应 当 把 一 个 T S e ssio n 元 件 加 到 W e b 模 块 上 每 个 线 程 会 临 时 创 建 W e b 模 块的 一 个 新 的 实 例 由 于 W e b 模 块 上 有 T S e ssio n 元 件 因 此 每 个 线 程 就 拥 有了 自 己 的 S e ssio n 对 象 为 了 使 这 些 Se s s io n 对 象 的 名 称 各 异 您 应 当 把 T S e ssio n 元 件 的 A u to S e ssio n N a m e 特 性 设 为 T ru e
对 于 CG I 或 W in - C G I 类 型 的 W e b 服 务 器 应 用 程 序 来 说 在 同 一 个 时 刻 只 能 处理 一 个 H TTP 请 求 消 息 不 存 在 多 线 程 的 问 题 因 此 如 果 W e b 服 务 器 应 用程 序 要 连 接 数 据 库 的 话 只 要 用 默 认 的 Se ss io n 对 象 就 够 了 不 必 把 T S e ssio n 元 件 加 到 W e b 模 块 上
1 6.9.2 TDat aSetTableProducer 元 件
T D a ta S e t T a b le P roduc e r元 件 的 作 用 主 要 有 两 个 一 个 是 从 标 准 的 数 据 集 中 引入 数 据 为 此 您 首 先 要 把 一 个 TTa b le 元 件 或 TQ u e r y 元 件 或 T C l ie n t D a tas e t 元 件 加 到 W e b 模 块 上 然 后 设 置 T D a ta S e t T a b le P roduc e r元 件 的 D a ta S e t特 性 指定 数 据 集 如 果 要 访 问 的 数 据 库 是 固 定 不 变 的 您 可 以 在 设 计 期 设 置 D a ta S e t 特 性 如 果 要 访 问 的 数 据 库 是 不 固 定 的 甚 至 要 由 客 户 在 H TTP 请 求 消 息 中指 定 此 时 就 要 在 运 行 期 设 置 D a ta S e t特 性
T D a ta S e t T a b le P roduc e r 元 件 与 数 据 集 之 间 无 需 借 助 于 T D ataS o u rce 元 件 因为 T D a ta S e t T a b le P roduc e r 元 件 与 一 般 的 数 据 控 件 元 件 如 TD B G r id 在 本 质 上 是不 同 的 转 换 得 到 的 HT M L 页 面 实 际 上 是 静 止 的 文 本 无 法 与 数 据 集 实 现 互动 例 如 您 无 法 用 数 据 库 导 航 器 按 钮 来 翻 滚 HT M L 页 面 上 的 记 录
T D a ta S e t T a b le P roduc e r 元 件 的 直 接 上 级 是 T D S T ab le P ro d u cer 而
T D S T ab le P ro d u cer 又 是 从 T C us to m C on te n t P roduc e r 继 承 下 来 的 因 此
T D a ta S e t T a b le P roduc e r与 前 面 介 绍 的 T P ag e P ro d u cer具 有 相 似 性 下 面 就 介 绍
T D a ta S e t T a b le P roduc e r元 件 的 特 性 方 法 和 事 件
C a p tio n 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C a p tion;
T D a ta S e t T a b le P roduc e r 元 件 能 够 把 数 据 集 转 换 为 HT M L 表 格 这 个 特 性 用 于设 置 表 格 的 头 标 C a p tio n 特 性 本 身 是 个 字 符 串 引 号 内 应 当 是 HT M L 命 令程 序 示 例 如 下
C a p tion = " < H 1 > 客 户 表 < /H 1 > " ;
C a p tio n A lig n m e n t 特 性
声 明 _prope r ty T H T M L C a p tionA l ign m e nt C a p tionA l ign m e n t;
这 个 特 性 用 于 设 置 标 题 与 HT M L 表 格 的 位 置 关 系 设 为 caD e fau lt表 示 让 W e b 浏 览 器 决 定 设 为 caT o p 表 示 标 题 显 示 在 表 格 的 上 面 设 为 caB o tto m 表 示 标题 显 示 在 表 格 的 下 面
C o lu m n s 特 性
声 明 _prope r ty T H T M L T a b le C o lu m ns * C o lu m n s
这 个 特 性 有 点 类 似 于 TD B G r id 的 Co lu m n s 特 性 用 于 设 置 表 格 中 每 一 列 的 显示 属 性 在 HT M L 表 格 中 每 一 列 是 一 个 TH TM LT a b le C o lu m n 对 象
在 设 计 期 您 可 以 在 O b je c t In s p ecto r 中 单 击 Co lu m n s 特 性 边 上 的 省 略 号 按 钮打 开 一 个 HT M L 表 格 属 性 编 辑 器 直 接 设 置 表 格 中 每 个 列 的 属 性 如 图 16 .3 所 示
图 16 .3 设 置 HT M L 表 格 中 列 的 属 性
刚 开 始 的 时 候 HT M L 表 格 属 性 编 辑 器 是 空 白 的 这 并 不 是 意 味 着 HT M L 表格 是 空 白 的 相 反 C+ + Bu ild e r 3 会 把 据 数 据 集 中 的 所 有 字 段 都 显 示 在 HT M L 表 格 中
如 果 不 想 显 示 所 有 的 字 段 或 者 想 在 设 计 期 设 置 列 的 属 性 您 就 得 单 击
A d d 按 钮 创 建 一 个 永 久 的 TH TM LT a b le C o lu m n 对 象 然 后 您 就 可 以 修 改它 的 属 性
如 果 要 调 整 字 段 在 HT M L 表 格 中 的 顺 序 单 击 M ove U p 或 M o v e D o wn
按 钮
D a ta S e t 特 性
声 明 _prope r ty D b :: T D a ta S e t* D a ta S e t;
这 个 特 性 用 于 指 定 要 访 问 的 数 据 集 可 以 是 TTa b le TQ u e ry 以 及
T C lien t D ataS e t
D is p a tch e r 特 性
声 明 _ p ro p e r ty T C u s to m W eb D is p a tch er* D is p a tch er;
通 过 这 个 特 性 可 以 得 到 T D a ta S e t T a b le P roduc e r 元 件 所 在 的 W e b 模 块 进 而 可以 访 问 H TTP 请 求 消 息 和 H TTP 响 应 消 息
H e a d e r 特 性
声 明 _prope r ty C la s s e s :: T S tr ings * H e a d e r ;
如 果 要 在 整 个 HT M L 表 格 前 加 上 一 些 内 容 可 以 设 置 H ead e r特 性 这 是 一 个
T S tr ings 对 象 其 中 每 个 字 符 串 必 须 是 一 条 HT M L 命 令
F oote r 特 性
声 明 _prope r ty C la s s e s :: T S tr ings * F oo te r ;
如 果 要 在 整 个 HT M L 表 格 的 最 后 加 上 一 些 内 容 可 以 设 置 F oo te r 特 性 这是 个 T S tr ings 对 象 每 个 字 符 串 必 须 是 一 条 HT M L 命 令
注 意 C+ + Bu i ld e r 3 并 不 检 查 H ead e r特 性 和 F oo te r特 性 中 HT M L 命 令 的 语 法这 是 由 W e b 浏 览 器 检 查 的 当 您 调 用 T D a ta S e t T a b le P roduc e r元 件 的 Co n te n t函数 时 所 得 到 的 页 面 包 括 H ead e r特 性 和 F oo te r 特 性 中 HT M L 命 令 描 述 的 内 容加 上 HT M L 表 格 本 身
M a x R o w s 特 性
声 明 _prope r ty in t M a xR ow s ;
这 个 特 性 用 于 设 置 HT M L 表 格 的 最 大 行 数 默 认 是 20 如 果 数 据 集 中 的 记 录数 超 过 M a xR ow s 超 过 的 记 录 不 会 显 示
R o w A ttrib u te s 特 性
声 明 _prope r ty H ttp a pp :: T H T M L T a b le R ow A ttr ibu te s * R o w A ttr ib u te s ;
这 个 特 性 ( T H T M L T a b le R o w A ttrib u te s 对 象 ) 用 于 设 置 HT M L 表 格 中 行 的 属性 T D a taS et T a b leP ro d u cer 元 件 会 自 动 把 这 些 属 性 转 换 为 相 应 的 HT M L 标记
Ta b le A ttr ibu te s 特 性
声 明 _prope r ty H ttp a pp :: T H T M L T a b le A t tr ibu te s * T a b le A ttr ib u te s ;
这 个 特 性 (T H T M L T a b le A ttrib u te s 对 象 ) 用 于 设 置 整 个 HT M L 表 格 的 属 性
T D a ta S e t T a b le P roduc e r元 件 会 自 动 把 这 些 属 性 转 换 为 相 应 的 HT M L 标 记
C o n te n t 函 数
声 明 v ir tu a l S y s te m ::A n s iS trin g _ fa s tc a ll C o n te n t( v o id ) ;
调 用 这 个 函 数 开 始 对 数 据 集 中 的 记 录 进 行 转 换 此 时 将 触 发 O n C reateC o n ten t 事 件 在 处 理 O n C reateC o n ten t事 件 的 句 柄 中 如 果 把 C on tinue 参 数 设 为 T ru e C on te n t函 数 就 返 回 H ead e r 特 性 描 述 的 内 容 然 后 是 由 数 据 集 中 的 记 录 转 换得 到 的 HT M L 表 格 最 后 是 F oo te r 特 性 描 述 的 内 容 C on te n t函 数 的 返 回 值 可
以 直 接 赋 值 给 T W e b R e s pons e 对 象 的 C on te n t 特 性 作 为 H TTP 响 应 消 息 中 的 内容 如 果 把 C on tinue 参 数 设 为 Fa ls e C on te n t函 数 就 返 回 空
O n C re a te C o n te n t 事 件
声 明 _prope r ty T C re a te C on te n t E v e nt O n C re a te C on te n t;
其 中 T C re a te C on te n t E ve n t是 这 样 声 明 的
ty p e d e f vo id _fa s tc a l l(_c lo s u re * T C re a te C on te n t E ve n t) ( T O b je c t* S e nde r , boo l & C on tinue ) ;
当 调 用 C on te n t 函 数 时 会 触 发 这 个 事 件 如 果 把 C on tinue 参 数 设 为 Fa ls e
C on te n t函 数 不 再 继 续 转 换 并 返 回 空 字 符 串
O n F o r m a t C e ll 事 件
声 明 _prope r ty T H T M L F orm a t C e l l E ve nt O n F o rm a t C e l l;
其 中 TH TM LF o rm a t C e l l E v e n tl是 这 样 声 明 的
ty p e d e f vo id _ fa s tc a ll (_ c los ure * T H T M L F o rm a t C e ll E v e n t) ( S y s te m :: T O b je c t* S e nde r , in t C e ll R ow , in t C e ll C o lu m n, S y s te m :: A n s i S tr ing & B gC o lor, H ttp a pp :: T H T M L A lign & A lign, H t tp a p p :: T H T M L V A l ign & V A lign, A n s i S tr ing & C u s to m A ttrs , S y s te m : : A n s i S tr in g & C e llD a ta ) ;
在 转 换 的 函 数 中 每 个 单 元 都 会 触 发 O n F o rm a t C e ll事 件 这 样 您 就 有 机 会 自
己 定 义 这 个 单 元 中 的 内 容 和 外 观 C e ll Ro w 参 数 和 C e ll Co lu m n 参 数 是 单 元 所在 的 行 号 和 列 号 您 可 以 设 置 Bg Co lo r A lig n V A lig n Cu s to m A t trs 等 参 数来 改 变 单 元 的 外 观 C e ll D a ta 参 数 是 单 元 中 要 显 示 的 内 容 默 认 是 字 段 的 值
您 可 以 修 改
O n G e t Ta b le C a p tio n 事 件
声 明 _prope r ty T H T M L G e t T a b le C a p tio n E ve nt O n G e t T a b le C a p tion;
其 中 TH TM LG e t Ta b le C a p t io n E v e n t是 这 样 声 明 的
ty pe de f v o id _ fa s tc a l l (_ c los ure ∗ T H T M L G et T a b leC ap t io n E ven t) ( T O b ject∗ S e nd e r , A n s i S tr in g & C aptio n, T H T M L C a p tio n A lig n m e n t & A lig n m e n t) ;
当 将 要 生 成 HT M L 表 格 的 标 题 时 触 发 这 个 事 件 您 可 以 设 置 C a p tio n 参 数 和
A lig n m e n t参 数 改 变 标 题 的 排 列 方 式
1 6.9.3 TQue ryTableProducer 元 件
与 T D a ta S e t T a b le P roduc e r 元 件 一 样 T Q ue r y T a b le P roduc e r 元 件 也 是 个 HT M L 页 面 生 成 器 不 同 的 是 T Q ue ry T a b le P roduc e r 元 件 能 够 基 于 对 数 据 库 的 查询 结 果 生 成 HT M L 表 格
对 数 据 库 的 查 询 实 际 上 还 是 通 过 BD E 的 查 询 引 擎 进 行 的 因 此 您 必 须 把一 个 TQ u e ry 元 件 放 到 W e b 模 块 上 设 置 它 的 D a ta b a s e N a me 特 性 指 定 要 访 问的 数 据 库 设 置 它 的 SQ L 特 性 指 定 要 执 行 的 SQ L 语 句 如 果 您 要 构 造 很 复 杂的 多 表 查 询 建 议 您 先 用 C+ + Bu i ld e r 3 中 的 S Q L B u ild e r可 视 化 地 建 立 查 询然 后 把 得 到 的 SQ L 语 句 复 制 给 TQ u e ry 元 件 的 SQ L 特 性 最 后 设 置T Q ue ry T a b le P roduc e r元 件 的 Q u e ry 特 性 指 定 TQ u e r y 元 件
T Q ue ry T a b le P roduc e r元 件 能 够 自 动 从 H TTP 请 求 消 息 中 检 索 UR L 所 附 带 的 参数 如 果 客 户 的 请 求 类 型 是 GE T 通 过 T W e b R e que s t对 象 的 Q u e r y F ie ld s 特 性
可 以 得 到 UR L 中 附 带 的 参 数 如 果 客 户 的 请 求 类 型 是 PO ST 通 过T W e b R e que s t对 象 的 C o n te n tF ie ld s 特 性 可 以 得 到 UR L 中 附 带 的 参 数 如 果 UR L 附 带 的 某 个 参 数 的 名 称 与 SQ L 语 句 中 某 个 参 数 的 名 称 匹 配
T Q ue ry T a b le P roduc e r 元 件 就 把 该 参 数 的 值 赋 给 SQ L 语 句 中 与 之 匹 配 的 参数
T Q ue ry T a b le P roduc e r元 件 的 特 性 方 法 和 事 件 与 T D ataS e t T a b leP ro d u cer 元 件几 乎 完 全 相 同 为 了 节 省 篇 幅 此 处 不 再 赘 述