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