C++寫動態站點之HelloWorld!
阿新 • • 發佈:2017-07-21
reat pre ice short share endif 世界 一個 editor
IDE
站點port
,
加入服務類
實現文件DemoService.cpp
WebServer是怎樣將瀏覽器的請求轉發到DemoService的?
演示樣例源碼下載地址:Fetch_Platform.7z
更復雜的代碼可參考本博客BBS的實現
簡單的說。動態站點就是能夠動態變更的站點。動態變化的內容通常來自後端數據庫。例如以下省略萬字(動態站點)
一個個動態的網頁匯集成了一個動態站點,動態網頁在一定的模板上由後端局部替換。使得用戶看到的內容是隨需而變。這裏我們忽略掉數據庫處理部分,直接實現網頁內容的變化,從而了解server端的工作原理。對於你了解整個動態站點的工作過程非常有幫助。
註意:下面過程全都在Windows 7 64上使用Visual C++ 2008 Express編譯使用。如使用不同的環境或工具,請高手自行搞定
靜態頁
動態頁
開始使用
IDE
在Visual C++ Express 2008下打開項目方案,
fetch_platform\build\vc2008\fetch_platform.sln,按例如以下圖所看到的配置
站點port
站點程序的入口在文件HTTPFormServer.cpp,以下是站點的port。通常為80port。為了避免可能的port沖突。這裏使用8020,站點程序執行起來能夠使用http://localhost:8020/訪問
當然假設你電腦上的80port沒有被其它程序占用。能夠簡單的使用http://localhost/進行訪問
unsigned short port = 8020; if (args.size() > 0) // change default port port = (unsigned short) NumberParser::parse(args[0]);
後端
加入服務類
加入一個頭文件DemoService.h
#ifndef DEMO_SERVICE_H #define DEMO_SERVICE_H #include "shared_service.h" class DemoService : public SharedService { public: void handle(Poco::Net::HTTPServerRequest& req, Poco::Net::HTTPServerResponse& resp, Poco::URI& uri, const std::string& fileName); public: static const std::string SERVICE_PREFIX; // 用於URL分發 private: }; #endif // DEMO_SERVICE_H
實現文件DemoService.cpp
#include "demo_service.h" const std::string DemoService::SERVICE_PREFIX = "/demo/"; // 凡是地址欄顯演示樣例如以下的都會進入以下這種方法 // http://domain/demo/*** // void DemoService::handle(Poco::Net::HTTPServerRequest& req, Poco::Net::HTTPServerResponse& resp, Poco::URI & uri, const std::string& fileName) { // 分類處理demo下不同的請求。然後return // // 否則,假設沒有特別的處理,將直接調用父類的handle方法 // 作為演示樣例。這裏沒有對DemoService進行擴充,感興趣能夠下載BBS的源碼 // 因此這裏直接交由父類處理 // SharedService::handle(req, resp, uri, fileName); }
WebServer是怎樣將瀏覽器的請求轉發到DemoService的?
答案就在ServiceDispatcher類。詳細例如以下
// demo service if (startsWith(fileName, DemoService::SERVICE_PREFIX)) { DemoService demo; demo.handle(req, resp, uri, fileName); return; }