开源C++版本CGI库CGICC入门

简介: 开源C++版本CGI库CGICC入门.pdf 1.      简介 CGICC是一个C++语言实现的开源CGI库,采用LGPL授权协议,使用较为简单。 CGICC官网:http://www.gnu.org/software/cgicc/,截止2015/3/14,CGICC最新稳定版本为3.2.16,下载地址是:http://ftp.gnu.org/gnu/cgicc/cgicc-3.2.16.tar.gz,最新更新时间为2014/12/7(令人惊讶和欣慰的是作为古老的CGI,CGICC还在不断的更新)。

img_e25d4fb2f8de1caf41a735ec53088516.png开源C++版本CGI库CGICC入门.pdf

1.      简介

CGICC是一个C++语言实现的开源CGI库,采用LGPL授权协议,使用较为简单。

CGICC官网:http://www.gnu.org/software/cgicc/,截止2015/3/14CGICC最新稳定版本为3.2.16,下载地址是:http://ftp.gnu.org/gnu/cgicc/cgicc-3.2.16.tar.gz,最新更新时间为2014/12/7(令人惊讶和欣慰的是作为古老的CGICGICC还在不断的更新)。

2.      CGICC组成

CGICC由两大部分组成:

1)       CGI输入处理子模块

2)       HTML输出子模块

 

本文暂只介绍CGI输入处理子模块,对于HTML输出,推荐Google开源的ctemplatehttps://github.com/OlafvdSpek/ctemplate)。

3.      CGI输入处理子模块类结构


3.1.     Cgicc

CGICC的一类,通常直接在CGI的入口函数,如main函数中定义一个CGICC对象,然后即可使用CGICC提供的各种能力。

3.2.     CgiEnvironment

提供get系列方法取各环境变量的值。

3.3.     HTTPCookie

提花get系列方法取各Cookie的值,并支持set新增或修改Cookie值。

3.4.     CgiInput

CgiEnvironment内部类,仅供CgiEnvironment使用。

3.5.     FormFile

提供访问HTMLForm中的被上传文件信息和数据接口。

3.6.     FormEntry

提供访问HTMLForm中的非被上传文件类的信息和数据接口。

URL参数值示例:

// http://127.0.0.1/?param_name=param_value

cgicc::form_iterator iter = cgi.getElement("param_name");

if (iter != cgi.getElements().end())

{

    std::string param_value = iter->getValue();

}

 

// 也可以这样做:

std::string param_value = cgi("param_name");

 

// 除此之外,FormEntry还提供了直接取指定数据类型的参数值,如:getIntegerValue、getDoubleValue

4.      CGI输入处理子模块初始化流程

初始化流程是由Cgicc构造函数触发的,一般可在CGImain函数中定义一个Cgicc对象:

5.      编译和安装CGICC

详细编译步骤如下:

1)       CGICC源代码包(本文下载的是cgicc-3.2.16.tar.gz)上传到Linux某目录(本文将CGICC源代码包cgicc-3.2.16.tar.gz上传到/tmp目录);

2)       登录Linux,并进入目录/tmp

3)       解压CGICC源代码包cgicc-3.2.16.tar.gztar xzf cgicc-3.2.16.tar.gz

4)       解压后,会在/tmp下产生一个子目录cgicc-3.2.16,进入到这个子目录;

5)       然后执行configure命令(本文指定的安装目录为/usr/local/cgicc-3.2.16,可以根据需要设定为其它目录),以生成Makefile编译文件,如果要在共享库中使用CGICC,请使用下列编译命令:

./configure --prefix=/usr/local/cgicc-3.2.16 CXXFLAGS=-fPIC LDFLAGS=-fPIC

 

否则,可按如下命令编译:

./configure --prefix=/usr/local/cgicc-3.2.16

 

在一些环境上,如果不带-fPIC编译静态库,使用静态库时,就会报链接错误。

6)       执行make编译:make

7)       安装CGICC库:make install

8)       /usr/local/cgicc-3.2.16建立不带版本号的软链接:

ln -s /usr/local/cgicc-3.2.16 /usr/local/cgicc

 

至此,CGICC库就安装好了!

6.      CGICC使用示例

6.1.     页面效果

6.2.     HTML文件

页面效果对应的HTML文件内容如下

HTML中的id一般是给前端如js使用的,而name通常是给服务端如CGI使用的)


   

       upload

   

 

   

       

upload:


       


            form action="/cgi-bin/upload.cgi" method="post" name="formname"

                  enctype="multipart/form-data">

               

               

               

               

           
       


   

相关文章
|
11天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
17 2
|
21天前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
31 0
|
21天前
|
编译器 C++
C++入门指南:10分钟带你快速了解模板究竟是什么(建议收藏!!)
C++入门指南:10分钟带你快速了解模板究竟是什么(建议收藏!!)
27 0
|
21天前
|
存储 编译器 C语言
C++入门: 类和对象笔记总结(上)
C++入门: 类和对象笔记总结(上)
30 0
|
23天前
|
Java 程序员 Maven
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI C++ D-Bus Tools 完全使用教程指南
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI C++ D-Bus Tools 完全使用教程指南
54 0
|
2天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
2天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
6天前
|
存储 编译器 C++
C++从遗忘到入门(上)
C++从遗忘到入门(上)
19 0
|
16天前
|
XML JSON JavaScript
推荐一个比较好用的c++版本http协议库-cpp-httplib
推荐一个比较好用的c++版本http协议库-cpp-httplib
36 1
|
23天前
|
设计模式 算法 中间件
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI Core与CommonAPI DBus的协同工作原理
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI Core与CommonAPI DBus的协同工作原理
50 0