Oracle有多種方法在網頁上顯示數據庫中的數據,如JSP或XML編程。在Oracle8i/9i中應用開發人員可以自由使用Java或PL/SQL,把PL/SQL代碼嵌入網頁中實現業務邏輯的頁面就是PSP頁面。
Oracle 數據庫中的Oracle HTTP Server組件就是Apache服務器,在Oracle8i/9i中接受PL/SQL調用的Web組件就是Apache的mod_plsql模塊,該模塊為Oracle數據庫產品,在Oracle9iAS中的Oracle Portal中同樣包含,本文不介紹Oracle9iAS中的Web服務。mod_plsql模塊模塊提供了在Apache、Oracle Portal和數據庫之間的嚴密的綜合性和安全性,并改善交互作用和經Web請求調用的程序的執行情況。
Portal開發工具箱(Portal Development Kit,PDK)的兩個主要特點是完全用PL/SQL實現的PDK -PL/SQL和用Java實現調用接口的PDK-Java。它們都能訪問Web資源或數據庫服務器,兩者都能調用Java程序,如果Java程序被導入數據庫中,可以從PL/SQL調用它們。下面是構成全部Portal環境的組件列表:
1.Oracle Database Aerver
2.HTP/HTF包和工具(PL/SQL Web Toolkit)
3.Portal procedures(Portal進程)
4.Portal Schema(數據庫表)
5.Oracle 9iAS Application Server(及Logon Server)
6.Apache HTTP Server
7.Mod_PLSQL Apache Plug-in
8.Portalets
9.External images(外部圖象)
10.建立應用程序需要的Tables和數據
Oracle 9iAS Application Server和Apache HTTP Server是結構中的底層部分,它們成為開發中的最重要的部分之一。Listener和Mod_PLSQL網關是配對的,Listener自身是個完整的Apache HTTP Server,它的作用是管理HTTP樣式請求的進程。Mod_PLSQL網關負責交換數據進出數據庫。Mod_PLSQL網關包括為了和Net8交流的全部必要信息。Oracle把Apache HTTP Server和Mod_PLSQL網關都作為Oracle9iAS和數據庫安裝的一部分進行安裝。
下面說明當在瀏覽器瀏覽網址http://localhost/pls/simpledad/show時(結果如圖1所示)服務器的響應過程。
Apache監聽器是一個HTTP服務,處理所有通過請求端口(默認端口為80)的請求,請求首先路由到本地主機。因為請求字符串中包含"pls",即虛擬目錄,該字符串(表示請求的實際字符串是可配置的,此處為默認配置)的定義在$ORACLE_HOMEapachemodplsqlcfgplsql.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”。
需要注意的是,在Portal體系中,可以由文件夾和文檔來管理用于顯示在瀏覽器中的圖象和多媒體,而本文在僅安裝Oracle數據庫時,圖片等多媒體類型的文件必須存放在“$ORACLE_HOMEapachemodplsqlcfgimages”路徑下,并且在PSP頁面中調用時使用路徑“admin_/images/”。
PL/SQL語言已經長時間作為Oracle數據庫和開發環境的基礎,Oracle本身是使用PL/SQL建立的,并且Oracle已經建立了從PL/SQL過程直接訪問HTML的方法,但太依賴于PL/SQL代碼會使后來的可能不熟悉PL/SQL代碼的開發者難于維護應用程序。使用PL/SQL頁面表示層的優勢之一是實現了表示層與業務邏輯的分離,業務邏輯以存儲過程的形式存儲在數據庫中,優勢之二是PL/SQL頁面頁面的運行取決于對數據庫過程的調用,獨立于應用服務器,在數據庫緩存服務器支持下運行性能好。
設置Apache Web 服務器中的mod_plsql模塊來接收瀏覽器對數據庫中的存儲過程的調用。Oracle HTTP Server組件已經包含在Oracle9.0.1服務器中,使用缺省的端口和主機參數,配置文件$ORACLE_HOMEapacheapacheconfhttpd.conf不用修改。需要為Apache Web 服務器設置DAD,步驟如下:
1.瀏覽網址http://202.99.18.136,也是本機地址或Apache服務器的主機地址.如圖2所示。
2.打開組件mod_plsql的鏈接,如圖3所示。
3.點擊"網關數據庫訪問描述符設置",如圖4所示。可以將新的數據庫訪問描述符添加到現有列表。此處配置的信息包括:用戶名、口令、連接字符串、文檔上載路徑和過程、需要進行 long raw 上載的文件擴展名、路徑別名和相關過程,以及確認連接的信息。本例中修改SIMPLEDAD,如圖5所示。
4.在SIMPLEDAD的編輯頁面中,修改Oracle 用戶名為cf,Oracle 口令為cf,Oracle 連接字符串為db:1521:o90,如果網關在所連接的數據庫以外的其他Oracle主目錄中運行,則需要TNS連接字符串。此外,也可使用以下格式的組合字符串來替代TNS連接字符串,即
5.下面設置全局網關。在如圖3所示的網關配置菜單中選擇"網關全局設置",如圖6所示,將第5步中編輯修改的數據庫訪問描述符SIMPLEDAD作為默認全局網關的DAD。
本實例的數據庫對象都在cf/cf操作模式下。數據庫環境為Oracle9.0.1,帶有Oracle HTTP Server安裝(已自動安裝mod_plsql模塊),未安裝Oracle9iAS及其任何組件。
1.建立表student并插入7條記錄。
2.以帳戶cf/cf建立存儲過程show_student。
3.編寫PSP網頁,文件名為show.psp。
程序說明:第1行標識出該頁為PL/SQL語言文件。第2行指出即將為該頁面生成的PL/SQL過程名,最后PL/SQL頁面將要調用數據庫中的該過程來顯示數據,如果省略該行則以文件名作為缺省的過程名。第3行為即將生成的過程的輸入或輸出參數,以<%@ %>標記說明,default="1001"說明該參數為可選參數,注意,即使是數值數據類型,也要用雙引號括起。第4至11行為該PSP網頁的全局參數,同時也是過程show的局部參數,以<%! %>標記表示。接下來以全局參數調用已經存儲在數據庫中的過程show_student,程序代碼前后分別被置以<%和%>標記。當然也可將第二步中的過程show_student的編碼直接寫入以<%和%>標記括起的程序中,但是為了實現代碼與內容的分離,盡量不要把它們混在一起。這樣做的好處是分離業務邏輯與表示層,使得程序結構清晰,因為可能還有其它PSP頁面調用該存儲過程。在頁面顯示部分對全局參數的調用格式為標記<%= %>,這也是輸出標記,該標記可以實現字符串的連接和變量的計算,如通過psp_id的加減1達到翻頁目的。在鏈接標記