Chinaunix首页 | 论坛 | 博客
  • 博客访问: 356167
  • 博文数量: 120
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-11 17:50
文章分类

全部博文(120)

文章存档

2008年(120)

我的朋友

分类: 系统运维

2008-04-26 18:28:07

uClinux下的Web Server(主要是boa服务器)

uCLinux 环境下,主要有三个Web 服务器:httpd、thttpd和Boa。httpd是最简单的一个Web 服务器,它的功能最弱,不支持认证,不支持CGI。如果Web 服务器仅需提供一些静态页面,例如简单的在线帮助、系统介绍等,完全可以用静态服务器httpd来实现。thttpd和Boa都支持认证、CGI等,功能都比较全。若需提高系统的安全性,或需要与用户进行交互,例如数据查询、实时状态查询等,则必须使用动态Web技术,可以选择这两种服务器之一来实现。

1. uCLinux下静态Web 服务器的实现

httpd 是最简单的一个web 服务器,只有几百行代码,功能较弱。它的一些简单配置需要在Makefile和httpd.c的内部进行,文件位于/bb40/uCLinux- dist/user/httpd/目录下。Makefile中定义了缺省的documentDir为/home/httpd,缺省主页面文件为 index.html。uCLinux20031103版本的httpd.c中的main函数有如下两行程序:

chroot(HTTPD_DOCUMENT_ROOT);

    chdir("/");

其中第二行程序将影响到实际运行结果,建议将该行程序直接指向index.html文件所在目录。将页面文件复制到\bb40\uCLinux-dist\romfs\home\httpd下即可。

uCLinux 进行重新配置,并在用户程序中选中httpd,编译uCLinux内核并下载到开发板,在uclinx启动后通过httpd &命令即可启动服务器,如需自动启动,在\uCLinux-dist\vendors\Samsung\S3C44B0目录下的rc文件中加入同样的命令即可。  

2.动态服务器与CGI

目前实现动态Web页面有多种技术可供选择,CGI、ASP、PHP等技术在高端平台上都能很好地实现用户所需的功能。但在uCLinux下实现动态网页,目前只能采用CGI。

CGI,Common Gate Interface,即通用网关接口,是一个连接外部应用程序到服务器的标准。一个简单的静态HTML文档是没有交互后台程序,而CGI程序则可以实时执行并输出动态信息。

使用CGI 需要一个输入界面,一般就是一个包含了表单(FORM)的页面。FORM在CGI中是最常被使用的输入界面,它由一组标签所组成,目前的标准中,FORM 的标签可分为三大类:INPUT、SELECT以及TEXTAREA。在设置了一系列有关的标签后,每个FORM通常需要一个SUBMIT按钮用来发送表单内容。

当用户在客户端按下FORM上的SUBMIT按钮,浏览器(Browser)将客户端输入的参数传回服务器,服务器启动指定的程序并将封装的参数传入,后台程序依照传入的参数完成指定的工作。如果此时有需要传回结果的话,则程序会把结果传回给服务器并发送到浏览器。

3.boa实现uCLinux下的动态Web 服务器(  )

Boa来实现动态Web 服务器的方法较为复杂,主要通过boa.conf和mime.types进行,具体过程如下:

Boa 的关键配置由boa.conf文件决定,该文件是一个文本文件,内部除了各项设置还包含了详细的注释和说明。Boa.conf文件的注释中首先指出,为了在用户访问Web时服务器能确定根目录的位置,需要指定服务器的根目录路径服务器_ROOT。\uCLinux-dist\user\boa\src\目录下的define.h定义了服务器的根目录路径,通过修改define.h文件中#define ERVER_ROOT /home语句来指定服务器_ROOT。在uCLinux启动后通过命令行也可以指定该路径,且命令行所指定的路径具有更高的优先级,命令参数为-c加上欲指向的根目录路径,例如该文件中提供的例子:boa -c /usr/local/boa。

下面来配置一个简单的boa服务器。在\uCLinux-dist\user\boa\src\boa.conf里进行如下修改:

l         user root改为User 0;

l         Group root改为Group 0;

l         DocumentRoot/etc改为DocumentRoot/home;

l         MimeTypes/etc/mime.types改为MimeTypes/home/mime.types;

l         #AddType application/x-httpd-cgi cgi前面的#去掉使系统可以支持cgi方式;

l         定义CGI程序所在目录:ScriptAlias/cgi-bin/ /home/cgi-bin/;

这样配置后的boa服务器将/home目录作为服务器的根目录,cgi程序位于\hone\cgi-bin目录下,默认页面文件为\home\index.html。

Boa.conf文件的注释中指出,boa.conf文件和mime.types文件必须放到Web服务器根目录下,本例中把mime.types和修改后的bao.conf复制到\uCLinux-dist\romfs\home\目录下。

在编译uCLinux 内核前还要通过修改\uCLinux-dist\vendors\Samsung\S3C44B0\目录下的makefile文件来建立cgi二进制文件将要被存放到的目录。在ROMFS_DIRS=bin dev etc home lib mnt proc usr var的后边增加home/cgi-bin,这样修改后编译内核,编译后生成的根文件系统\bb40\uCLinux-dist\romfs中将增加一个 \home\cgi-bin目录。

uCLinux 进行重新配置,并在用户程序中选中boa项,编译uCLinux内核并下载到开发板,在uclinx启动后,通过boa  -c/home/&命令即可启动服务器,如需自动启动,在rc文件中加入同样的命令即可。由于尚未放入cgi程序,此时仅能看到放在home目录下的页面,不会有任何动态响应。通过下面的例子将了解如何实现页面到CGI程序的关联。

4.一个通过动态Web页面访问远程温度传感器的例子

下面通过一个例子来说明如何实现uCLinux下的动态Web页面技术。

首先建立一个简单的表单页面:

输入需要访问的温度传感器号码,并单击“确定”查看。

CGI 规定,GET方式下的表单被发送到服务器后,表单中的数据被保存在QUERY_STRING环境变量中。这种表单的处理相对简单,只要读取环境变量就可以了。在CGI程序中使用库函数getenv来把环境变量的值作为一个字符串来读取,在取得了字符串中的数据后,就可以对数据进行需要的处理。CGI程序完成处理后的输出被重定向到客户浏览器,用户通过浏览器就可以看到相关结果。请注意,在ACTION后面所指向的CGI文件并没有扩展名。

下面就是处理这个表单的CGI程序mycgi.c:

#include

#include

int main(void){

char *data;

long m;

printf("Content-Type:text/html%c%c",10,10);

printf("温度传感器状态 ");

printf("

房间温度

");

data = getenv("QUERY_STRING");

if(sscanf(data,"m=%ld",&m)!=1)

printf("

错误!输入数据非法。表单中必须输入1~10的数字。");

else

printf("

%ld号房间的温度是:%ld度。",m,readtempr(m));

return 0;

}

其中的readtempr()是读取温度传感器输出的函数。在cygwin下使用arm-elf-gcc对该cgi源程序进行编译,获得mycgi.exe,将该程序复制到\uCLinux-dist\romfs\home\cgi-bin\目录下,确保前面的表单页面文件index.html位于\uCLinux-dist\romfs\home\目录里。编译内核并下载,下面两图是运行结果。

 

运行结果说明:左图是访问IP192.168.0.128的嵌入式服务器的结果,该服务器默认页面为index.html,浏览器显示为一个简单的表单。右图是在该表单输入传感器号5并按下“确定”按钮后,CGI程序执行后返回的结果

阅读(1797) | 评论(0) | 转发(0) |
0

上一篇:交叉网线

下一篇:Win 32 Perl CGI 程序实例

给主人留下些什么吧!~~