Portal開發工具箱(Portal Development Kit,PDK)的兩個主要特點是完全用PL/SQL實現的PDK -PL/SQL和用Java實現調用接口的PDK-Java。它們都能訪問Web資源或數據庫服務器,兩者都能調用Java程序,假如Java程序被導入數據庫中,可以從PL/SQL調用它們。下面是構成全部Portal環境的組件列表:
Apache監聽器是一個HTTP服務,處理所有通過請求端口(默認端口為80)的請求,請求首先路由到本地主機。因為請求字符串中包含"pls",即虛擬目錄,該字符串(表示請求的實際字符串是可配置的,此處為默認配置)的定義在$ORACLE_HOME/apache/modplsql/cfg/plsql.conf文件中,Apache根據這一文件識別出"pls"是一個PL/SQL請求并且把執行任務傳遞給PL/SQL模塊(mod_plsql)。mod_plsql隨后查看網址字符串的剩下部分。"simpledad"是數據庫訪問描述符(Database access Descriptor,DAD),它給出關于mod_plsql怎樣被連接到數據庫中去執行請求的信息,可以配置多個DAD,它包含用戶名、密碼、認證方式、路徑別名等信息。 “show”為mod_plsql執行的PL/SQL過程,假如在URL的最后沒有指定過程名,則mod_plsql會查找默認的過程名,此默認過程名也可在DAD中設置。過程運行并發送結果(使用PL/SQL Web Toolkit生成的)到HTTP緩沖區中,當過程執行完后,HTTP緩沖區的內容通過mod_plsql和Apache返回到瀏覽器。過程可以直接使用PL/SQL Web Toolkit編程,也可以通過loadpsp命令行工具把PSP頁面加載到數據庫中生成過程,瀏覽PSP頁面只需在URL中以過程名結尾即可,不需擴展名“.psp”。
設置Apache Web 服務器中的mod_plsql模塊來接收瀏覽器對數據庫中的存儲過程的調用。Oracle HTTP Server組件已經包含在Oracle9.0.1服務器中,使用缺省的端口和主機參數,配置文件$ORACLE_HOME/apache/apache/conf/httpd.conf不用修改。需要為Apache Web 服務器設置DAD,步驟如下:
3.點擊"網關數據庫訪問描述符設置",如圖4所示。可以將新的數據庫訪問描述符添加到現有列表。此處配置的信息包括:用戶名、口令、連接字符串、文檔上載路徑和過程、需要進行 long raw 上載的文件擴展名、路徑別名和相關過程,以及確認連接的信息。本例中修改SIMPLEDAD,如圖5所示。 圖4 4.在SIMPLEDAD的編輯頁面中,修改Oracle 用戶名為cf,Oracle 口令為cf,Oracle 連接字符串為db:1521:o90,假如網關在所連接的數據庫以外的其他Oracle主目錄中運行,則需要TNS連接字符串。此外,也可使用以下格式的組合字符串來替代TNS連接字符串,即::。是運行數據庫的主機名,是TNS監聽程序監聽的端口號,是數據庫例程的Oracle SID名稱。為了獲取最佳性能,請保持網關的數據庫連接池處于打開狀態。網關使用"文檔訪問信息"向與此數據庫訪問描述符關聯的數據庫上載或下載文檔。默認情況下所有文檔都將以BLOB類型上載。通過在Long Raw字段中指定以逗號分隔的文件擴展名,可以覆蓋此默認設置。此字段的"*"值將使所有文檔以Long Raw 數據類型上載。"文檔訪問過程"指定用于訪問文檔的虛擬路徑。"文檔訪問過程"字段指定網關處理文檔請求所調用的過程。此處都使用缺省值。假如通過此網關連接的應用程序支持將絕對路徑映射到要害字,可以指定要害子,本例中此處為空。設置完該頁面后返回上級頁面。 圖5
CREATE TABLE student (ID NUMBER(5,0) NOT NULL ,NAME VARCHAR2(15) NOT NULL ,DOB DATE ,GENDER VARCHAR2(2) DEFAULT '男' ,CLASSYR NUMBER(4,0) DEFAULT 2002 NOT NULL ,MAJOR VARCHAR2(25) ,EMAIL VARCHAR2(50) ,PHOTO VARCHAR2(100) ); alter session set nls_date_format = 'dd-mon-yyyy'; alter session set nls_date_language = 'AMERICAN'; insert into student values ( 1001,'趙鵬','14-JUL-1975','男',2001,'History', '1001@NetUniversity.org','u1001.gif') / insert into student values ( 1002,'劉宇','08-OCT-1975','女',2001,'Science', '1002@NetUniversity.org','u1002.gif') / …………
2.以帳戶cf/cf建立存儲過程show_student。
create or replace procedure show_student (p_id in out student.id%TYPE ,p_name out student.name%TYPE ,p_dob out student.dob%TYPE ,p_gender out student.gender%TYPE ,p_classyr out student.classyr%TYPE ,p_major out student.major%TYPE ,p_email out student.email%TYPE ,p_photo out student.photo%TYPE ) IS CURSOR get_student(p_id in student.id%TYPE DEFAULT 1001) IS SELECT * FROM student WHERE id = NVL(p_id,1001); student_row student%ROWTYPE; BEGIN IF p_id<1001 THEN p_id:=1001; END IF; IF p_id>1007 THEN p_id:=1007; END IF; OPEN get_student(p_id); FETCH get_student INTO student_row; CLOSE get_student; p_name := student_row.name; p_dob := student_row.dob; p_gender := student_row.gender;