亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
1234下一頁
最近訪問板塊 發(fā)新帖
查看: 7816 | 回復(fù): 31
打印 上一主題 下一主題

發(fā)布一個(gè)比較老舊的Web開發(fā)C++類庫 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-05-28 17:10 |只看該作者 |倒序?yàn)g覽
本帖最后由 pi1ot 于 2012-06-05 12:33 編輯

發(fā)布一個(gè)比較老舊的Web開發(fā)C++類庫

代碼地址:
https://code.google.com/p/webapplib/
https://github.com/pi1ot/webapplib

簡(jiǎn)單說明:
WebAppLib是一系列主要用于類Unix操作系統(tǒng)環(huán)境下WEB開發(fā)的C++類庫。設(shè)計(jì)目的是通過提供使用簡(jiǎn)單方便、相對(duì)獨(dú)立的C++類和函數(shù)來簡(jiǎn)化CGI程序開發(fā)過程中的常見操作,提高開發(fā)效率。

背景介紹:
這個(gè)類庫已經(jīng)非常老舊了,是我03年到05年間開發(fā)維護(hù)的,05年之前曾應(yīng)用于多個(gè)新浪項(xiàng)目,包括當(dāng)時(shí)的論壇、聊天、用戶庫、CMS等,05年后隨著新浪前端應(yīng)用開發(fā)全面轉(zhuǎn)向PHP,逐漸沒人用了,現(xiàn)在大概只剩下少數(shù)歷史比較悠久的項(xiàng)目還在繼續(xù)使用吧。一開始是作為本人學(xué)習(xí)C++的練手項(xiàng)目開始的,后來用的人逐漸增多,其間陸陸續(xù)續(xù)升級(jí)了七八個(gè)版本,應(yīng)該說大部分代碼的穩(wěn)定性已經(jīng)經(jīng)歷過了考驗(yàn),考慮到一點(diǎn)點(diǎn)個(gè)人感情因素,現(xiàn)在簡(jiǎn)單整理一下發(fā)布出來,沒有任何使用上的限制,大概也不會(huì)有后續(xù)更新。這次發(fā)布之前做了一下整理,重構(gòu)了一些類庫和函數(shù)的命名,刪除了很多已經(jīng)證明并不需要的冗余接口。

建議:
現(xiàn)在Web開發(fā)的主流顯然不是C++,不過如果你想學(xué)習(xí)或者了解一下CGI開發(fā)的細(xì)節(jié),可以作為參考,或者如果你已經(jīng)有一個(gè)以C++為主體代碼的項(xiàng)目,需要一點(diǎn)簡(jiǎn)單的Web包裝,又不想學(xué)習(xí)或者引入一門新的腳本語言,可以試試看這個(gè)WebAppLib

其他:
webapp::String 的實(shí)現(xiàn),受當(dāng)時(shí)知識(shí)水平的限制,為了能沿用 std::string 的全部接口,是 public 繼承自std::string的,現(xiàn)在看來顯然不是一個(gè)說得過去的方案,只是在那幾年的使用場(chǎng)景中,似乎也沒有發(fā)現(xiàn)有不穩(wěn)定的情況,所以現(xiàn)在懶得去修改了,各位自行決定是否使用吧。
附說明,摘自《Effective C++》
條款14: 確定基類有虛析構(gòu)函數(shù):當(dāng)通過基類的指針去刪除派生類的對(duì)象,而基類又沒有虛析構(gòu)函數(shù)時(shí),結(jié)果將是不可確定的。

