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