1.3 利用ISAPI开发CGI程序
一个最简单的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);
}
然后用以下方式调用:http://.../cgi-bin/test.dll?Default或http://.../cgi-bin/test.dll?。你就会看到输出的HTML页面了。
<FORM ACTION="test.dll?Add" METHOD=POST>
<INPUT NAME="name">
<INPUT NAME="id">
<INPUT TYPE=SUBMIT>
</FORM>
上面表单要求用户输入了用户名和ID号,所以传送的数据形式形式应该如同:http://.../test.dll?Add&name=xxx&id=yyy,我们可以通过处理命令映射宏来指明处理命令的函数,然后通过参数映射宏对数据进行分解,分解后的数据将会存放入指定的变量。使用方法为:
ON_PARSE_COMMAND(Add, CTestExtension, ITS_PSTR ITS_I4)
ON_PARSE_COMMAND_PARAMS("name id")
ON_PARSE_COMMAND宏中需要指明函数名,类名和参数类型列表,ON_PARSE_COMMAND_PARAMS宏中需要根据前一个宏中所列出的参数列表来指明表单中的变量名称列表。最后一步就是定义一个名称与请求URL中?后命令名称相同的成员函数,参数的设置要与ON_PARSE_COMMAND宏中的参数列表定义相符合,在这个例子中为:
void CTestExtension::Add(CHttpServerContext* pCtxt,LPTSTR pszName,int iID)。参数类型列表中可以使用下面的类型后面为该类型的说明:
ITS_EMPTY 无数据
ITS_PSTR 字符串LPCSTR
ITS_I2 short
ITS_I4 long
ITS_R4 float
ITS_R8 double