-
c语言入门之用C++Builder6制作Apache动态服务页
一、假设:
1、用户主机为PC +Windows 系列OS。
2、用户已在主机的C:\apache目录下安装有Apache Server(当然也可以安装到其它目录下。可到www.apache.org下载for win32版)。
3、用户已在C++Builder 6(以下简称CB6)以下生成动态模块am.dll(后面会陈述am.dll是怎生生成的)。
4、用户熟悉CB5/4/3开发环境。
二、配置:
1、 用任意文本编辑器打开C:\apache\conf\http.conf,其中包含大量#号开头的语句,是为注释,其它的语句则为有效配置,Apache Server在启动时会严格遵守该文件所定的规则,任何非注释的语句出错,Apache Server都将可能启动失败;可用命令:C:\Apache\Apache.exe -w -t -f "C:\Apache\conf\httpd.conf"-d "C:\Apache\"来检验http.conf文件的正确性,开始菜单里也有该命令的ShortCut。
2、 在http.conf文件中查找#LoadModule,发现其中有大量的以#LoadModule为行开头的语句在一起,那里便是为Apache Server设置动态服务的所在;在此之前或之后或其中的任意位置加入一行:LoadModule _am_module modules/am.dll,在此请注意:
a、首先:在http.conf中,凡描述文件路径处,均以”/”替代windows中的”\”,如:”C:\Apache”,在http.conf中应写成”C:/Apache”;
b、此LoadModule ……..语句前无#号,因为我们要使它有效;
c、_am_module与am.dll这一模块名与文件名中,位于’am’位置的部位必须相同,切记;
d、modules/am.dll是相对于Apache Server根路径C:/apache的,即am.dll位于c:/apache/modules/
3、在http.conf文件中LoadModule _am_module modules/am.dll之后任意位置加入如下内容:
<Location /index>
SetHandler am-handler
</Locaton>
4、将以CB6生成的am.dll拷贝到c:\apache\modules\;
5、运行C:\apache\apache.exe –k stop停止Apache Server;如1所述检验http.conf的配置是否正确;若http.conf配置无误,运行c:\apache\apache.exe –k start –n Apache启动Apache Server。至于如何访问Apache动态模块,我们要先行搞定动态模块的生成.
三、在CB6下动态模块的生成:
1、 打开CB6,点击New图标,得如下对话框 ,请选择其中高亮的一项Web Server Application:
2、 点击上图中的OK按钮, 得如下对话框,请选中其中第4项Apache Share Module(DLL):
3、 点击上图中的OK按钮,源程序文件即生成,其中包括:Project1.cpp,Unit1.cpp,Unit1.h均为缺省文件名,其中unit.cpp与unit.h中定义了TwebModule1,所有的名称中,除Project1.cpp外均可更改为其它更合适名称。那么Project1.cpp的名称如何更改?当将工程由Project1.bpr另存为am.bpr时,project1.cpp便自动更名为am.cpp,但project1.cpp与am.cpp的内容无变化,如下便是am.cpp内容,内容虽多,但手工修改的仅有两处:
将下述源文件中标示为黑粗斜体字的Project1_module修改为am_module(这与上述二.2.c的内容遥相呼应,但请注意二.2.c中模块名为_am_module,多一下横线作为前辍,而此处则没有),之后除非想把工程名改为其它名称,否则保存am.cpp即可,am.cpp的其它内容最好不要修改。
//删除部份注释后的am.cpp内容
#include <WebBroker.hpp>
#include <ApacheApp.hpp>
#pragma hdrstop
USEFORM("Unit1.cpp", WebModule1); /* TWebModule: File Type */
#define Application Webbroker::Application
#pragma link "ApacheApp.obj"
#pragma link "webbroker.obj"
#pragma link "ReqMulti.obj"
#pragma link "WebSnap.lib"
#pragma link "WebDSnap.lib"
extern "C"
{
Httpd::module __declspec(dllexport) Project1_module;
}
//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
try
{
if (reason == DLL_PROCESS_ATTACH) {
Apacheapp::set_module(&Project1_module);
Application->Initialize();
Application->CreateForm(__classid(TWebModule1), &WebModule1);
Application->Run();
}
}
catch (Exception &exception)
{
}
return 1;
}
//---------------------------------------------------------------------------
#undef Application
//---------------------------------------------------------------------------
4、 打开unit1.cpp,TwebModule1便会在Object Treeview中列出来,右键单击其它子项Actions,在弹出菜单中选击Add item,则Actions下会增加一子项0-WebActionItem1。要使HTTP客户端得到这个动作项的响应,方法有多种,其中一种方式如下:
在Object Treeview下方的Object Inspector中修改0-WebActionItem1这下动作项的属性(Properties):
MethodType值为mtGet
PathInfo值为/index
再修改其事件(Events):
OnAction事件为OnStart(可用其它名称),则CB6给Web模块自动生成OnStart函数(或方法),请在函数体内输入如下内容:
Response->Content=”<html><head><font size=36>Apache动态网页</font>”\
“<title>网页标题</title>”\
“<base href=http://127.0.0.1></head> <body> Apache来也</body><html>”;
5、 编译连接,生成am.dll,然后按二所述配置,打开IE,在地址栏中输入http://127.0.0.1/index,效果如何?试试吧,不要太着急,请看请楚文中每一个句子。
四、其它:
1、 Apache的动态模块配置中有一项名堂叫作:资源定位格式为(举例说明):
<Location /index>
SetHandler am-handler
</Locaton>
此意为将http://主机名或IP/index的HTTP请求定位到_am_module,所以此处am-handler中的’am’一定要与模块名相同,至于index,可以替换为其它合法的字符组合,如:
<Location /main>
SetHandler am-handler
</Locaton>
此时,必须如此请求动态网页:http://127.0.0.1/main。
2、 CB6中Web模块TwebModule的Actions项的子项,有一属性,也是事件,名为Producer,而在CB6的工具栏的Internet项中,有许多Producer,名称类似xxxxProducer,试用一下吧,他们的优先级低于OnAction事件。
1、用户主机为PC +Windows 系列OS。
2、用户已在主机的C:\apache目录下安装有Apache Server(当然也可以安装到其它目录下。可到www.apache.org下载for win32版)。
3、用户已在C++Builder 6(以下简称CB6)以下生成动态模块am.dll(后面会陈述am.dll是怎生生成的)。
4、用户熟悉CB5/4/3开发环境。
二、配置:
1、 用任意文本编辑器打开C:\apache\conf\http.conf,其中包含大量#号开头的语句,是为注释,其它的语句则为有效配置,Apache Server在启动时会严格遵守该文件所定的规则,任何非注释的语句出错,Apache Server都将可能启动失败;可用命令:C:\Apache\Apache.exe -w -t -f "C:\Apache\conf\httpd.conf"-d "C:\Apache\"来检验http.conf文件的正确性,开始菜单里也有该命令的ShortCut。
2、 在http.conf文件中查找#LoadModule,发现其中有大量的以#LoadModule为行开头的语句在一起,那里便是为Apache Server设置动态服务的所在;在此之前或之后或其中的任意位置加入一行:LoadModule _am_module modules/am.dll,在此请注意:
a、首先:在http.conf中,凡描述文件路径处,均以”/”替代windows中的”\”,如:”C:\Apache”,在http.conf中应写成”C:/Apache”;
b、此LoadModule ……..语句前无#号,因为我们要使它有效;
c、_am_module与am.dll这一模块名与文件名中,位于’am’位置的部位必须相同,切记;
d、modules/am.dll是相对于Apache Server根路径C:/apache的,即am.dll位于c:/apache/modules/
3、在http.conf文件中LoadModule _am_module modules/am.dll之后任意位置加入如下内容:
<Location /index>
SetHandler am-handler
</Locaton>
4、将以CB6生成的am.dll拷贝到c:\apache\modules\;
5、运行C:\apache\apache.exe –k stop停止Apache Server;如1所述检验http.conf的配置是否正确;若http.conf配置无误,运行c:\apache\apache.exe –k start –n Apache启动Apache Server。至于如何访问Apache动态模块,我们要先行搞定动态模块的生成.
三、在CB6下动态模块的生成:
1、 打开CB6,点击New图标,得如下对话框 ,请选择其中高亮的一项Web Server Application:
2、 点击上图中的OK按钮, 得如下对话框,请选中其中第4项Apache Share Module(DLL):
3、 点击上图中的OK按钮,源程序文件即生成,其中包括:Project1.cpp,Unit1.cpp,Unit1.h均为缺省文件名,其中unit.cpp与unit.h中定义了TwebModule1,所有的名称中,除Project1.cpp外均可更改为其它更合适名称。那么Project1.cpp的名称如何更改?当将工程由Project1.bpr另存为am.bpr时,project1.cpp便自动更名为am.cpp,但project1.cpp与am.cpp的内容无变化,如下便是am.cpp内容,内容虽多,但手工修改的仅有两处:
将下述源文件中标示为黑粗斜体字的Project1_module修改为am_module(这与上述二.2.c的内容遥相呼应,但请注意二.2.c中模块名为_am_module,多一下横线作为前辍,而此处则没有),之后除非想把工程名改为其它名称,否则保存am.cpp即可,am.cpp的其它内容最好不要修改。
//删除部份注释后的am.cpp内容
#include <WebBroker.hpp>
#include <ApacheApp.hpp>
#pragma hdrstop
USEFORM("Unit1.cpp", WebModule1); /* TWebModule: File Type */
#define Application Webbroker::Application
#pragma link "ApacheApp.obj"
#pragma link "webbroker.obj"
#pragma link "ReqMulti.obj"
#pragma link "WebSnap.lib"
#pragma link "WebDSnap.lib"
extern "C"
{
Httpd::module __declspec(dllexport) Project1_module;
}
//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
try
{
if (reason == DLL_PROCESS_ATTACH) {
Apacheapp::set_module(&Project1_module);
Application->Initialize();
Application->CreateForm(__classid(TWebModule1), &WebModule1);
Application->Run();
}
}
catch (Exception &exception)
{
}
return 1;
}
//---------------------------------------------------------------------------
#undef Application
//---------------------------------------------------------------------------
4、 打开unit1.cpp,TwebModule1便会在Object Treeview中列出来,右键单击其它子项Actions,在弹出菜单中选击Add item,则Actions下会增加一子项0-WebActionItem1。要使HTTP客户端得到这个动作项的响应,方法有多种,其中一种方式如下:
在Object Treeview下方的Object Inspector中修改0-WebActionItem1这下动作项的属性(Properties):
MethodType值为mtGet
PathInfo值为/index
再修改其事件(Events):
OnAction事件为OnStart(可用其它名称),则CB6给Web模块自动生成OnStart函数(或方法),请在函数体内输入如下内容:
Response->Content=”<html><head><font size=36>Apache动态网页</font>”\
“<title>网页标题</title>”\
“<base href=http://127.0.0.1></head> <body> Apache来也</body><html>”;
5、 编译连接,生成am.dll,然后按二所述配置,打开IE,在地址栏中输入http://127.0.0.1/index,效果如何?试试吧,不要太着急,请看请楚文中每一个句子。
四、其它:
1、 Apache的动态模块配置中有一项名堂叫作:资源定位格式为(举例说明):
<Location /index>
SetHandler am-handler
</Locaton>
此意为将http://主机名或IP/index的HTTP请求定位到_am_module,所以此处am-handler中的’am’一定要与模块名相同,至于index,可以替换为其它合法的字符组合,如:
<Location /main>
SetHandler am-handler
</Locaton>
此时,必须如此请求动态网页:http://127.0.0.1/main。
2、 CB6中Web模块TwebModule的Actions项的子项,有一属性,也是事件,名为Producer,而在CB6的工具栏的Internet项中,有许多Producer,名称类似xxxxProducer,试用一下吧,他们的优先级低于OnAction事件。
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式