荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: hihi (青蛙王子), 信区: Database
标  题: 利 用Active Server Page 开 发Web 应 用
发信站: BBS 荔园晨风站 (Mon Sep  7 10:48:00 1998), 站内信件

利 用Active Server Page 开 发Web 应 用

                      华 中 理 工 大 学 图 像 识 别 与
                      人 工 智 能 研 究 所----龚 建 勇



---- 通 常 情 况 下, 用 户 通 过 浏 览 器 看 到 的 网 页 大 多 是 静 态 的,
而 随 着Web 应 用 的 发 展, 用 户 希 望 能 够 看 到 根 据 要 求 而 动 态 生
成 的 主 页, 例 如 响 应 用 户 查 询 数 据 库 的 要 求、 生 成 报 表 送 出
等。

---- 根 据 用 户 请 求 生 成 动 态 主 页 的 传 统 方 法 有CGI、ISAPI 等。CGI
是 根 据 浏 览 器 端 的http 请 求 激 活 响 应 进 程, 每 一 个 请 求 对 应 一
个 进 程。 当 同 时 有 很 多 请 求 时, 程 序 挤 占 系 统 资 源, 造 成 效 率
低 下;ISAPI 针 对 这 一 缺 点 进 行 改 进, 利 用dll( 动 态 连 接 库) 技
术, 以 线 程 代 替 进 程, 提 高 了 性 能 和 速 度, 但 要 考 虑 线 程 的 同
步 问 题, 而 且 开 发 步 骤 烦 琐。 这 两 种 技 术 和 另 一 普 遍 使 用 的 开
发 动 态 网 页 的 技 术Java 都 还 存 在 着 另 外 一 个 问 题, 那 就 是 开 发
困 难, 程 序 的 开 发 和HTML 写 作 是 两 个 完 全 不 同 的 过 程, 需 要 专
门 的 程 序 员 开 发。 而 较 简 单 的 开 发 技 术 如JavaScript 和IDC(Internet
Database Connector) 等 又 功 能 有 限, 不 敷 使 用。

---- ASP 即ActiveX Server Page 是 微 软 公 司 的 新 一 代 开 发 动 态 网 页 的
技 术, 具 有 开 发 简 单、 功 能 强 大 等 优 点, 可 以 非 常 直 观 简 易 地
实 现 复 杂 的Web 应 用。 本 文 将 介 绍ASP 的 基 本 概 念、 特 点、 开 发 要
素, 并 通 过 两 个 典 型 的 例 子 介 绍 利 用ASP 开 发Web 应 用 的 具 体 实
现。

ASP 概 念 和 工 作 流 程

---- ASP(Active Server Page) 是 一 个Web 服 务 器 端 的 开 发 环 境, 利 用
它 可 以 产 生 和 运 行 动 态 的、 交 互 的、 高 性 能 的Web 服 务 应 用 程
序。

---- ASP 属 于ActiveX 技 术 中 的Server 端 技 术。 与 常 见 的 在Client 端 实
现 动 态 主 页 的 技 术 如Java applet、ActiveX Control、VB Script、JavaScript
等 不 同,ASP 中 的 命 令 和Script 语 句 都 是 由 服 务 器 来 解 释 执 行 的,
执 行 结 果 产 生 动 态 生 成 的Web 页 面 送 到 浏 览 器; 而Client 端 技 术
的Script 命 令 则 是 由 浏 览 器 来 解 释 执 行。 由 于ASP 是 在 服 务 器 端
解 释 执 行, 开 发 者 可 以 不 必 考 虑 浏 览 器 是 否 支 持ASP; 同 时 由 于
它 在 服 务 器 端 执 行, 开 发 者 也 不 必 担 心 别 人 下 载 程 序 从 而 知
道 编 程 逻 辑。

---- ASP 通 过 后 缀 名 为.asp 的ASP 文 件 来 实 现, 一 个ASP 文 件 相 当 一
个 可 执 行 文 件, 因 此 必 须 放 在Web 服 务 器 上 有 可 执 行 权 限 的 目
录 下。

---- 当 浏 览 器 向Web Server 请 求 调 用ASP 文 件 时, 就 启 动 了ASP。Web
server 开 始 调 用ASP, 将 被 请 求 的.asp 文 件 从 头 读 到 底, 执 行 每 一
个 命 令, 然 后 动 态 生 成 一 个HTML 页 面 送 到 浏 览 器。ASP 文 件 的 制
作 和HTML 类 似, 且 和HTML 开 发 集 成, 可 以 在 同 一 个 过 程 完 成。 通
过ASP 内 置 的 对 象、 服 务 器 组 件(Server Component) 可 以 完 成 非 常 复
杂 的 任 务, 而 且 用 户 还 可 以 自 己 开 发 或 利 用 别 人 开 发 的Server
Component 完 成 专 门 的 任 务。

