• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • 用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,

      C++Builder中集合的处理
      用C++ Builder实现VFP数据库开发,用BCB开发有身份认证功能的Email程序,BCB动态生成30个按钮对象,BCB不让应用程序显示在任务栏上的方法,利用C++Builder自定义Windows窗体“系统菜单”,用程序实现文件的关联,数字小键盘指法练习,用C++ Builder开发多层数据库应用程序,在C++ Builder6上使用Boost正则表达式库,C++Builder使用经验谈,用C++ Builder对图像进行特殊效果处理,CBuilder中帮助文件的连接及显示讨论,BCB客户端tuxedo开发实例,在BCB下使用GExperts的Debug功能,BCB编写DLL终极手册,在拷贝、删除文件时显示飞行的文件夹动画,用BCB实现超星格式转换为BMP格式,在C++Builder中使用Compress Html Help,在bcb里实现像Winamp那样具有吸附效果的磁性窗口,利用BCB巧建WEB浏览器
      C++ Builder

      多一下横线作为前辍,而此处则没有),之后除非想把工程名改为其它名称,否则保存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事件。

      C++Builder中集合的处理
      用C++ Builder实现VFP数据库开发,用BCB开发有身份认证功能的Email程序,BCB动态生成30个按钮对象,BCB不让应用程序显示在任务栏上的方法,利用C++Builder自定义Windows窗体“系统菜单”,用程序实现文件的关联,数字小键盘指法练习,用C++ Builder开发多层数据库应用程序,在C++ Builder6上使用Boost正则表达式库,C++Builder使用经验谈,用C++ Builder对图像进行特殊效果处理,CBuilder中帮助文件的连接及显示讨论,BCB客户端tuxedo开发实例,在BCB下使用GExperts的Debug功能,BCB编写DLL终极手册,在拷贝、删除文件时显示飞行的文件夹动画,用BCB实现超星格式转换为BMP格式,在C++Builder中使用Compress Html Help,在bcb里实现像Winamp那样具有吸附效果的磁性窗口,利用BCB巧建WEB浏览器
      C++ Builder

    • 0
    • 0
    • 0
    • 79
    • 单栏布局 侧栏位置: