分类: 嵌入式
2014-05-04 16:51:30
在嵌入式领域应用很广泛的开源Web-ServerBoa由C编写,能够运行在Linux的多个不同发行版本上,对硬件的需求非常低。Boa在ARM开发板micro2440/Embedded Linux的移植已有很多教程可以参考,此处略去。
CGI(Common Gateway Interface,通用网关接口),是为HTTP服务器等提供接口的标准外部网关程序,主要负责客户端与服务器的交互。CGI不是编程语言,准确来 说,CGI是允许客户端在Web服务器上执行程序并且接收输出的一系列协议或准则。在HTML中,当用户填写表单并发送后,表单内容就发送到服务器。这 时,服务器就需要用一个脚本来对表单进行处理并最终完成用户请求的任务。
服务器提供了客户端和CGI扩展程序之间的信息交换通道。客 户端通过浏览器发出请求,经过服务器的街市发出标准输出传送给CGI,或者说调用CGI程序,CGI对信息进行处理后,会将结果以stdout的形式发 回,服务器将处理结果以HTML的形式发送给客户端。没有CGI,Web的世界就完全失去了交互性,服务器失去反馈能力,信息变成单向流动。
1.Boa Web-Server的配置
(1)在micro2440根文件系统目录下,创建路径/www/cgi-bin
(2)在Boa配置文件中(/etc/boa/boa.conf),编写
ScriptAlias /cgi-bin/ /www/cgi-bin/ #将/cgi-bin作为CGI脚本路径/www/cgi-bin的别名
AddType application/x-httpd-cgi cgi
DefaultType text/plain
2.HTML文件的编写
表 单的提交包括Get以及Post两种方法,这里使用了Get,并且指定相应的CGI程序为led.cgi。以上是一个普通的HTML文件,包括了4个 checkbox和2个button。文件名为cgi_led.html,保存在micro2440根文件系统/www路径下。通过主机访问该HTML文 件,即在浏览器地址栏输入,实际效果如下:
3.CGI文件的编写
CGI 的难点在于对表单提交内容的后续处理,常用的方法是调用C函数ssprintf。注意,这里使用正则表达式对表单内容进行了处理(正则表达式头文件 regex.h,具体使用方法请参考上述代码及相关教程);交叉编译为led.cgi,保存在micro2440根文件系统/www/cgi-bin路径 下。
3.通过主机浏览器访问,点选不同的checkbox,提交表单后,就能控制micro2440上LED的亮灭。
总结:以上只是很简单的一个CGI示例,但是以此为起点,通过HTML、JavaScript、Database以及CGI融合,我们可以构建出更复杂的Web客户端。