好久沒倒騰 C++ ,最近不是有個需求嘛說是要弄個網頁,還得用 C++ 來搞。我一聽,這可有點意思,平時都用些高級語言,這回要摸摸底層的家伙。
說干就干,我先把環(huán)境搭起來。編譯器嘛選 MinGW,畢竟 Windows 上用著順手。然后琢磨著用個啥框架不,搜一圈,發(fā)現(xiàn) C++ 網頁框架還真不多,不像 Python、Java 那樣,一抓一大把。我決定先不搞那些花里胡哨的,直接上最原始的 CGI(Common Gateway Interface)試試水。
CGI 說白,就是個標準,讓 Web 服務器能跟你的程序打交道。我寫個最簡單的 C++ 程序:
#include <iostream>
int main() {
std::cout << "Content-type:text/html\r\n\r\n";
std::cout << "<html>\n";
std::cout << "<head>\n";
std::cout << "<title>Hello World</title>\n";
std::cout << "</head>\n";
std::cout << "<body>\n";
std::cout << "<h1>Hello, world!</h1>\n";
std::cout << "</body>\n";
std::cout << "</html>\n";
return 0;
這代碼看著挺長,就干一件事,輸出一段 HTML 代碼。關鍵 在于第一行的 Content-type:text/html\r\n\r\n,這告訴瀏覽器,我發(fā)的是 HTML 內容。然后我把這程序編譯放到 Web 服務器的 cgi-bin 目錄下。這目錄名,一看就是專門放 CGI 程序的。
我用的 Web 服務器是 Apache,這玩意兒配置起來也簡單。打開 * 文件,找到 cgi-bin 那塊,確保它能執(zhí)行 CGI 程序。一般就是把 Options 加上 ExecCGI,然后 AddHandler 告訴服務器,哪些文件是 CGI 程序。我一般就直接把 .exe 后綴的文件當 CGI 程序。
一切就緒,我在瀏覽器里輸入地址,看到大大的 "Hello, world!",心里那個舒坦!雖然這頁面簡陋得不能再簡陋,但好歹是自己用 C++ 一步步弄出來的,成就感滿滿。
光顯示個 Hello World 肯定不夠,我還想讓用戶能輸入點東西。于是我又寫個能處理表單數(shù)據(jù)的 CGI 程序。這回麻煩點,得從環(huán)境變量里把用戶提交的數(shù)據(jù)讀出來,然后解析,再處理。我用個 getenv("QUERY_STRING") 來獲取數(shù)據(jù),然后自己寫點代碼來解析,畢竟是最原始的方法嘛啥都得自己來。
這一路下來,我也踩不少坑:
這回用 C++ 搞網頁開發(fā)的經歷,讓我對 Web 開發(fā)的底層有更深的認識。雖然現(xiàn)在有很多更方便的框架和工具,但解這些基礎的東西還是很有必要的。而且用 C++ 寫出來的程序,性能那是杠杠的,對于一些性能要求高的場景,還是很有優(yōu)勢的。
這回嘗試挺有意思的,也讓我對 C++ 這門老牌語言有新的認識。以后有機會,我還想試試其他的 C++ 網頁框架,看看能不能玩出更多花樣來。