線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1519
推到 Plurk!
推到 Facebook!

[推薦]用C++Builder6 制作動態服務頁

 
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-31 10:32:11 IP:61.218.xxx.xxx 未訂閱
用C++Builder6 制作動態服務頁    作者: 2002-03-30‧ ‧李治國‧‧yesky    資料來源:天極網 http://www.yesky.com/20020330/1604485.shtml http://www.yesky.com/20020330/1604485_1.shtml     一、 假設:     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;
}
file://---------------------------------------------------------------------------
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;
}
file://---------------------------------------------------------------------------
#undef Application
file://---------------------------------------------------------------------------
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事件。 時間就是金錢---[ 發問前請先找找舊文章]
系統時間:2024-04-26 5:48:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!