版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、BOA服务器搭建与简单运用一、 确定任务1、掌握boa服务器的工作原理和应用;2、熟悉基本网页编程。3、熟悉CGI编程。二、 学习内容 网页实现获取zigbee节点数据,并且不断更新。三、 原理知识1、Boa服务器原理:(1)服务器软件(BOA)始终在HTTP 端口守候客户端的连接请求,当客户端向服务器发起一个连接请求后,客户端和服务器之间经过“三步握手”建立起连接。(2)在接收到客户端的HTTP 请求消息后,服务器对消息进行解析,包括:读取请求URL、映射到对应的物理文件、区分客户端请求的资源是静态页面还是CGI 应用程序等。(3)如果客户请求的是静态文件,那么服务器读取相应的磁盘文件,并将
2、其作为HTTP 响应消息中的实体返回给客户端,如果客户端请求的是CGI 应用程序,那么服务器将创建相应的CGI 应用程序进程,并将各种所需信息(客户端请求信息、服务器端相关信息等)按CGI 规范传递给CGI 应用程序进程,此后由CGI 应用程序接管控制。2、 CGI 应用程序的工作原理(1)CGI 应用程序读取从Web 服务器传递来的各种信息,并对客户端的请求进行解释和处理,如:使用SQL 语句来检索或者更新数据库。(2)CGI 应用程序将处理结果按照CGI 规范返回给Web 服务器,Web 服务器会对CGI 应用程序的处理结果进行解析,并在此基础上生成HTTP 响应信息返回给客户端。3、嵌入
3、式Web服务器软件构成与工作原理图三、操作步骤移植boa服务器::开发平台:主机:VMWare-Ubuntu 10.04 LTS 开发板: 编译器: 所需软件:下载:b1、移植步骤BOA 服务程序编译1、设置好交叉编译工具链路径:export PATH=/usr2、解压下载好的BOA 压缩包tar zxvf3、进入解压后的目录cd4、进入BOA 源码包的src 目录(下面操作均在该目录下进行)cd src5、利用configure 工具配置生成Makefile 文件./configure6、修改生成的Makefile 文件(设置交叉编译器)将CC = gccCPP = gcc E修改为:CC=
4、arm-linux-gccCPP=arm-linux-gcc E7、修改defines.h 文件将#define SERVER_ROOT “/etc/boa”修改为#define SERVER_ROOT “/gec/web”该处定义的是WEB 服务器的文件根目录,跟boa.conf 文件中的DocumentRoot 一致即可。8、修改compat.h 文件将#define TIMEZONE_OFFSET(foo) foo#->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff防止在make 时出现如下错误提示:util
5、.c:100:1: pasting "t" and "->" does not give a valid preprocessing token9、修改boa.c 文件注释掉下面两句话:#if 0if (passwdbuf = NULL) DIE(”getpwuid”);if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) = -1) DIE(”initgroups”);#endif否则会出现错误: getpwuid: No such file or directory注释掉下面语句
6、:#if 0if (setuid(0) != -1) DIE(”icky Linux kernel bug!”);#endif否则会出现错误: - icky Linux kernel bug!: No such file or directory10、编译boamake至此,在src 目录中将得到交叉编译后的boa 程序,可以使用以下方法缩小程序的体积arm-linux-strip boa /去掉相关调试信息,对交叉编译生成的boa 程序瘦身。编译错误(1):yacc -d boa_grammar.ymake: yacc:命令未找到make: * 解决办法:#apt-get ins
7、tall bison,安装完成后要再一次执行 #./configure再执行 #make编译错误(2):: 在函数yyparse中:警告:隐式声明函数yylexlex boa_lexer.lmake: lex:命令未找到make: * 错误127解决办法:#apt-get install flex安装完成,再#make就可以了2、 BOA 服务器运行环境搭建在解压后的boa 源码目录下有个boa.conf 文件,根据GEC210 根文件系统的设计,对它进行如下修改:(1)修改用户与用户组信息User 的修改:将User nobody 修改为User 0Group 的修改:将Grou
8、p nogroup 修改为Group 0在根文件系统中的/etc/passwd 文件中没有nobody 用户,所以设成0。在根文件系统中的/etc/group 文件中没有nogroup 组,所以设成0。(2)相关日志文件存放位置项,保留将保存日志文件,根据需要可以选择是否注释掉#ErrorLog /var/log/boa/error_log#AccessLog /var/log/boa/access_log(3)打开ServerName 的设置:将#ServerName前面的#号去掉,该项默认为未打开,执行Boa 会异常退出,提示“gethostbyname:No such file or d
9、irectory”,所以必须打开。(4)将DocumentRoot /var/www 修改为:DocumentRoot /gec/web,不然会提示错误GET / HTTP/1.1" ("/var/www/"): document open: No such file or directory(5)将DirectoryMaker /usr/lib/boa/boa_indexer 注释掉。(6)将MimeTypes /etc/mime.types 修改为:MimeTypes /gec/web/mime.types(7)将DefaultType text/plain
10、修改为:DefaultType text/html。(8)将Alias /doc /usr/doc 注释掉。(9)SccriptAlias 的设置:将ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/修改为:ScriptAlias /cgi-bin/ /gec/web/cgi-bin/至此,BOA 服务器配置已经完成,接下来完善根文件系统即可在GEC210 上运行。3、完善根文件系统1)、在开发板的根文件系统根目录创建必要的BOA 服务器运行目录:在根文件系统的根目录下创建/gec/web 目录:cd /root/rootfsmkdir -p gec/web进入到创
11、建好的web 目录下,创建cgi-bin 目录:mkdir cgi-bin2)、把交叉编译生成的boa 程序和配置好的boa.conf 文件及主机下的/etc/mime.types 文件都复制到板上的/gec/web 目录下,并在该目录下创建一文件index.html,文件内容可以参考如下:<html><head><title>BOA TEST</title></head><body><h1>BOA TEST</h1></body></html>3)、进入到板上的/gec/w
12、eb 目录下,执行./boa,可以看到如下启动信息:在主机上启动浏览器,输入URL 为,访问板上的BOA 服务,效果如下4)、测试完静态页面后,接下来测试CGI 脚本文件:在主机上创建一文件test.c,文件内容如下:include <stdio.h> int main(void)printf("Contenttype:text/htmlnn");printf("<html>n");printf("<head><title>BOA CGI TEST</title></head&g
13、t;n");printf("<body>n");printf("<h1>BOA CGI TEST</h1>n");printf("</body>n");printf("</html>n"); return 0;编译:arm-linux-gcc test.c o test.cgi然后用交叉编译工具链编译,将得到的test.cgi 文件复制到板上的/gec/web/cgi-bin 目录下:在浏览器输入,可以看到如下效果:4、boa服务器运用经过前面学
14、习,大概知道boa的工作原理和流程,那现在我们继续学习html和cgi传参问题。CGI 程序通过两种方式来获取浏览器发送过来的表单数据: QUERY_STRING 环境变量和标准输入。两种方式分别对应于浏览器的“GET”和“POST”两种提交表单的方式。当浏览器使用 GET 方式来提交表单时, CGI 程序必须通过 QUERY_STRING 环境变量来获取表单内容。例如,按照本实验的实验要求,可以编写一个如下的网页:<HTML><HEAD><META http-equiv="content-type" content="text/ht
15、ml; charset=utf-8" /><TITLE> Gec BOA Test Page </TITLE></HEAD><BODY><FORM action="/cgi-bin/config.cgi" method="get">Username:<input type="text" name="username"><br />Password:<input type="password"
16、 name="password"><br /><input type="button" name="Submit" value="提交"></FORM></BODY></HTML>网页中包含一个表单,该表单的 action 指向/cgi-bin/config.cgi,它是一个 CGI 程序。表单中包含两个个文本框,分别名为“username”和“password”,还包含一个提交按钮,名为“Submit”。假设我们在两个文本框中分别输入“gec”和“
17、123456”,当点击提交时, config.cgi 可以通过下面的代码获取到表单内容:const char *query = getenv("QUERY_STRING"); / 获取 GET 方式提交的表单内容/ 这里,query 字符串应该等于“username=gec&password=123456&Submit=提交”。其中,getenv()函数用来获取环境变量。QUERY_STRING 环境变量中则包含了所有表单的内容。当浏览器使用 POST 方式提交表单时,CGI 程序必须通过标准输入获取表单内容,同时,可以通过CONTENT_LENGTH 环境
18、变量来获取到表单内容的大小。例如,将上面的网页中的 method=”get”修改为 method=”post”,那么 test.cgi 的程序需要变为:const char *slen = getenv("CONTENT_LENGTH"); / 获取 POST 方式提交的表单内容大小int len = atoi(slen); / 将字符串形式的长度转换为整数char *query = (char *)malloc(len + 1); / 分配空间,用来保存表单内容memset(query, 0, len + 1); / 将分配到的空间的内容清空read(0, query, len); / 读取表单内容/ 这里,query 字符串应该等于“username=gec&password=123456&Submit=提交”其中,read()函数用来读取文件中的数据,它包含三个参数:第一个参数表示文件序号,0 即为标准输入文件;第二个参数为保存读取到的数据的缓冲区;第三个参数为读取的长度。 经过上面的操作,我们可以获得网页上传过来的表单内容,于是,我们需要针对字符串操作,获取我们需要的信息并且认证。处理表单数据无论使用 GET 或 POST 两种方式的哪一种,一旦表单内容被 CGI 获取到之后,即可开始进一步的处
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于2026年订单履约进度催办函(8篇)
- 安全出行:交通安全从小抓起小学主题班会课件
- 建筑项目经理工程部经理KPI考核表
- 强化安全意识平安校园同行小学主题班会课件
- 物流成本核算与费用管控手册
- 家禽养殖场环境防疫管理手册
- 珍惜美好时光拒绝不良诱惑小学主题班会课件
- 2026年关于项目合同条款确认的协商函(8篇范文)
- 2025年海南儋州洋浦职业学院高职单招职业技能考试题库附参考答案详解【综合题】
- 油库储存企业重大危险源安全管理制度
- (正式版)DB42∕T 2305-2024 《高品质住宅技术标准》
- 《老年人健康管理实务》老年保健与管理专业全套教学课件
- cnas文件考试试题及答案
- DZ/T 0132-1994钻孔压水试验规程
- 中医康复中的适宜技术选择试题及答案
- DB37T 1342-2021 平原水库工程设计规范
- 2024低温阀门深冷处理规范
- 广西燃气安全检查标准 DBJ T45-1472-2023(2023年7月1日实施)
- 外聘电工合同范本
- 临床肺泡出血综合征CT影像表现
- JTS-252-2015水运工程施工监理规范
评论
0/150
提交评论