---- ASP 具 有 以 下 特 征:

      完 全 和HTML 集 成;
      易 于 生 成, 无 需 手 工 编 译 和 连 接;
      面 向 对 象, 可 扩 展ActiveX Server 组 件;
      目 前ASP 只 适 用 于 下 列Web Server
      IIS 3.0 on Windows NT
      Microsoft Peer Web Server v3.0 on NT Workstation
      Microsoft Personal Web Server on Win95

ASP 文 件

---- 1. ASP 文 件 制 作

---- ASP 文 件 即 后 缀 名 为.asp 的 文 件, 一 个ASP 文 件 就 是 一 个 文 本
文 件, 可 以 包 括 下 列 元 素 的 任 意 组 合:

      文 本(text)
      HTML 标 志(tags)
      Script 命 令

---- 制 作ASP 文 件 非 常 简 单, 可 以 用 任 何 无 格 式 的 文 本 编 辑 工 具
( 笔 者 一 直 使 用Notepad), 也 可 用 专 门 的 主 页 开 发 工 具 和ASP 开 发
工 具 如Visual InetDev 等。 看 下 面 的 例 子:

---- 现 在 时 间:< %= Now % >

---- 将 其 存 成 一 后 缀 为.asp 的 文 件, 放 在 一 个Web server 指 定 有 执
行 权 的 目 录 下, 连 上 去 它 就 能 把 服 务 器 的 当 前 时 间 输 出。 注
意,asp 文 件 不 能 通 过 打 开 文 件 的 方 式 来 执 行, 而 必 须 是 连 上,
例 如, 假 定asp 是Web sever( 主 机 名host) 上 指 定 有 执 行 权 的 一 个 虚
拟 目 录, 要 执 行 目 录 下 的hello.asp, 调 用 方 式 应 该 是:
---- http://host/asp/hello.asp

---- 2. ASP 语 法

---- ASP 并 不 是 一 种 语 言, 它 只 是 提 供 一 个 环 境 来 运 行ASP 文 件
中 的Script。 为 了 顺 利 使 用ASP, 必 须 遵 守ASP 的 语 法 规 则。ASP 的 语
法 由 下 面 几 个 元 素 组 成:

      定 界 符

---- 定 界 符 是 用 来 界 定 一 个 标 志 单 元 的 符 号, 如HTML 里 的< 和>。

---- 同 样,ASP Script 的 命 令 和 输 出 表 达 也 有 定 界 符, 同text 和HTML
都 不 同, 它 的 命 令 定 界 符 是<% 和%>。 例 如 下 面 是 一 条 赋 值 语 句:

---- < % name="Timeout" % >

---- ASP 使 用< %= 和% > 来 向 浏 览 器 输 出 表 达 式, 例 如:

---- < %= name % >

---- 将 在 浏 览 器 上 输 出“Timeout"。

      Script 标 志

---- ASP 可 以 使 用 任 何Script 语 言, 只 要 提 供 相 应 的 脚 本 驱 动
(engine),ASP 自 身 提 供 了VBScript 和JScript 的 驱 动。 它 缺 省 的Script
语 言 是VBScript, 当 然 开 发 者 也 可 以 改 变 这 一 缺 省 设 置, 例 如 要
改 为Jscript, 只 需 在 文 件 开 头 注 明< %@Language=JScript% > 就 可。<
SCRIPT > 和< /SCRIPT > 中 的 部 分 就 是 描 述 语 言 程 序, 和HTML 类 似。 不
同 的 是 在HTML 中 这 一 部 分 由 浏 览 器 解 释 执 行, 在ASP 里 却 是 由Web
server 解 释 执 行。

---- 你 可 以 在 一 个.asp 文 件 里 使 用 好 几 个 不 同 的Script 语 言, 只
需 把 每 段 用< SCRIPT LANGUAGE=LanguageName > 和< /SCRIPT > 括 起 来 即 可。
也 可 以 包 含 在 浏 览 器 端 执 行 的Script, 将 描 述 语 句 注 释 起 来, 该
段 程 序 就 由 浏 览 器 来 解 释 执 行。

      HTML 标 记:

---- 在ASP 文 件 中 同 样 可 以 包 含HTML 语 言 的 各 种 表 达。

ASP 内 建 对 象

---- ASP 提 供 了 五 个 内 建 对 象 来 提 供 更 高 一 级 的Web 功 能, 它 们
是:

      Request 从 使 用 者 获 取 信 息
      Response 将 信 息 送 给 使 用 者
      Server 提 供Web server 工 具
      Session 存 储 在 一 个session 内 使 用 者 的 信 息
      Application 在 一 个ASP based application 内 让 不 同 使 用 者 共 享 信
      息

---- 用 的 最 多 的 是 前 三 个 对 象。Request 和Response 是 用 来 实 现Web
Server 与 浏 览 器 交 互。Request 的 一 个 重 要 方 法 是Form(), 其 作 用 是
提 取 浏 览 器 的 用 户 输 入 信 息。 例 如 你 的 主 页 中 有 一 个 文 本 编
辑 框, 你 已 指 定 它 的 变 量 名 为"name",form 的action 为 你 那 个asp 文
件。 下 面 的 语 句 就 可 以 取 得 用 户 填 在 里 面 的 内 容:

---- Request.Form("name")

---- 显 然, 这 避 免 了CGI 等 方 法 中 所 需 要 的 复 杂 编 程。

---- 输 出 要 用 到Response 的 一 个 重 要 方 法Write:

---- Response.Write "your message"

---- 该 语 句 向 用 户 浏 览 器 输 出 了 一 条 消 息。

---- Server 对 象 有 两 个 重 要 方 法:MapPath 和CreateObject。MapPath 用 来
将Web server 的 虚 拟 路 径 还 原 成 实 际 路 径;CreateObject 可 能 是 最 重
要 的 一 个 方 法, 用 来 产 生Server Component 的 对 象 实 例, 详 细 介 绍
见 下 文。

服 务 器 组 件(Server Component)

---- 通 过 服 务 器 端 的Script 和HTML, 可 以 很 容 易 地 生 成 动 态 网 页,
但 功 能 还 是 有 限。 例 如 不 能 连 接 服 务 器 数 据 库, 使 用 网 络 功 能
或 访 问 服 务 器 文 件 系 统 等。 为 了 解 决 这 一 问 题, 就 要 用 到COM 技
术, 即Component Object Model。 几 乎 所 有 的ActiveX 技 术 都 是 以 此 为 基
础, 通 过COM, 可 以 轻 易 地 使 用 其 它COM 组 件, 这 种 对 于Web 可 共 享
的COM 组 件, 就 是Server Component。 一 个Server Component 就 相 当 一 个 对
象, 提 供 属 性 和 方 法 来 使 用 服 务 器 资 源。Server Component 可 以 由
支 持ActiveX 的 任 何 第 三 方 开 发,ASP 本 身 也 自 带 了 五 个Server
Component, 可 以 直 接 使 用, 并 能 完 成 大 部 分 服 务 器 方 的 工 作。

---- 要 调 用Server Component, 必 须 先 利 用Server 对 象 中 的 方
 法CreateObject 产 生Server Component 对 象 实 例, 如 下 所 示:

---- Server.CreateObject(ProgID)

---- 这 里,ProgID 指 定 了 构 件 标 识, 构 件 可 以 是 各 种 形 式 的 可 执
行 程 序(DLL,EXE 等), 也 不 必 考 虑 它 的 位 置, 只 要 你 在Windows NT
? 或95) 中 登 记 注 册 这 些 程 序,COM 就 会 在 系 统 资 料 库(Registry) 里
维 护 这 些 资 料, 同 时 以ProgID 的 方 式 让 你 调 用。 登 记 用regsvr32 程
序, 可 以 用RegEdit 程 序 来 看ProgID。 构 件 产 生 后, 就 可 以 使 用 它 的
方 法 和 属 性 进 行 工 作。

---- 一 般 使 用Server 构 件 的 程 序 片 段 如 下:

, 产 生 构 件
          Set  obj = Server.CreateObject("ProgID")
   , 使 用 它 的 方 法
          obj.Method

---- ASP 提 供 了5 个 服 务 器 组 件, 其 中 最 重 要 的 两 个 是 数 据 库 访
问 构 件ADODB 和 文 件 访 问 构 件FileSystemObject, 第 五 节 中 的 例 子 将
说 明 它 们 的 使 用。

---- 对 于 一 些 特 殊 的 需 求, 开 发 者 还 可 以 自 己 开 发 服 务 器 构
件, 利 用VB 或VC 可 以 很 方 便 地 开 发 出 一 些 构 件, 然 后 登 记 这 些
构 件, 就 可 以 用Server.CreateObject 来 调 用。 另 外 还 有 许 多 站 点 上
有 开 发 好 的 构 件 供 下 载。 只 要 在 机 器 上 将 它 们 登 记 就 可 以 使
用 了。

ASP 应 用 实 例

---- 1. 利 用 文 件 访 问 组 件 制 作 主 页 访 问 计 数 器:

