程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 利用ISAPI開發CGI程序

利用ISAPI開發CGI程序

編輯:關於C語言

 

  ISAPI(Internet Server API)最初是微軟為IIS服務器所提供的一種CGI應用開發接口,其主要的目的也是為CGI開發提供好的開發接口,如果不負責的講ISAPI也可以認為是類似WinCGI的一種開發模式,只不過ISAPI通過映射宏來取得用戶表單傳送的參數。這一點上和MFC消息映射宏很相似。

當然ISAPI的推出同時還具備了很多其他的特性:

  • ISAPI以DLL動態連接庫的方式實現,所以加載較普通的EXE運行程序快,而且系統不會在使用完後馬上清除掉DLL在內存中的空間,所以再次使用時會獲得更快的速度。
  • ISAPI在調用者的內部以線程方式運行,所以和CGI進程相比較需要的運行空間也更小。
  • 在同一個DLL中可以集中多個處理函數,並且通過映射宏來指明不同的函數分別對什麼樣的請求來進行處理。
  • 由於與IIS的集成,所以可以利用ISAPI開發ISAPI過濾器。通過過濾器可以完成例如用戶權限檢測,數據加密,壓縮,日志等功能,IIS服務器的功能也可以通過ISAPI過濾器來得到增強。

  到目前為止,很多非M$的WEB服務器也都添加了對ISAPI的支持。

  在同一個DLL中可以集中多個處理函數,所以執行ISAPI的請求和執行普通CGI的請求有一點區別,在URL中需要填寫如下形式http://.../cgi-bin/test.dll?function_name&name=xxx&email=yyy,function_name表示的就是功能名稱,為了能夠正確處理你必須將其映射到DLL中的一個處理函數上。對與未映射的功能都將由一個默認函數處理。

VC4.2以上版本為創建一個ISAPI程序提供了向導程序,在新建工程時選擇ISAPI Extension Wizard並在以後的對話框中選擇創建服務器擴展和輸入相關的信息就可以了。一個最簡單的ISAPI程序至少包含了一個由CHttpServer類所派生的新類,並且在該類中進行了基本的映射,重載了BOOL GetExtensionVersion(HSE_VERSION_INFO* pVer)函數和提供了形式如void Default(CHttpServerContext* pCtxt)的成員函數。幸運的是向導程序已經為我們做好了這一切並創建了最基本的代碼。

Default函數用於處理沒有帶參數首先我們修改Default函數中的代碼,首先我們改寫其中的相關代碼成為如下:

void CTestisaExtension::Default(CHttpServerContext* pCtxt)
{
         //Print the <HTML> <BODY> tags.
         StartContent(pCtxt);
 
         //Print the title.
         WriteTitle(pCtxt);
 
         *pCtxt << _T("<p>演示</p>");
         *pCtxt << _T("<p>目前是Default成員函數其作用</p>");
 
         //Print </HTML> </BODY> tags.
         EndContent(pCtxt);

							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved