摘要:通過對開發工具的分析和對使用最為廣泛的服務器端程序標準CGI(Common Gateway Interface)、ASP(Active Server Page)和ISAPI(Internet Sever Application Programming Interface)比較,提出了運用C++ Builder開發ISAPI的Web服務器應用程序。利用C++ Builder對數據庫的強大支持能力和強大的網絡編程功能,開發安全、高效、可靠的Web服務器應用程序。
關鍵詞:ISAPI;安全;控件;BDE(Borland Database Engine);數據庫
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)27-1998-01
Using C++ Builder6 to Develop ISAPI for Web Server Program
DING Peng-fei
(Xi'an Institute of Post Telecommunications,Xi'an 710121, China)
Abstract:In this paper,we anlynazed the advantages of development tools,compared the characters of CGI(Common Gateway Interface)、ASP(Active Server Page) and ISAPI(Internet Sever Application Programming Interface) which is the most popular server teminanl progam standard.Using the good abilty of suporting database and the network programming to develop safe、high efficient and credible Web server application program.
Key words: ISAPI; safe; components; BDE; database
通過對C++ Builder開發工具的分析,使用最為廣泛的Web服務器端程序標準CGI(Common Gateway Interface,公共網關接口 )、ASP(Active Server Page)、ISAPI(Internet Sever Application Programming Interface)的比較,提出了利用C++ Builder開發ISAPI的Web服務器應用程序。
1 C++ Builder開發工具的比較
C++Builder沿襲了Delphi的優點,繼承了visual c++、Borland c++等開發工具的優點,在底層控制方面表現出色。C++Builder中嵌入了Delphi中所使用的高效率的VCL(Visual Component Library可視化組件庫)。
C++Builder具有強大的數據庫應用開發功能,它提供了強大的數據庫處理功能。C++Builder具有強大的網絡編程功能,它具有眾多的Internet應用開發控件,它們基本涵蓋了Internet應用的全部功能。
2 使用最為廣泛的服務器端應用程序標準CGI、ASP和ISAPI的比較
目前,使用最為廣泛Web服務器端程序標準有CGI、ASP、ISAPI。ASP編程簡單,但執行效率較低。ISAPI目前已經成為標準的技術,這種技術使用一些專有的API,使服務器接受客戶的寫的DLL程序,并將常駐內存。在裝入DLL后,服務器可以通過主進程中的線程執行單個請求,不像在CGI應用程序那樣,必須重新啟動一個EXE。
3 使用C++ Builder開發ISAPI DLL的相關組件介紹
C++Builder組件Internet頁中和Web服務器應用程序相關的組件有TPageProducer組件、TDataSetPageProducer組件、TQueryTableProducer組件和TDataSetTableProducer組件,這些HTML制作器組件可以方便建立HTML頁面。
通過研究發現,利用TPageProducer的HTMLFile屬性設置該組件的HTML文件,同時,將該文件中需要顯示數據庫信息的地方用特殊標記予以表示,并在應用程序中將特殊標記用合適格式的數據庫數據進行替換。這樣可以利用HTML編輯器制作布局美觀的HTML文件,同時利用應用程序動態替換HTML中的特殊標記,從而快速構建動態交互網站。
4 利用C++ Builder創建ISAPI的Web服務器應用程序
在C++ Builder6中創建ISAPI的Web服務器應用程序的步驟:
1)從“File”菜單中選擇“New/other”選項,在彈出的對話框中選擇New頁中的Web Server Applicatio項,在彈出的對話框中選擇“ISAPI/NSAPI Dynamic Link Library”,單擊“OK”,并保存工程。
2)在步驟(1)結束后,將會產生Webmodule容器,在該容器中添加下面的組件并設置相應的屬性:
將Table組件并放置于Webmodule容器中,將其Database屬性設置成你的數據庫別名或者數據庫的絕對路徑。將TableName屬性設置成數據庫表名。
將PageProducer組件并放置于Webmodule容器中,將其HTMLFile屬性設置成要反饋給客戶端的包含路徑的HTML文件。
3)在程序框架上創建ActionItem:
在產生的Webmodule容器中,雙擊鼠標左鍵激活Action Editor對話框,在這個對話框中單擊Add按鈕為程序添加一個ActionItem。
在Action Editor中選中新建的ActionItem,在Object Inspector設置ActionItem的屬性,Enabled設置為true,MethodType設置為mtAny,Default設置為ture。
4)為ActionItem編寫事件代碼:
選中ActionItem項,在Object Inspector中選擇Event頁,在OnAction項中雙擊鼠標左鍵,彈出該事件的相應函數,在該函數中寫入該事件的相應代碼。
5)將此項目命名保存,然后編譯生成dll的動態鏈接庫。此dll文件即是我們需要的Web服務器應用程序。
5 Web服務器應用程序如何判斷客戶端的請求以及如何獲取客戶端的信息
在ActionItem有多個請求的響應函數時,Web服務器應用程序如何判斷請求呢?通過下面的例子加以說明。
if(Request->ContentFields->Text.Pos(\"ShowLeaveWord\")!=0)
{ShowLeaveWord(Request,Response);}
else
{
if(Request->ContentFields->Text.Pos(\"AdminReg\")!=0)
{AdminReg(Request,Response);}
}
在這個例子中,如果客戶端的請求時有按鈕的name值為ShowLeaveWord的網頁提出的,則Web服務器應用程序調用ShowLeaveWord(Request,Response)。Web服務器應用程序正是通過判斷Text.Pos()的值是否不為0來判斷是由那個按鈕提出的請求,從而調用不同的響應函數。
獲取客戶端的提交信息:客戶端提出請求的網頁的Method可以設置成Post或Get。如果請求頁的Method值為Post時,Web服務器應用程序通過Request的ContentFields屬性獲取客戶端的提交信息,如這個語句“temp=Trim(Request->ContentFields->Values[\"title\"]);”的功能是將name為title的文本框(或文本域等)中的輸入值賦給temp1。如果請求頁的Method值為Get時,Web服務器應用程序通過Request的QueryFields屬性獲取客戶端的提交信息。
6 結束語
以上所介紹的方法是開發Web服務器應用程序的基本方法。利用C++ Builder開發基于基于網絡環境下的應用程序不失為一種有效的方法,與利用Visual C++、ASP和Delphi等開發工具相比,具有自己獨特的優勢。
參考文獻:
[1] 劉濱.C++ Builder4高級編程實例精解[M].北京:國防工業出版社,2000.
[2] 常新功.用ISAPI編寫Internet服務器應用程序[J].微機發展,2002,12(2):76-78.
[3] 熊錫義.動態網頁設計[M].北京:清華大學出版社,北京交通大學出版社.2004.