類庫和函數(shù)列表:
String繼承并兼容與std::string的字符串類,增加了開發(fā)中常用的字符串處理函數(shù)
Cgi支持文件上傳的CGI參數(shù)讀取類
CookieHTTP Cookie設(shè)置與讀取類
MysqlClientMySQL數(shù)據(jù)庫連接類,MySQL連接處理C函數(shù)接口的C++封裝
MysqlDataMySQL查詢結(jié)果數(shù)據(jù)集類,MySQL查詢結(jié)果數(shù)據(jù)提取C函數(shù)接口的C++封裝
Template支持在模板中嵌入條件跳轉(zhuǎn)、循環(huán)輸出腳本的 HTML 模板類
HttpClientHTTP/1.1通信協(xié)議客戶端類
DateTime日期時(shí)間運(yùn)算、格式化輸出類
TextFile固定分隔符文本文件讀取解析類
ConfigFileINI格式配置文件解析類
FileSystem文件系統(tǒng)操作函數(shù)庫
Encode字符串編碼解碼函數(shù)庫
Utility系統(tǒng)調(diào)用與工具函數(shù)庫


簡(jiǎn)單范例:
  1. /// \file example.cpp
  2. /// 代碼示例文件,演示一個(gè)簡(jiǎn)單CGI流程

  3. #include <iostream>
  4. #include "webapplib.h"

  5. using namespace webapp;

  6. int main() {
  7.         /***************************************************************************
  8.         演示完整的CGI應(yīng)用程序流程,模擬WEB查詢動(dòng)作       
  9.         1、讀取CGI參數(shù)和Cookie數(shù)據(jù)(String、Cgi、Cookie)
  10.         2、使用讀取到的參數(shù)調(diào)用權(quán)限檢查接口(ConfigFile、HttpClient)
  11.         3、使用讀取到的參數(shù)查詢數(shù)據(jù)庫(MysqlClient)
  12.         4、使用日志文件記錄用戶請(qǐng)求(FileSystem、Utility、Encode)
  13.         5、更新用戶端Cookie(Cookie、DateTime)
  14.         6、顯示HTML頁面(Template)
  15.         ***************************************************************************/       

  16.         ////////////////////////////////////////////////////////////////////////////
  17.         // 1、讀取CGI參數(shù)和Cookie數(shù)據(jù)(Cgi、Cookie)
  18.        
  19.         Cgi cgi;
  20.         Cookie cookie;
  21.         String username = cgi["username"];
  22.         String usercookie = cookie["usercookie"];
  23.        
  24.         /*提示 webapp::Cgi在讀不到CGI環(huán)境變量時(shí)會(huì)運(yùn)行在調(diào)試模式,提示輸入CGI參數(shù)值*/
  25.        
  26.         ////////////////////////////////////////////////////////////////////////////
  27.         // 2、使用讀取到的參數(shù)調(diào)用權(quán)限檢查接口(ConfigFile、HttpClient)
  28.        
  29.         ConfigFile conf( "example.conf" );
  30.         String check_interface = conf["check_interface"];
  31.        
  32.         cout << "---------------------------------------------------------" << endl;
  33.         cout << "check user privilege from:" << check_interface << endl;
  34.        
  35.         HttpClient www;
  36.         www.request( check_interface + "?username=" + username );
  37.         if ( www.done() && www.content()=="CHECK_PASS" ) {
  38.                 cout << "check pass" << endl;
  39.         } else {
  40.                 cout << "check fail" << endl;
  41.         }
  42.        
  43.         ////////////////////////////////////////////////////////////////////////////
  44.         // 3、使用讀取到的參數(shù)查詢數(shù)據(jù)庫(MysqlClient)
  45.         String value;
  46.         #ifndef _WEBAPPLIB_NOMYSQL

  47.         String sql;
  48.         sql.sprintf( "SELECT value FROM table WHERE user='%s'", escape_sql(username).c_str() );
  49.        
  50.         MysqlClient mysqlclient;
  51.         MysqlData mysqldata;

  52.         mysqlclient.connect( "example.mysql.com", "user", "pwd", "database" );
  53.         if ( mysqlclient.is_connected() ) {
  54.                 if ( mysqlclient.query(sql,mysqldata) ) {
  55.                         value = mysqldata( 0, "value" );
  56.                 } else {
  57.                         cout << mysqlclient.error() << endl;
  58.                 }
  59.         }

  60.         #endif //_WEBAPPLIB_NOMYSQL

  61.         ////////////////////////////////////////////////////////////////////////////
  62.         // 4、使用日志文件記錄用戶請(qǐng)求(FileSystem、Utility、Encode)
  63.        
  64.         String log_path = "/tmp/";
  65.         String log_file = log_path + "/logfile.txt";
  66.         if ( !file_exist(log_path) || !is_dir(log_path) ) {
  67.                 make_dir( log_path );
  68.         }

  69.         file_logger( log_file, "username:%s", username.c_str() );
  70.         file_logger( log_file, "usermd5:%s", md5_encode(username).c_str() );
  71.        
  72.         cout << "---------------------------------------------------------" << endl;
  73.         String file_content;
  74.         file_content.load_file( log_file );
  75.         cout << file_content << endl;

  76.         ////////////////////////////////////////////////////////////////////////////
  77.         // 5、更新用戶端Cookie(Cookie、DateTime)
  78.        
  79.         DateTime now;
  80.         DateTime expires = now + ( TIME_ONE_DAY*3 ); // Cookie有效期為三天
  81.         cookie.set_cookie( "username", username, expires.gmt_datetime() );
  82.        
  83.         ////////////////////////////////////////////////////////////////////////////
  84.         // 6、顯示HTML頁面(Template)
  85.        
  86.         Template page("example.tmpl");
  87.         page.set( "username", username );
  88.         page.set( "value", value );
  89.        
  90.         // 顯示查詢結(jié)果
  91.         cout << "---------------------------------------------------------" << endl;
  92.         http_head();
  93.         page.print();
  94. }