---- 现 在 许 多 主 页 上 都 有 一 个 计 数 器 来 记 录 访 问 该 主 页 的 人
数, 通 常 计 数 器 的 实 现 是 通 过CGI, 开 发 过 程 是 比 较 复 杂 的, 一
些 非 专 业 的 程 序 员 难 以 实 现。 而 通 过ASP 的 文 件 访 问 组 件File
Access Component (Scripting.FileSystemObject), 可 以 很 方 便 灵 活 地 产 生
一 个 计 数 器。 下 面 是 一 个 例 子, 其 原 理 是: 根 据page hits 生 成 计
数 文 件, 读 出 计 数 文 件 中 的 数 字, 再 根 据 它 动 态 地 调 出 代 表
12345 等 数 字 的 图 像, 基 本 过 程 和CGI 差 不 多, 但 在 送 出 图 像 时 不
同,CGI 是 通 过 程 序 来 动 态 生 成 一 整 幅 图 像, 而 我 们 的 方 法 是 将
已 存 在 于 机 器 中 的 图 像 一 张 一 张 地 调 出, 这 样 就 可 以 制 作 非
常 精 美 的 数 字 图 像。 其 程 序 片 段 为:

 < html >
 < %
 CountFile = Server.MapPath("/gjy"+"\count.txt")   * 计 数 文 件
 Set FileObj = Server.CreateObject("Scripting.FileSystemObject")  * 产 生 文 件
 访 问 构 件
 Set Out=FileObj.OpenTextFile(CountFile,1,FALSE,FALSE)    ‘ 打 开 文 件
 visitors = Out.ReadLine                                 ‘ 读 出 访 问 记 录
 visitors = visitors+1                                     ‘ 加 一
 Length = Len(visitors)                                   ‘ 该 调 出 的 图 像
数 目
 strURL=""                                            ‘ 图 像 的URL
 Do While Length >=1
      strURL="< IMG SRC=""/img/"+Mid(visitors,Length,1)+".gif"" >"+strURL
      Length=Length-1
 Loop                                                ‘ 生 成 图 像URL
 Set Out=FileObject.CreateTextFile(CountFile,TRUE,TRUE)
 Out.WriteLine(visitors)                                  ‘ 记 录 数 写 回
 % >
 < %=strURL% >                                        ‘ 输 出 图 像
 < /html >

---- 2. 利 用Data Access Component (ADODB.Connection) 访 问 服 务 器 数 据 库

---- 让 用 户 通 过 浏 览 器 查 询 服 务 器 的 后 端 数 据 库 是 许 多Web 服
务 提 供 者 必 需 的 服 务。ASP 通 过 内 置 的ADODB 组 件 实 现,ADO 既Active
Data Object, 同DAO 和RDO 一 样, 属 于 数 据 库 应 用 的COM 构 件, 不 同 的
是,ADO 是 专 门 针 对Internet 和Web 开 发 的, 并 对 此 进 行 了 优 化。 利
用ADO 查 询 数 据 库 的 步 骤 是:

      设 置DSN

---- ADODB 通 过ODBC 工 作, 因 此 要 在 你 的ODBC 中 设 置DSN( 数 据 源 名
);

      生 成ADODB 组 件 实 例

---- Set Connect=Server.CreateObject("ADODB.Connection")

      连 接 数 据 库

---- 利 用ADODB 的 成 员 函 数Open 和 先 前 设 定 的DSN 可 以 和 数 据 库 连


---- Connect.Open("DSN=dsnname;UID=userID; PWD=password")

      执 行 查 询

---- 指 定SQL 查 询 语 句:
---- SQL= select * from tablename
---- 执 行 查 询
---- Set RS=Connect.Execute(SQL)

      显 示 结 果

---- 完 整 的 程 序 片 段:

< %
 Set Connect=Server.CreateObject("ADODB.Connection")
         ‘ 产 生 组 件 实 例
 Connect.Open("DSN=dsnname;UID=userID; PWD=password")
   ‘ 连 接 数 据 库
 SQL= select * from tablename
 Set RS=Connect.Execute(SQL)
               ‘ 执 行 查 询
% >
< % Do While Not RS.EOF % >
                 * 显 示 结 果
    < %=RS(fieldname)% >
    < %
       Rs.MoveNext
       Loop
    % >

结 论

---- ASP 的 开 发 简 单 而 直 观, 开 发 过 程 可 以 方 便 地 和HTML 集 成;
利 用COM 技 术, 还 可 以 实 现 更 强 大 更 复 杂 的 功 能, 将 成 为NT 平 台
上 开 发Web 应 用 的 主 流 之 一。


中国计算机世界出版服务公司版权所有

--
☆ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 202.103.153.52]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店