用C++ Builder开拓Web措施
副标题#e#
Web应用措施是运行在处事器端的可执行措施或动态链接库。它们可以响应用户要求,动态发生超文本页面,并将信息提供应客户欣赏器。
由于Web应用措施的尺度并不沟通,措施的写法各异,这样就给开拓者造成不小的困扰,因为开拓人员不太大概相识每一种尺度的写法。而C++ Builder可以很好地办理这个问题。 C++ Builder将Web应用措施的开拓封装成组件,使开拓者面临一致的开拓界面,利用一致的开拓道理,惟一差异的处地址于开始发生措施时所选择的措施布局,至于措施的编写细节和方法都一模一样。本文通过两个实例先容操作C++ Builder开拓Web应用措施的详细步调。
简朴的Web措施
首先,点击C++ Builder IDE 的菜单项File|New option,选中 Web Server Application 图标.
由于CGI(Common Gateway Interface)运行时需要一个独立的历程,而ISAPI/NSAPI动态链接库运行时要映射到Web处事器历程中,所以ISAPI/NSAPI需要的资源比CGI要少。但ISAPI/NSAPI动态链接库的这个特点为调试措施造成了必然的坚苦,因此较好的步伐是先建设一个CGI措施,并举办调试,然后再把它转化成ISAPI/NSAPI动态链接库。所以在这里选择"CGI Stand瞐lone executable",生成一个TWebModule 工具。
Web应用措施实际上是Web处事器在成果上的扩展,就仿佛Windows应用措施是Windows在成果上的扩展一样。当Web应用措施从Web处事器检索到一个HTTP请求动静时,就对HTTP请求动静举办阐明,生成HTML页面通报给Web处事器,再由Web处事器通报给客户。C++ Builder Web应用措施的一个要害部件是Web Module,它收集和打点着一组TwebActionItem工具,用TwebRequest工具来描写HTTP请求动静,并按照HTTP请求动静来指派个中一个行动去响应客户的请求,实际上就是填写TWebResponse工具的Content特性。
一个Web应用措施可以建设若干个行动项,以供Web调治器(TwebDispatcher)指派。C++ Builder 是用一个专门的行动项编辑器(Action Editor)来建设和打点行动项的。右键单击Web模块,在弹出的菜单中选择"Action Editor"呼吁。然后添加一个行动项,通过它的PathInfo属性可以配置行动项在Web处事器上的进口路径,而default属性配置当PathInfo属性为空时该行动项是否执行。
为该行动项编写如下代码:
void __fastcall TWebModule1::WebModule1WebActionItem1Action(TObject *Sender, TWebRequest *Request, TWebResponse *Response,bool &Handled)
{
AnsiString cont = AnsiString("<HTML>
<BODY><H3>Hello!</H3>");
cont = cont + AnsiString("<BR>");
cont = cont + AnsiString("<H2>Now is") + TimeToStr(Time()) +AnsiString("</H2>");
cont = cont + AnsiString("</BODY>
</HTML>");
Response->Content = cont;
}
在处理惩罚行动项的OnAction事件的句柄中,可以通过Request参数来会见客户的请求动静。要响应客户的请求,实际上就是把用HTML描写的页面赋值给Response的Content属性,Web调治器会自动把相应功效通报给Web处事器,再由Web处事器通报给客户。
至此,一个简朴的Web应用措施建设完毕,此刻可以通过Web欣赏器测试它(运行界面如图3所示)。要留意的是Web应用措施地址路径应有可执行权限。
处理惩罚用户输入的Web措施
下面在上述例子的基本上继承建设一个用于处理惩罚用户输入的Web措施。再添加一个行动项TWebActionItem。在WebModule1插手TPageProducer 工具,操作它事先筹备好的HTML模板生成HTML文档。
首先,操作Microsoft FrontPage 做一个运行后如图5所示的用户输入表(HTML代码略)。
为TWebActionItem2的OnAction 事件编写如下代码:
void __fastcall TWebModule1::WebModule1WebActionItem2Action(TObject *Sender, TWebRequest *Request, TWebResponse *Response,bool &Handled)
{
Response->Content=PageProducer1->Content();
}
#p#副标题#e#
然后处理惩罚用户输入,把用户输入写入一个新的HTML页面。这就需要再增加一个TpageProducer组件PageProducer2 用于处理惩罚用户输入页面。
把以下代码添加到 HTMLDoc 属性中:
<html>
<head>
<title>Thank You!</title>
</head>
<body >
<p>您好 <#T1>!</p>
<p>感激您添写了我们的观测表单,您的E瞞ail地点为<#T2>,今后我们会与您接洽!</p>
</body>
</html>
上述代码是一个HTML模板,它包罗两个非凡的标识<#T1> 和<#T2>,它们是用户输入表中两个编辑域的名称,在发生的HTML页面中将被用户数据所取代。在PageProducer2的 OnHTMLTag事件中添加以下代码:
#p#分页标题#e#
void __fastcall TWebModule1::PageProducer2HTMLTag(TObject *Sender, TTag Tag, const AnsiString TagString,TStrings *TagParams, AnsiString &ReplaceText)
{
ReplaceText = Request->QueryFields->Values[TagString] +Request->ContentFields->Values[TagString];
}
继承增加一个行动项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按钮。