復(fù)制代碼
代碼中使用的配置文件和模板文件
example.conf
  1. # comments
  2. check_interface = http://example.com/check
復(fù)制代碼
example.tmpl
  1. welcome {{$username}}!
  2. you query result is here:
  3. {{$value}}
復(fù)制代碼

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-05-28 17:17 |只看該作者
比wt如何?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2012-05-28 17:30 |只看該作者
剛搜了一下你說的wt,我感覺大概唯一能和它相提并論的就是...我的文檔也是用doxygen生成的

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2012-05-28 18:08 |只看該作者
回復(fù) 3# pi1ot


你用doxygen?唔,這是一個(gè)好東西。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2012-05-28 19:32 |只看該作者
剛看了下wt,寫那庫的人腦子不好!
非常的不好!

前端的GUI,用后端C++生成,簡(jiǎn)直化玉帛為糟糠。



論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
6 [報(bào)告]
發(fā)表于 2012-05-28 21:26 |只看該作者
代碼相當(dāng)工整啊。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2012-05-28 23:00 |只看該作者
回復(fù) 5# AD8018


cgi一向就是這個(gè)邏輯。湊合吧?雌饋磉是不錯(cuò)。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2012-05-29 09:53 |只看該作者
回復(fù) 7# walleeee

cgi妄圖入侵html內(nèi)部元素,從來沒成功過。

在C/C++寫成的瀏覽器的基礎(chǔ)了,有了WEB界面,
程序員本應(yīng)該享受用WEB實(shí)現(xiàn)界面的便捷性。
這個(gè)倒好,重新將WEB界面用cgi包裝,還是C++的,說作者腦子進(jìn)水不為過。

cgi用來當(dāng)生成某文本的途徑比較好,
再接上一點(diǎn)數(shù)據(jù)格式的支持,比如json之類,就足夠好。


   

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2012-05-29 10:00 |只看該作者
不然怎么表現(xiàn)自己是牛人呢?!

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2012-05-29 10:41 |只看該作者
回復(fù) 8# AD8018


相當(dāng)同意你的說法

用html做界面本來就比用C++繼承來繼承去方便,寫兩行html就能夠出來的界面,干嘛非跑去寫C++類

不說別的,就CU論壇這個(gè)界面,拿那個(gè)wt寫寫看
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP