Oracle Web Agent是当Web Listener收到一个动态文档请求时执行的CGI程序。此程序登录进数据库并执行作为URL的一部分而指定的PL/SQL存储过程。
作为开发Web Agent的PL/SQL工具,WebServer Developer''s Toolkit包括以下包:
HTP (超文本过程)
和 HTF
(超文本函数) 简化了在用户的PL/SQL代码里 生成HTML标记的工作。
HTP和HTF自动生成由Oracle Web检索的HTML标记。
OWA_UTIL 包含了能使程序员更快速构造HTML输出的实用函数。
注意: Web Agent 也包括一些叫OWA的PL/SQL包,它包括一些由Web Agent调用的进行诸如设置CGI环境变量和从PL/SQL表中提取由PL/SQL代码生成的输出等实用功能。一个PL/SQL开发员不能直接调用OWA包,虽然它可以用用户通过URL直接调用。
Oracle WebServer Developer''s Toolkit的进一步信息见第四章。
谁使用Oracle Web Agent
Oracle Web Agent 可以被以下人使用:
想开发与oracle7互操作的Web应用的程序员。Oracle Web Agent允许程序员创建 PL/SQL过程来进行数据库操作并将结果格式化为HTML文档。这些文档被返回Web 客户端。所以,程序员需要了解以下知识:
用于生成HTML格式文档的超文本函数和超文本过程。
PL/SQL过程语言的基础。
另外,以下知识对于程序员也非常重要:
哪些公共网关接口的变量 对于 PL/SQL应用是有效的,以及如何存取它们。
Web Agent如何处理参数 (本章介绍)
如何使用OWA_UTIL PL/SQL实用包 (, "The WebServer Developer''s Toolkit".中介绍)
想安装和设置Oracle Web Agent,并用管理员工具维护Web Agent的系统管理员。
管理员需要了解以下知识:
如何创建,修改和删除Web Agent服务。
在哪里安装由Web Agent提供的开发工具PL/SQL包。
下述信息对管理员也十分有用:
Oracle Web Agent如何工作 (本章讲述)
Web Agent如何处理错误 (本章讲述)
3.1 Oracle Web Agent如何工作
Oracle Web Agent使你能用开发工具箱创建PL/SQL存储过程来存取Oracle7的数据,动态生成来自那些数据的HTML文档,并将文档返回给客户端。
下面描述一下Oracle Web Agent是如何一步一步工作的:
1. 用户从浏览器提交一个URL。
用户以下列方法之一提交URL:
通过从HTML页面上选择一个链接
在其浏览器的打开URL框中指定一个URL
提交HTML表格
此动作触发了一个与URL相关的GET或POST请求方法操作。请求方法使用HTTP协议传给了Web Listener。
2. Web Listener 启动了 Web Agent.
Web Listener判断此URL是否与Oracle Web Agent有关(通过抽取URL的/owa部分),并调用Web Agent。为与CGI标准兼容,Web Listener使几个环境变量对Web Agent有效.
3. Web Agent连接到Oracle7 Server.
为连接到Oracle7 Server,Web Agent要求一些诸如连接到哪个服务器,使用什么用户名和口令等信息。这些信息作为Web Agent的一部分,存储在位于OWS管理目录下的文件owa.cfg 中。Web Agent通过解析环境变量SCRIPT_NAME来决定使用哪个服务,环境变量SCRIPT_NAME是由Web Listener根据CGI 1.1说明书设定的。
Web Listener从URL中/owa 前面的路径段推出这个环境变量的值。例如,如果/ows-bin/hr/owa是URL的前边部分,那么hr就是要使用的服务。
有关如何设置Web Agent service的进一步的内容, 请见本章后面的"Web AgentService"一节.
4. PL/SQL 过程被调用
连接到数据库后,Web Agent调用相应的PL/SQL过程,其名字通过解析环境变量PATH_INFO获得。
如果PL/SQL过程要求参数,这些参数已经由Web Listener通过环境变量QUERY_STRING或标准输入(这依赖于请求方法是"GET"还是"POST")传给了WebAgent。Web Agent将把这些参数传给PL/SQL过程。
有关PATH_INFO, SCRIPT_NAME,和QUERY_STRING 以及Oracle Web Agent如何使用他们的内容, 请见本章后面的"Web Agent如何使用CGI环境变量"一节.
5. PL/SQL过程执行, 生成 HTML 文档.
在Developer''s Toolkit的帮助下,PL/SQL过程从Oracle7数据库中提取出数据并在PL/SQL表中生成了HTML文档。
有关Developer''s Toolkit的内容请见第四章"Oracle WebServer Developer''s Toolkit."
6. Web Agent将生成的HTML文档传给Oracle Web Listener.
如果PL/SQL过程成功结束,Web Agent将从PL/SQL表里取出生成的HTML文档,并把它发送到标准输出,那里是Web Listener期望CGI应用把他们的输出发送到的地方。
如果PL/SQL过程返回错误,Web Agent则把程序定义的出错页面发送到标准输出。
有关如何处理错误的内容请见"Oracle Web Agent Error Handling"一节。
7. Web Listener把 HTML文档发送回原发出请求的浏览器
Web Listener使用HTTP将HTML文档发还浏览器。浏览器并不知道请求的文档是在飞行中生成的,把它象任何其他HTML一样显示在屏幕上。
Web Agent服务 Service
因为人们希望单个Web Listener能够访问多个数据库或一个数据库里的多个模式,Oracle Web Agent支持服务的概念。我们用下面的例子描述一下服务的概念:
公司A想让他们存储在Oracle7数据库中的数据可以被公众通过Oracle Web Listener访问。然而公司内不同部门对数据库以用户名为分割的不同部分(模式)有访问权限。
所以,人力资源部和财务部使用不同的用户名/口令组合来登录数据库。如果他们都想用使用Oracle Web Agent的CGI应用访问他们的数据,Web Agent需要使用正确的用户名/口令来登录数据库。采用这种方案,含有配置信息的owa.cfg文件中包含两个服务,HR 服务和AP服务。每个服务有相关的用户名/口令,ORACLE_HOME参数,和ORACLE_SID参数。当一个来自浏览器的请求到来时,Web Listener从URL中抽取出服务名并读取owa.cfg文件找出将使用的参数。
为连接到Oracle7服务器,Web Agent需要在Web Agent服务中指明以下信息:
username 用户名
password 口令
ORACLE_HOME
ORACLE_SID (仅对本地数据库)
SQL*Net V2 Service Name or Connect String (仅对远程数据库)
Administration Utility允许管理员显示,创建,修改或删除Web Agent服务。用创建
Web Agent的表格,你不需要直接修改配置文件owa.cfg。参见 "Creating or Modifying Web Agent Services," 。
下面是一个owa.cfg文件中Web Agent服务项的例子,每个参数有相应的解释。
Developer''s T#
(
owa_service = es
(
owa_user = www_es
)
(
owa_password = tiger
)
(
oracle_home = /opt/oracle7
)
(
oracle_sid = esprod
)
(
owa_err_page = /es_err.html
)
(
owa_valid_ports = 8000 8888
)
(
owa_log_dir = /opt/oracle7/ows/log
)
(
owa_nls_lang = AMERICAN_AMERICA.US7ASCII
)
)
owa_service
Web Agent 服务的名字
owa_user
Web Agent连接数据库用的数据库用户名。
owa_password
Web Agent连接数据库用的数据库口令。
oracle_home
Oracle7代码树在文件系统中的位置。它应该是Web Agent服务连接到的数据库的ORACLE_HOME,除非Web Agent设置为通过SQL*NET连接到一个远程数据库。这种情况下,指定Web Agent所在的ORACLE_HOME。Web Agent总是安装在ORACLE_HOME目录或其子目录下。
oracle_sid
将连接到的数据库的系统ID名。连接到远程数据库时,不要使用。
owa_err_page
Web Agent调用的PL/SQL过程发生错误时,Web Agent返回的HTML文档的路径。这是个实际路径,而非Web Listener配置中的那种虚拟路径。
owa_valid_ports
Web Agent将服务的有效的Web Listener网络端口。
owa_log_dir
Oracle Web Agent写出错文件的目录。出错文件的名字为service_name.err。
owa_nls_lang
Web Agent连接的Oracle7数据库的NLS_LANG。若不指定,Web Agent管理程序当服务执行时寻找数据库的NLS_LANG。
Web Agent如何使用CGI环境变量
Web Agent使用的环境变量见表3-1:
变量
包含
REQUEST_METHOD
GET 或 POST
PATH_INFO
将调用的PL/SQL过程的名字。
SCRIPT_NAME
包含登录Oracle7时用的Web Agent和服务 。
QUERY_STRING
PL/SQL过程的参数(仅对GET方法。POST方法的参数通过标准输入传递。)
表 3 - 1. Oracle Web Agent使用的CGI 变量
下面是一个典型的URL如何被与CGI 1.1说明书兼容的Web Listener解析的例子。
http://www.nhl.com:8080/ows-bin/nhl/owa/hockey.pass?person=Gretzky
1. 子串 http://www.nhl.com:8080 表明Web浏览器要用HTTP协议连接到www.nhl.com主机的端口8080上。
2. 当运行在www.nhl.com上的Oracle Web Listener接收到请求,子串/ows-bin/nh