C++Builder开发Web应用程序

来源:yesky 作者:张云潮 2007-11-12 出处:pcdog.com

iis  web服务器  操作系统  
上一页 1 2 

  C++Builder Web应用程序的一个关键部件是Web Module ,它收集和管理着一组动作项(TwebActionItem对象),用TwebRequest对象来描述HTTP请求消息,并根据HTTP请求消息来指派其中一个动作去响应客户的请求,实际上就是填写TWebResponse对象的Content特性。如图4所示:

C++Builder开发Web应用程序(图四)



图4:Web应用程序的逻辑机构

  由此可见,一个Web应用程序应当创建若干个动作项,以供Web调度器(TwebDispatcher)指派。C++Builder 是用一个专门的动作项编辑器来创建和管理动作项的。

  右键单击Web模块,在弹出的菜单中选择"Action Editor"命令。然后添加一个动作项,通过它的PathInfo属性可以设置动作项在Web服务器上的入口路径,而default属性设置当PathInfo属性为空时该动作项是否执行。如图5:

C++Builder开发Web应用程序(图五)

图 5: 动作项编辑器

  现在,我们可以为动作项编写代码了:

void __fastcall TWebModule1::WebModule1WebActionItem1Action(
TObject *Sender, TWebRequest *Request, TWebResponse *Response,
bool &Handled)
{
AnsiString cont = AnsiString("<HTML><BODY><H3>Hello!</H3>");
cont = cont + AnsiString("
");
cont = cont + AnsiString("<H2>Now is ") + TimeToStr(Time()) +
AnsiString(" </H2>");
cont = cont + AnsiString("</BODY></HTML>");
Response->Content = cont;
}

可以看出,在处理动作项的OnAction事件的句柄中,可以通过Request参数来访问客户的请求消息。不过,这里只关心Response参数。要相应客户的请求,实际上就是把用HTML描述的页面赋值给Response的Content属性,Web调度器会自动把相应结果传递给Web服务器,再由Web服务器传递给客户。

  至此,一个简单的Web应用程序创建完毕,现在通过Web浏览器测试它。要注意的是Web应用程序所在路径应有可执行权限。

C++Builder开发Web应用程序(图六)


图6: 一个动态页面的示例

  创建一个用于处理用户输入的Web应用程序

  让我们在上面例子的基础上继续创建一个用于处理用户输入的Web程序。

  再添加一个动作项如图7所示:

C++Builder开发Web应用程序(图七)

图7: 再增加一个 TWebActionItem

  在WebModule1放TPageProducer 对象,用它利用事先准备好的HTML模板生成HTML文档。如图8所示:

C++Builder开发Web应用程序(图八)

图8: 添加 TpageProducer到 WebModule1.

  可以利用Microsoft FrontPage 做一个如图9的用户输入表:

C++Builder开发Web应用程序(图九)

图9: 用 Microsoft FrontPage. 做一个用户输入表

  图9的HTML代码如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1251">
<meta name="GENERATOR" content="Microsoft FrontPage 2.0">
<title>Untitled Normal Page</title></head>
<body bgcolor="#FFFFFF">
<p> </p>
<form method="GET">
<p>What is Your name?<font size="4">
<input type="text" size="20" name="T1"></font></p>
<p>What is Your e-mail?<font size="4">
<input type="text" size="20" name="T2"></font></p>
<p><font size="4"><input type="submit" name="B1"
value="Submit"><input type="reset" name="B2"
value="Reset"></font></p>
</form>
</body>
</html>

  把上面的代码拷贝到TPageProducer 的HTMLDoc 属性编辑器中。

  现在可以为TWebActionItem2的OnAction 事件写代码了:

void __fastcall TWebModule1::WebModule1WebActionItem2Action(
TObject *Sender, TWebRequest *Request, TWebResponse *Response,
bool &Handled)
{
Response->Content=PageProducer1->Content();
}

编译好后,在浏览器中测试如图10:

C++Builder开发Web应用程序(图十)

图10: 利用Web应用程序生成的用户表单

  接着,我们处理用户输入,把用户输入写入一个新的HTML页面。这就需要再增加一个TpageProducer组件。如图11:

C++Builder开发Web应用程序(图十)

图11: 添加 PageProducer2 用于处理用户输入页面

  把以下代码添加到 HTMLDoc 属性中:

<html>
<head>
<title>Thank You!</title>
</head>
<body >
<p>您好 <#T1>!</p>
<p>感谢你添写了我们的调查表单,你的email地址为
<#T2>,以后我们会与你联系
!</p>
</body>
</html>

  上面代码是一个HTML模板,它包括二个特殊的标识<#T1> 和<#T2>,同时它们也是用户输入表中两个编辑域的名称,在产生的HTML页面中将被用户数据所代替。这就需要处理PageProducer2的 OnHTMLTag事件。

void __fastcall TWebModule1::PageProducer2HTMLTag(
TObject *Sender, TTag Tag, const AnsiString TagString,
TStrings *TagParams, AnsiString &ReplaceText)
{
ReplaceText = Request->QueryFields->Values[TagString] +
Request->ContentFields->Values[TagString];
}

  继续增加一个动作项 TwebActionItem WebActionItem3 ,其PathInfo="/t3", OnAction 事件代码如下:

void __fastcall TWebModule1::WebModule1WebActionItem3Action(
TObject *Sender, TWebRequest *Request, TWebResponse *Response,
bool &Handled)
{
Response->Content=PageProducer2->Content();
}

  当用户按下Submit后,PageProducer2 获得相应呢?修改PageProducer1 的HTMLDoc 属性如下:

<form method="POST"
action="http://sopdrilling.com.cn/bcbtest/project1.exe/t3">

  编译后测试,填写完表单后按下Submit按钮,结果如下:.

C++Builder开发Web应用程序(图十二)

  图12: 处理用户输入后的结果

  以上仅仅是用C++Builder编写Web应用程序的开始,但已经有了很好的思路,相信大家可以在此基础上做更深入地研究,编写出更好的程序。



上一页 1 2 
上一篇:在C++Builder中使用Delphi文件
下一篇: