一种在无操作系统设备中利用CGI技术实现动态WEB服务器的方法.pdf

上传人:g**** 文档编号:6191684 上传时间:2019-05-19 格式:PDF 页数:16 大小:3.15MB
返回 下载 相关 举报
摘要
申请专利号:

CN201310422509.0

申请日:

2013.09.16

公开号:

CN103513986A

公开日:

2014.01.15

当前法律状态:

授权

有效性:

有权

法律详情:

专利权质押合同登记的生效IPC(主分类):G06F 9/44登记号:2017370000026登记生效日:20170307出质人:山东华辰泰尔信息科技股份有限公司质权人:齐鲁银行股份有限公司济南高新支行发明名称:一种在无操作系统设备中利用CGI技术实现动态web服务器的方法申请日:20130916授权公告日:20160824|||授权|||实质审查的生效IPC(主分类):G06F 9/44申请日:20130916|||公开

IPC分类号:

G06F9/44

主分类号:

G06F9/44

申请人:

山东华辰泰尔信息科技股份有限公司

发明人:

李幸福; 马中骏; 张会昌; 张鹏; 李宁; 肖计伟; 杨善松

地址:

250101 山东省济南市高新(历城)区舜华路2000号舜泰广场8号楼西区17层

优先权:

专利代理机构:

济南金迪知识产权代理有限公司 37219

代理人:

吕利敏

PDF下载: PDF下载
内容摘要

本发明涉及一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,包括步骤如下:首先,HTTP解析与组包模块对HTTP服务收到的网络包进行处理;然后,web服务器总调度模块开始根据解析出的网络参数URI,搜索网页文件定义模块中的数组:查找URI请求的文件;再次,由CGI文件解析及函数解析模块和CGI函数实现模块对CGI文件进行处理。该方法是在无操作系统、无文件系统、无web库支持,内存也非常的有限的单片机或者是ARM CPU设备中进行的。本发明使用简单、模块化的方法为只有简单CPU的设备实现动态web服务器的功能,并且实现AJAX效果,增加了用户与设备进行动态交互的能力。

权利要求书

权利要求书
1.  一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,其特征在于,该方法包括步骤如下:
其中,该方法的实现包括了以下模块:HTTP解析与组包模块(http.c)、web服务器总调度模块(web_server.c)、网页文件定义模块(web_page.c)、CGI文件解析及函数解析模块(cgi_parser.c)和CGI函数实现模块(cgi_fun);
该方法包括步骤如下:
(1)首先,HTTP解析与组包模块对HTTP服务收到的网络包进行处理,HTTP解析与组包模块按照HTTP1.1的格式,解析出网络参数放到HTTP_RQST_HEAD结构体中;
(2)然后,web服务器总调度模块开始根据解析出的网络参数URI,搜索网页文件定义模块(web_page.c)中的数组:web_pages[]数组,查找URI请求的文件,如果没有找到,则返回404NOT FOUND页面;如果找到了对应的文件,则首先判断是否为CGI文件,如果不是,则直接把web_pages[]数组表示的文件拷贝到发送缓冲区由HTTP解析与组包模块发送;如果为CGI文件,则将此文件送给CGI文件解析及函数解析模块中的CGI文件解析模块进行处理,然后将CGI函数执行的结果拷贝到发送缓冲区由HTTP解析与组包模块发送;
(3)CGI文件解析及函数解析模块中的CGI文件解析模块从CGI文件的第一个字符开始扫描,每当遇到<?cgi?>标记时,说明标记里面是CGI函数,然后把标记里面的字符串送给CGI文件解析及函数解析模块中的CGI函数解析模块进行处理,当CGI函数实现模块处理完毕时,返回结果就在发送缓冲区了;
(4)CGI函数解析模块首先将<?cgi?>中字符串格式的CGI函数名字和参数,解析为多个tokens,然后根据tokens[0]在web_cgi_funs[]中查找对应的CGI函数,如果没有找到,则直接把<?cgi?>作为普通的文本放到发送缓冲区中等待发送;如果找到了,则将除了tokens[0]以外的tokens作为参数传递给CGI函数并执行CGI函数,格式如下:
outbuf=(*web_cgi_funs[i].func)(tokensNum,cgi_cmd_tokens,outbuf,http_rqst_head,http_resp_head);
(5)CGI函数如果需要页面传来的GET或者是POST变量,则使用http_get_arg_get()函数或者是http_post_arg_get()函数从http_rqst_head中获取;在使用IP地址设置页面设置IP地址时,HTTP解析与组包模块将IP、子网掩码以及网关的设置结果放到http_rqst_head的$_POST[]变量中,cgi_ip_set函数使用http_post_arg_get(http_rqst_head,"IP")得到IP参数,然后进行处理;CGI函数最后将结果放到发送缓冲区;
(6)当CGI文件解析及函数解析模块中的CGI文件解析模块将整个CGI文件处理完毕时,直接将HTTP协议发送的参数放在http_resp_head变量中和发送缓冲区送给HTTP解析与组包模块进行发送发送便可。

2.  根据权利要求1所述一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,其特征在于:
步骤(2)中web_pages[]描述所有web文件的静态数组,此数组包括所有web文件的路径名字、类型、尺寸和详细定义;所有的web文件以数组的方式编写进代码中。

3.  根据权利要求1所述一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,其特征在于:
步骤(4)中web_cgi_funs[]描述所有CGI函数的静态数组,此数组包含所有定义的CGI函数。

4.  根据权利要求2所述一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,其特征在于:所述存放所有web文件的静态数组包括HTML文件、CGI文件、图片和CSS文件。

5.  根据权利要求3所述一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,其特征在于:所述存放所有CGI函数的静态数组,包含所有的CGI函数。所有的CGI函数都是以C语言实现。

6.  根据权利要求1所述一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,其特征在于:所述HTTP协议解析与组包模块,包括对HTTP Command、URI、HTTP Version、Host,HTTP标准协议参数的解析,以及Cookies的解析与处理。

7.  根据权利要求1所述一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,其特征在于:所述方法还包括AJAX效果实现方法:javascript文件get_time.js包含一个定时器,每隔1秒向web服务器指定的页面发送查询请求,等web服务器应答后,get_time.js变将结果在后台刷新到页面的指定区域。

说明书

说明书一种在无操作系统设备中利用CGI技术实现动态web服务器的方法
技术领域
本发明涉及一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,属于嵌入式Internet设备的技术领域。
背景技术
随着物联网的发展以及网络化尤其是web应用的普及,对设备的联网、智能化等要求也越来越高。如何使用简单的方法让简单的设备也能接入Internet并通过web对其管理、配置将是我们面临的一个难题。
在现有技术中,传统的以单片机或者是Cortex-M3ARM为CPU的设备一般没有实现web功能或者只能实现静态网页;而有动态网页支持的设备一般是支持嵌入式操作系统的CPU再使用成熟的web服务器(如boa)实现,这样势必成本、功耗以及复杂度会成倍的提高。
发明内容
针对现有技术的不足,本发明提供一种在无操作系统设备中利用CGI技术实现动态web服务器的方法。本发明的目的在于:提供一种简单、模块的化的方法在无操作系统支持的设备中使用CGI技术实现动态web服务器。公共网关接口CGI(Common GatewayInterface)是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
本发明的技术方案如下:
一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,包括步骤如下:
其中,该方法的实现包括了以下模块:HTTP解析与组包模块(http.c)、web服务器总调度模块(web_server.c)、网页文件定义模块(web_page.c)、CGI文件解析及函数解析模块(cgi_parser.c)和CGI函数实现模块(cgi_fun);所述HTTP协议解析与组包模块,用于解析HTTP协议;所述web服务器总调度模块,用于整个web服务器的调度,包括根据URI查找对应的文件、错误处理;所述CGI文件解析及函数解析模块中的CGI文件解析模块,用于解析CGI文件,分析出CGI文件中嵌入 在<?cgi?>标记中CGI函数的名字和参数;所述CGI函数解析模块,将CGI文件解析模块解析出来的函数名字与CGI函数执行体相对应并执行;
该方法包括步骤如下:
(1)首先,HTTP解析与组包模块对HTTP服务收到的网络包进行处理,HTTP解析与组包模块按照HTTP1.1的格式,解析出网络参数放到HTTP_RQST_HEAD结构体中;所述的网络参数包括Command、URI、Version、Host、Cookies等参数;所述HTTP_RQST_HEAD结构体包含HTTP协议的规定的参数:例如GET的参数放到$_GET[]数组中,POST的参数放到$_POST[]数组中,Cookies放到$_COOKIE[]中;
(2)然后,web服务器总调度模块开始根据解析出的网络参数URI,搜索网页文件定义模块(web_page.c)中的数组:web_pages[]数组,查找URI请求的文件,如果没有找到,则返回404NOT FOUND页面;如果找到了对应的文件,则首先判断是否为CGI文件,如果不是,则直接把web_pages[]数组表示的文件拷贝到发送缓冲区由HTTP解析与组包模块发送;如果为CGI文件,则将此文件送给CGI文件解析及函数解析模块中的CGI文件解析模块进行处理,然后将CGI函数执行的结果拷贝到发送缓冲区由HTTP解析与组包模块发送;
(3)CGI文件解析及函数解析模块中的CGI文件解析模块从CGI文件的第一个字符开始扫描,每当遇到<?cgi?>标记时,说明标记里面是CGI函数,然后把标记里面的字符串送给CGI文件解析及函数解析模块中的CGI函数解析模块进行处理,当CGI函数实现模块处理完毕时,返回结果就在发送缓冲区了;
(4)CGI函数解析模块首先将<?cgi?>中字符串格式的CGI函数名字和参数,解析为多个tokens,然后根据tokens[0]在web_cgi_funs[]中查找对应的CGI函数,如果没有找到,则直接把<?cgi?>作为普通的文本放到发送缓冲区中等待发送;如果找到了,则将除了tokens[0]以外的tokens作为参数传递给CGI函数并执行CGI函数,格式如下:
outbuf=(*web_cgi_funs[i].func)(tokensNum,cgi_cmd_tokens,outbuf,http_rqst_head,http_resp_head);
(5)CGI函数如果需要页面传来的GET或者是POST变量,则使用http_get_arg_get()函数或者是http_post_arg_get()函数从http_rqst_head中获取;在使用IP地址设置页面设置IP地址时,HTTP解析与组包模块将IP、子网掩码以及网关的设置结果放到http_rqst_head的$_POST[]变量中,cgi_ip_set函数使用http_post_arg_get(http_rqst_head,"IP")得到IP参数,然后进行处理;CGI函数最后将结果放到发送缓冲区;
(6)当CGI文件解析及函数解析模块中的CGI文件解析模块将整个CGI文件处理完毕时,直接将HTTP协议发送的参数放在http_resp_head变量中和发送缓冲区送给HTTP解析与组包模块进行发送发送便可。
根据本发明优选的,步骤(2)中web_pages[]描述所有web文件的静态数组,此数组包括所有web文件的路径名字、类型、尺寸和详细定义;所有的web文件以数组的方式编写进代码中。
根据本发明优选的,步骤(4)中web_cgi_funs[]描述所有CGI函数的静态数组,此数组包含所有定义的CGI函数。
根据本发明优选的,所述存放所有web文件的静态数组包括HTML文件、CGI文件、图片和CSS文件。这些文件都是以静态的方式存放在此数组,无需专门的文件系统存放;而CGI文件只是将CGI函数使用<?cgi?>标记插入普通的HTML文件形成。
根据本发明优选的,所述存放所有CGI函数的静态数组,包含所有的CGI函数。所有的CGI函数都是以C语言实现。保持与系统语言一致,便于实现。
根据本发明优选的,所述HTTP协议解析与组包模块,包括对HTTP Command、URI、HTTP Version、Host,HTTP标准协议参数的解析,以及Cookies的解析与处理。
根据本发明优选的,所述方法还包括AJAX效果实现方法:所述AJAX效果,是指不需要人工刷新整个页面,而是由浏览器自动发送查询参数,并刷新显示在页面的部分区域内;本方法中的设备运行时间实时显示便是使用AJAX实现;javascript文件get_time.js包含一个定时器,每隔1秒向web服务器指定的页面发送查询请求,等web服务器应答后,get_time.js变将结果在后台刷新到页面的指定区域。
本发明的优势在于:
1、本发明所述的方法只需要5K的代码空间就能实现一个如上所述功能的web server。
2、本发明所述的方法只需要基本的C语言实现整个代码,不需要任何第三方库。
3、本发明所述的方法中,各个模块划分明确,算法实现简单,运行效率非常高。
4、本发明所述的方法不需要文件系统支持。
附图说明
图1为本发明的流程图;
图2为本发明CGI文件解析及函数解析模块的流程图;
图3为本发明的实现的自动刷新设备运行时间的AJAX效果图;
图4为本发明的实现获取和设置设备IP地址效果图。
具体实施方式
下面结合实施例和说明书附图对本发明做详细的说明,但不限于此。
在执行本发明所述方法之前,
首先介绍该方法中用到的数据结构
i.web_pages[]数组主要包含所有web页面的描述,包括文件的名字、格式、尺寸、已经指向具体文件字符串的指针,具体内容如下:

页面的格式可以为HTML、CSS、图片、CGI等等。
ii.而普通HTML页面的格式只是以字符串方式存储,具体实现如下(以login.htm文件为例):


iii.图片文件直接可以使用工具转换为C语言可识别的数组格式(以logo.jpg文件为例):

iv.CGI页面的格式如下(以get_ip.cgi文件为例):


如上所示其中需要嵌入CGI代码的位置,直接将CGI函数及参数放入<?cgi?>标记中便可,加入要嵌入一段获取设备当前IP的代码,则使用<?cgi getip“ip”;?>便可,如果要获取子网掩码则使用<?cgi getip“mask”;?>。在此方法中,getip为一个CGI函数,带一个参数,参数可以为”ip”、”mask”、”gateway”。getip等CGI函数,都被放到了cgi_funs[]数组中,供CGI函数解析模块调用。
v.cgi_funs[]数组格式如下:

vi.CGI函数格式如下(以setip为例):


实施例1、
一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,包括步骤如下:
其中,该方法的实现包括了以下模块:HTTP解析与组包模块(http.c)、web服务器总调度模块(web_server.c)、网页文件定义模块(web_page.c)、CGI文件解析及函数解析模块(cgi_parser.c)和CGI函数实现模块(cgi_fun)。所述HTTP协议解析与组包模块,用于解析HTTP协议;所述web服务器总调度模块,用于整个web服务器的调度,包括根据URI查找对应的文件、错误处理;所述CGI文件解析及函数解析模块中的CGI文件解析模块,用于解析CGI文件,分析出CGI文件中嵌入在<?cgi?>标记中CGI函数的名字和参数;所述CGI函数解析模块,将CGI文件解析模块解析出来的函数名字与CGI函数执行体相对应并执行;HTML文件、图片、CSS等静态文件可以直接使用数组的方式存放在web_pages[],而对于CGI动态文件,只需要像PHP或者是ASP文件一样,在HTML中插入<?cgi?>表示的CGI函数便可。
该方法包括步骤如下:
(1)首先,HTTP解析与组包模块对HTTP服务收到的网络包进行处理,HTTP解析与组包模块按照HTTP1.1的格式,解析出网络参数放到HTTP_RQST_HEAD结构体中;所述的网络参数包括Command、URI、Version、Host、Cookies等参数;所述HTTP_RQST_HEAD结构体包含HTTP协议的规定的参数:例如GET的参数放到$_GET[]数组中,POST的参数放到$_POST[]数组中,Cookies放到$_COOKIE[]中;
(2)然后,web服务器总调度模块开始根据解析出的网络参数URI,搜索网页文件定义模块(web_page.c)中的数组:web_pages[]数组,查找URI请求的文件,如果没有找到,则返回404NOT FOUND页面;如果找到了对应的文件,则首先判断是否为CGI文件,如果不是,则直接把web_pages[]数组表示的文件拷贝到发送缓冲区由HTTP解析与组包模块发送;如果为CGI文件,则将此文件送给CGI文件解析及函数解析模块中的CGI文件解析模块进行处理,然后将CGI函数执行的结果拷贝到发送缓冲区由HTTP解析与组包模块发送;
(3)CGI文件解析及函数解析模块中的CGI文件解析模块从CGI文件的第一个字符开始扫描,每当遇到<?cgi?>标记时,说明标记里面是CGI函数,然后把标记里面的字符串送给CGI文件解析及函数解析模块中的CGI函数解析模块进行处理,当CGI函数实现模块处理完毕时,返回结果就在发送缓冲区了;
(4)CGI函数解析模块首先将<?cgi?>中字符串格式的CGI函数名字和参数,解析为多个tokens,然后根据tokens[0]在web_cgi_funs[]中查找对应的CGI函数,如果没有找到,则直接把<?cgi?>作为普通的文本放到发送缓冲区中等待发送;如果找到了,则将除了tokens[0]以外的tokens作为参数传递给CGI函数并执行CGI函数,格式如下:
outbuf=(*web_cgi_funs[i].func)(tokensNum,cgi_cmd_tokens,outbuf,http_rqst_head,http_resp_head);
(5)CGI函数如果需要页面传来的GET或者是POST变量,则使用http_get_arg_get()函数或者是http_post_arg_get()函数从http_rqst_head中获取;在使用IP地址设置页面设置IP地址时,HTTP解析与组包模块将IP、子网掩码以及网关的设置结果放到http_rqst_head的$_POST[]变量中,cgi_ip_set函数使用http_post_arg_get(http_rqst_head,"IP")得到IP参数,然后进行处理;CGI函数最后将结果放到发送缓冲区;
(6)当CGI文件解析及函数解析模块中的CGI文件解析模块将整个CGI文件处理完毕时,直接将HTTP协议发送的参数放在http_resp_head变量中和发送缓冲区送给HTTP解析与组包模块进行发送发送便可。
步骤(2)中web_pages[]描述所有web文件的静态数组,此数组包括所有web文件的路径名字、类型、尺寸和详细定义;所有的web文件以数组的方式编写进代码中。
步骤(4)中web_cgi_funs[]描述所有CGI函数的静态数组,此数组包含所有定义的CGI函数。
所述存放所有web文件的静态数组包括HTML文件、CGI文件、图片和CSS文件。这些文件都是以静态的方式存放在此数组,无需专门的文件系统存放;而CGI文件只是将CGI函数使用<?cgi?>标记插入普通的HTML文件形成。
所述存放所有CGI函数的静态数组,包含所有的CGI函数。所有的CGI函数都是以C语言实现。保持与系统语言一致,便于实现。
所述HTTP协议解析与组包模块,包括对HTTP Command、URI、HTTP Version、Host,HTTP标准协议参数的解析,以及Cookies的解析与处理。
实施例2、
如实施例1所述的一种在无操作系统设备中利用CGI技术实现动态web服务器的方法,其区别在于,所述方法还包括AJAX效果实现方法:所述AJAX效果,是指不需要人工刷新整个页面,而是由浏览器自动发送查询参数,并刷新显示在页面的部分区域内;本方法中的设备运行时间实时显示便是使用AJAX实现;javascript文件get_time.js包含一个定时器,每隔1秒向web服务器指定的页面发送查询请求,等web服务器应答后,get_time.js变将结果在后台刷新到页面的指定区域。
所述get_time.js的实现如下:


AJAX具体发送到的web服务器文件由url变量定义,在此为get_time.cgi,然后get_time.cgi文件将使用CGI函数getsystime获取当前设备运行世界,并将结果返回给浏览器便可。
get_time.cgi文件定义如下:

一种在无操作系统设备中利用CGI技术实现动态WEB服务器的方法.pdf_第1页
第1页 / 共16页
一种在无操作系统设备中利用CGI技术实现动态WEB服务器的方法.pdf_第2页
第2页 / 共16页
一种在无操作系统设备中利用CGI技术实现动态WEB服务器的方法.pdf_第3页
第3页 / 共16页
点击查看更多>>
资源描述

《一种在无操作系统设备中利用CGI技术实现动态WEB服务器的方法.pdf》由会员分享,可在线阅读,更多相关《一种在无操作系统设备中利用CGI技术实现动态WEB服务器的方法.pdf(16页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103513986 A (43)申请公布日 2014.01.15 CN 103513986 A (21)申请号 201310422509.0 (22)申请日 2013.09.16 G06F 9/44(2006.01) (71)申请人 山东华辰泰尔信息科技股份有限公 司 地址 250101 山东省济南市高新 (历城) 区舜 华路2000号舜泰广场8号楼西区17层 (72)发明人 李幸福 马中骏 张会昌 张鹏 李宁 肖计伟 杨善松 (74)专利代理机构 济南金迪知识产权代理有限 公司 37219 代理人 吕利敏 (54) 发明名称 一种在无操作系统设备中利用 CGI 技术。

2、实现 动态 web 服务器的方法 (57) 摘要 本发明涉及一种在无操作系统设备中利用 CGI技术实现动态web服务器的方法, 包括步骤如 下 : 首先, HTTP 解析与组包模块对 HTTP 服务收到 的网络包进行处理 ; 然后, web 服务器总调度模块 开始根据解析出的网络参数 URI, 搜索网页文件 定义模块中的数组 : 查找 URI 请求的文件 ; 再次, 由 CGI 文件解析及函数解析模块和 CGI 函数实现 模块对 CGI 文件进行处理。该方法是在无操作系 统、 无文件系统、 无 web 库支持, 内存也非常的有 限的单片机或者是 ARM CPU 设备中进行的。本发 明使用简单、。

3、 模块化的方法为只有简单 CPU 的设 备实现动态 web 服务器的功能, 并且实现 AJAX 效 果, 增加了用户与设备进行动态交互的能力。 (51)Int.Cl. 权利要求书 2 页 说明书 10 页 附图 3 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书10页 附图3页 (10)申请公布号 CN 103513986 A CN 103513986 A 1/2 页 2 1.一种在无操作系统设备中利用CGI技术实现动态web服务器的方法, 其特征在于, 该 方法包括步骤如下 : 其中, 该方法的实现包括了以下模块 : HTTP 解析与组包模块 (htt。

4、p.c) 、 web 服务器总调 度模块 (web_server.c) 、 网页文件定义模块 (web_page.c) 、 CGI 文件解析及函数解析模块 (cgi_parser.c) 和 CGI 函数实现模块 (cgi_fun) ; 该方法包括步骤如下 : (1) 首先, HTTP 解析与组包模块对 HTTP 服务收到的网络包进行处理, HTTP 解析与组包 模块按照 HTTP1.1 的格式, 解析出网络参数放到 HTTP_RQST_HEAD 结构体中 ; (2) 然后, web 服务器总调度模块开始根据解析出的网络参数 URI, 搜索网页文件定义 模块 (web_page.c) 中的数组 。

5、: web_pages数组, 查找URI请求的文件, 如果没有找到, 则返 回 404NOT FOUND 页面 ; 如果找到了对应的文件, 则首先判断是否为 CGI 文件, 如果不是, 则 直接把web_pages数组表示的文件拷贝到发送缓冲区由HTTP解析与组包模块发送 ; 如果 为 CGI 文件, 则将此文件送给 CGI 文件解析及函数解析模块中的 CGI 文件解析模块进行处 理, 然后将 CGI 函数执行的结果拷贝到发送缓冲区由 HTTP 解析与组包模块发送 ; (3) CGI 文件解析及函数解析模块中的 CGI 文件解析模块从 CGI 文件的第一个字符开 始扫描, 每当遇到 标记时, 。

6、说明标记里面是 CGI 函数, 然后把标记里面的字符串送 给 CGI 文件解析及函数解析模块中的 CGI 函数解析模块进行处理, 当 CGI 函数实现模块处 理完毕时, 返回结果就在发送缓冲区了 ; (4) CGI 函数解析模块首先将 中字符串格式的 CGI 函数名字和参数, 解析为 多个 tokens, 然后根据 tokens0 在 web_cgi_funs 中查找对应的 CGI 函数, 如果没有找 到, 则直接把 作为普通的文本放到发送缓冲区中等待发送 ; 如果找到了, 则将除了 tokens0 以外的 tokens 作为参数传递给 CGI 函数并执行 CGI 函数, 格式如下 : out。

7、buf=(*web_cgi_funsi.func)(tokensNum, cgi_cmd_tokens, outbuf, http_rqst_ head, http_resp_head); (5) CGI 函数如果需要页面传来的 GET 或者是 POST 变量, 则使用 http_get_arg_get() 函数或者是 http_post_arg_get() 函数从 http_rqst_head 中获取 ; 在使用 IP 地址设置页 面设置 IP 地址时, HTTP 解析与组包模块将 IP、 子网掩码以及网关的设置结果放到 http_ rqst_head 的 $_POST 变量中, cgi_i。

8、p_set 函数使用 http_post_arg_get(http_rqst_ head, “IP“) 得到 IP 参数, 然后进行处理 ; CGI 函数最后将结果放到发送缓冲区 ; (6) 当 CGI 文件解析及函数解析模块中的 CGI 文件解析模块将整个 CGI 文件处理完毕 时, 直接将 HTTP 协议发送的参数放在 http_resp_head 变量中和发送缓冲区送给 HTTP 解析 与组包模块进行发送发送便可。 2.根据权利要求1所述一种在无操作系统设备中利用CGI技术实现动态web服务器的 方法, 其特征在于 : 步骤 (2) 中 web_pages 描述所有 web 文件的静态数。

9、组, 此数组包括所有 web 文件的 路径名字、 类型、 尺寸和详细定义 ; 所有的 web 文件以数组的方式编写进代码中。 3.根据权利要求1所述一种在无操作系统设备中利用CGI技术实现动态web服务器的 方法, 其特征在于 : 步骤 (4) 中 web_cgi_funs 描述所有 CGI 函数的静态数组, 此数组包含所有定义的 权 利 要 求 书 CN 103513986 A 2 2/2 页 3 CGI 函数。 4. 根据权利要求 2 所述一种在无操作系统设备中利用 CGI 技术实现动态 web 服务器 的方法, 其特征在于 : 所述存放所有 web 文件的静态数组包括 HTML 文件、 。

10、CGI 文件、 图片和 CSS 文件。 5.根据权利要求3所述一种在无操作系统设备中利用CGI技术实现动态web服务器的 方法, 其特征在于 : 所述存放所有 CGI 函数的静态数组, 包含所有的 CGI 函数。所有的 CGI 函数都是以 C 语言实现。 6. 根据权利要求 1 所述一种在无操作系统设备中利用 CGI 技术实现动态 web 服务 器的方法, 其特征在于 : 所述 HTTP 协议解析与组包模块, 包括对 HTTP Command、 URI、 HTTP Version、 Host, HTTP 标准协议参数的解析, 以及 Cookies 的解析与处理。 7. 根据权利要求 1 所述一。

11、种在无操作系统设备中利用 CGI 技术实现动态 web 服务器 的方法, 其特征在于 : 所述方法还包括 AJAX 效果实现方法 : javascript 文件 get_time.js 包含一个定时器, 每隔 1 秒向 web 服务器指定的页面发送查询请求, 等 web 服务器应答后, get_time.js 变将结果在后台刷新到页面的指定区域。 权 利 要 求 书 CN 103513986 A 3 1/10 页 4 一种在无操作系统设备中利用 CGI 技术实现动态 web 服务 器的方法 技术领域 0001 本发明涉及一种在无操作系统设备中利用 CGI 技术实现动态 web 服务器的方法, 。

12、属于嵌入式 Internet 设备的技术领域。 背景技术 0002 随着物联网的发展以及网络化尤其是 web 应用的普及, 对设备的联网、 智能化等 要求也越来越高。如何使用简单的方法让简单的设备也能接入 Internet 并通过 web 对其 管理、 配置将是我们面临的一个难题。 0003 在现有技术中, 传统的以单片机或者是Cortex-M3ARM为CPU的设备一般没有实现 web 功能或者只能实现静态网页 ; 而有动态网页支持的设备一般是支持嵌入式操作系统的 CPU再使用成熟的web服务器 (如boa) 实现, 这样势必成本、 功耗以及复杂度会成倍的提高。 发明内容 0004 针对现有技。

13、术的不足, 本发明提供一种在无操作系统设备中利用 CGI 技术实 现动态 web 服务器的方法。本发明的目的在于 : 提供一种简单、 模块的化的方法在无操 作系统支持的设备中使用 CGI 技术实现动态 web 服务器。公共网关接口 CGI(Common GatewayInterface) 是 WWW 技术中最重要的技术之一, 有着不可替代的重要地位。CGI 是外 部应用程序 (CGI 程序) 与 Web 服务器之间的接口标准, 是在 CGI 程序和 Web 服务器之间传 递信息的规程。CGI 规范允许 Web 服务器执行外部程序, 并将它们的输出发送给 Web 浏览 器, CGI 将 Web 。

14、的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。 0005 本发明的技术方案如下 : 0006 一种在无操作系统设备中利用 CGI 技术实现动态 web 服务器的方法, 包括步骤如 下 : 0007 其中, 该方法的实现包括了以下模块 : HTTP 解析与组包模块 (http.c) 、 web 服务器 总调度模块 (web_server.c) 、 网页文件定义模块 (web_page.c) 、 CGI 文件解析及函数解析 模块 (cgi_parser.c) 和 CGI 函数实现模块 (cgi_fun) ; 所述 HTTP 协议解析与组包模块, 用 于解析 HTTP 协议 ; 所述 we。

15、b 服务器总调度模块, 用于整个 web 服务器的调度, 包括根据 URI 查找对应的文件、 错误处理 ; 所述 CGI 文件解析及函数解析模块中的 CGI 文件解析模块, 用 于解析 CGI 文件, 分析出 CGI 文件中嵌入在 标记中 CGI 函数的名字和参数 ; 所述 CGI函数解析模块, 将CGI文件解析模块解析出来的函数名字与CGI函数执行体相对应并执 行 ; 0008 该方法包括步骤如下 : 0009 (1) 首先, HTTP 解析与组包模块对 HTTP 服务收到的网络包进行处理, HTTP 解析与 组包模块按照 HTTP1.1 的格式, 解析出网络参数放到 HTTP_RQST_H。

16、EAD 结构体中 ; 所述的网 络参数包括 Command、 URI、 Version、 Host、 Cookies 等参数 ; 所述 HTTP_RQST_HEAD 结构体 说 明 书 CN 103513986 A 4 2/10 页 5 包含 HTTP 协议的规定的参数 : 例如 GET 的参数放到 $_GET 数组中, POST 的参数放到 $_ POST 数组中, Cookies 放到 $_COOKIE 中 ; 0010 (2) 然后, web 服务器总调度模块开始根据解析出的网络参数 URI, 搜索网页文件 定义模块 (web_page.c) 中的数组 : web_pages 数组, 查。

17、找 URI 请求的文件, 如果没有找 到, 则返回 404NOT FOUND 页面 ; 如果找到了对应的文件, 则首先判断是否为 CGI 文件, 如果 不是, 则直接把web_pages数组表示的文件拷贝到发送缓冲区由HTTP解析与组包模块发 送 ; 如果为CGI文件, 则将此文件送给CGI文件解析及函数解析模块中的CGI文件解析模块 进行处理, 然后将 CGI 函数执行的结果拷贝到发送缓冲区由 HTTP 解析与组包模块发送 ; 0011 (3) CGI 文件解析及函数解析模块中的 CGI 文件解析模块从 CGI 文件的第一个字 符开始扫描, 每当遇到 标记时, 说明标记里面是 CGI 函数,。

18、 然后把标记里面的字符 串送给 CGI 文件解析及函数解析模块中的 CGI 函数解析模块进行处理, 当 CGI 函数实现模 块处理完毕时, 返回结果就在发送缓冲区了 ; 0012 (4) CGI 函数解析模块首先将 中字符串格式的 CGI 函数名字和参数, 解析 为多个 tokens, 然后根据 tokens0 在 web_cgi_funs 中查找对应的 CGI 函数, 如果没有 找到, 则直接把 作为普通的文本放到发送缓冲区中等待发送 ; 如果找到了, 则将除 了 tokens0 以外的 tokens 作为参数传递给 CGI 函数并执行 CGI 函数, 格式如下 : 0013 outbuf=。

19、(*web_cgi_funsi.func)(tokensNum, cgi_cmd_tokens, outbuf, http_ rqst_head, http_resp_head); 0014 (5) CGI 函数如果需要页面传来的 GET 或者是 POST 变量, 则使用 http_get_arg_ get() 函数或者是 http_post_arg_get() 函数从 http_rqst_head 中获取 ; 在使用 IP 地 址设置页面设置 IP 地址时, HTTP 解析与组包模块将 IP、 子网掩码以及网关的设置结果放 到 http_rqst_head 的 $_POST 变量中, cgi。

20、_ip_set 函数使用 http_post_arg_get(http_ rqst_head, “IP“) 得到 IP 参数, 然后进行处理 ; CGI 函数最后将结果放到发送缓冲区 ; 0015 (6) 当 CGI 文件解析及函数解析模块中的 CGI 文件解析模块将整个 CGI 文件处理 完毕时, 直接将 HTTP 协议发送的参数放在 http_resp_head 变量中和发送缓冲区送给 HTTP 解析与组包模块进行发送发送便可。 0016 根据本发明优选的, 步骤 (2) 中 web_pages 描述所有 web 文件的静态数组, 此数 组包括所有 web 文件的路径名字、 类型、 尺寸和。

21、详细定义 ; 所有的 web 文件以数组的方式编 写进代码中。 0017 根据本发明优选的, 步骤 (4) 中 web_cgi_funs 描述所有 CGI 函数的静态数组, 此数组包含所有定义的 CGI 函数。 0018 根据本发明优选的, 所述存放所有 web 文件的静态数组包括 HTML 文件、 CGI 文件、 图片和CSS文件。 这些文件都是以静态的方式存放在此数组, 无需专门的文件系统存放 ; 而 CGI 文件只是将 CGI 函数使用 标记插入普通的 HTML 文件形成。 0019 根据本发明优选的, 所述存放所有 CGI 函数的静态数组, 包含所有的 CGI 函数。所 有的 CGI 。

22、函数都是以 C 语言实现。保持与系统语言一致, 便于实现。 0020 根据本发明优选的, 所述 HTTP 协议解析与组包模块, 包括对 HTTP Command、 URI、 HTTP Version、 Host, HTTP 标准协议参数的解析, 以及 Cookies 的解析与处理。 0021 根据本发明优选的, 所述方法还包括 AJAX 效果实现方法 : 所述 AJAX 效果, 是指不 说 明 书 CN 103513986 A 5 3/10 页 6 需要人工刷新整个页面, 而是由浏览器自动发送查询参数, 并刷新显示在页面的部分区域 内 ; 本方法中的设备运行时间实时显示便是使用 AJAX 实现。

23、 ; javascript 文件 get_time.js 包含一个定时器, 每隔 1 秒向 web 服务器指定的页面发送查询请求, 等 web 服务器应答后, get_time.js 变将结果在后台刷新到页面的指定区域。 0022 本发明的优势在于 : 0023 1、 本发明所述的方法只需要 5K 的代码空间就能实现一个如上所述功能的 web server。 0024 2、 本发明所述的方法只需要基本的 C 语言实现整个代码, 不需要任何第三方库。 0025 3、 本发明所述的方法中, 各个模块划分明确, 算法实现简单, 运行效率非常高。 0026 4、 本发明所述的方法不需要文件系统支持。 。

24、附图说明 0027 图 1 为本发明的流程图 ; 0028 图 2 为本发明 CGI 文件解析及函数解析模块的流程图 ; 0029 图 3 为本发明的实现的自动刷新设备运行时间的 AJAX 效果图 ; 0030 图 4 为本发明的实现获取和设置设备 IP 地址效果图。 具体实施方式 0031 下面结合实施例和说明书附图对本发明做详细的说明, 但不限于此。 0032 在执行本发明所述方法之前, 0033 首先介绍该方法中用到的数据结构 0034 i.web_pages 数组主要包含所有 web 页面的描述, 包括文件的名字、 格式、 尺寸、 已经指向具体文件字符串的指针, 具体内容如下 : 00。

25、35 说 明 书 CN 103513986 A 6 4/10 页 7 0036 页面的格式可以为 HTML、 CSS、 图片、 CGI 等等。 0037 ii.而普通HTML页面的格式只是以字符串方式存储, 具体实现如下 (以login.htm 文件为例) : 0038 0039 说 明 书 CN 103513986 A 7 5/10 页 8 0040 iii.图片文件直接可以使用工具转换为C语言可识别的数组格式 (以logo.jpg文 件为例) : 0041 0042 iv.CGI 页面的格式如下 (以 get_ip.cgi 文件为例) : 0043 0044 说 明 书 CN 103513。

26、986 A 8 6/10 页 9 0045 如上所示其中需要嵌入 CGI 代码的位置, 直接将 CGI 函数及参数放入 标 记中便可, 加入要嵌入一段获取设备当前 IP 的代码, 则使用 便可, 如 果要获取子网掩码则使用 。在此方法中, getip 为一个 CGI 函数, 带一个参数, 参数可以为” ip” 、 ” mask” 、 ” gateway” 。getip 等 CGI 函数, 都被放到了 cgi_ funs 数组中, 供 CGI 函数解析模块调用。 0046 v.cgi_funs 数组格式如下 : 0047 0048 vi.CGI 函数格式如下 (以 setip 为例) : 004。

27、9 0050 说 明 书 CN 103513986 A 9 7/10 页 10 0051 实施例 1、 0052 一种在无操作系统设备中利用 CGI 技术实现动态 web 服务器的方法, 包括步骤如 下 : 0053 其中, 该方法的实现包括了以下模块 : HTTP 解析与组包模块 (http.c) 、 web 服务器 总调度模块 (web_server.c) 、 网页文件定义模块 (web_page.c) 、 CGI 文件解析及函数解析 模块 (cgi_parser.c) 和 CGI 函数实现模块 (cgi_fun) 。所述 HTTP 协议解析与组包模块, 用 于解析 HTTP 协议 ; 所。

28、述 web 服务器总调度模块, 用于整个 web 服务器的调度, 包括根据 URI 查找对应的文件、 错误处理 ; 所述 CGI 文件解析及函数解析模块中的 CGI 文件解析模块, 用 于解析 CGI 文件, 分析出 CGI 文件中嵌入在 标记中 CGI 函数的名字和参数 ; 所述 CGI函数解析模块, 将CGI文件解析模块解析出来的函数名字与CGI函数执行体相对应并执 行 ; HTML 文件、 图片、 CSS 等静态文件可以直接使用数组的方式存放在 web_pages, 而对于 CGI 动态文件, 只需要像 PHP 或者是 ASP 文件一样, 在 HTML 中插入 表示的 CGI 函数 便可。

29、。 0054 该方法包括步骤如下 : 0055 (1) 首先, HTTP 解析与组包模块对 HTTP 服务收到的网络包进行处理, HTTP 解析与 组包模块按照 HTTP1.1 的格式, 解析出网络参数放到 HTTP_RQST_HEAD 结构体中 ; 所述的网 络参数包括 Command、 URI、 Version、 Host、 Cookies 等参数 ; 所述 HTTP_RQST_HEAD 结构体 包含 HTTP 协议的规定的参数 : 例如 GET 的参数放到 $_GET 数组中, POST 的参数放到 $_ 说 明 书 CN 103513986 A 10 8/10 页 11 POST 数组。

30、中, Cookies 放到 $_COOKIE 中 ; 0056 (2) 然后, web 服务器总调度模块开始根据解析出的网络参数 URI, 搜索网页文件 定义模块 (web_page.c) 中的数组 : web_pages 数组, 查找 URI 请求的文件, 如果没有找 到, 则返回 404NOT FOUND 页面 ; 如果找到了对应的文件, 则首先判断是否为 CGI 文件, 如果 不是, 则直接把web_pages数组表示的文件拷贝到发送缓冲区由HTTP解析与组包模块发 送 ; 如果为CGI文件, 则将此文件送给CGI文件解析及函数解析模块中的CGI文件解析模块 进行处理, 然后将 CGI 。

31、函数执行的结果拷贝到发送缓冲区由 HTTP 解析与组包模块发送 ; 0057 (3) CGI 文件解析及函数解析模块中的 CGI 文件解析模块从 CGI 文件的第一个字 符开始扫描, 每当遇到 标记时, 说明标记里面是 CGI 函数, 然后把标记里面的字符 串送给 CGI 文件解析及函数解析模块中的 CGI 函数解析模块进行处理, 当 CGI 函数实现模 块处理完毕时, 返回结果就在发送缓冲区了 ; 0058 (4) CGI 函数解析模块首先将 中字符串格式的 CGI 函数名字和参数, 解析 为多个 tokens, 然后根据 tokens0 在 web_cgi_funs 中查找对应的 CGI 。

32、函数, 如果没有 找到, 则直接把 作为普通的文本放到发送缓冲区中等待发送 ; 如果找到了, 则将除 了 tokens0 以外的 tokens 作为参数传递给 CGI 函数并执行 CGI 函数, 格式如下 : 0059 outbuf=(*web_cgi_funsi.func)(tokensNum, cgi_cmd_tokens, outbuf, http_ rqst_head, http_resp_head); 0060 (5) CGI 函数如果需要页面传来的 GET 或者是 POST 变量, 则使用 http_get_arg_ get() 函数或者是 http_post_arg_get() 。

33、函数从 http_rqst_head 中获取 ; 在使用 IP 地 址设置页面设置 IP 地址时, HTTP 解析与组包模块将 IP、 子网掩码以及网关的设置结果放 到 http_rqst_head 的 $_POST 变量中, cgi_ip_set 函数使用 http_post_arg_get(http_ rqst_head, “IP“) 得到 IP 参数, 然后进行处理 ; CGI 函数最后将结果放到发送缓冲区 ; 0061 (6) 当 CGI 文件解析及函数解析模块中的 CGI 文件解析模块将整个 CGI 文件处理 完毕时, 直接将 HTTP 协议发送的参数放在 http_resp_hea。

34、d 变量中和发送缓冲区送给 HTTP 解析与组包模块进行发送发送便可。 0062 步骤 (2) 中 web_pages 描述所有 web 文件的静态数组, 此数组包括所有 web 文 件的路径名字、 类型、 尺寸和详细定义 ; 所有的 web 文件以数组的方式编写进代码中。 0063 步骤 (4) 中 web_cgi_funs 描述所有 CGI 函数的静态数组, 此数组包含所有定义 的 CGI 函数。 0064 所述存放所有 web 文件的静态数组包括 HTML 文件、 CGI 文件、 图片和 CSS 文件。这 些文件都是以静态的方式存放在此数组, 无需专门的文件系统存放 ; 而 CGI 文件。

35、只是将 CGI 函数使用 标记插入普通的 HTML 文件形成。 0065 所述存放所有 CGI 函数的静态数组, 包含所有的 CGI 函数。所有的 CGI 函数都是 以 C 语言实现。保持与系统语言一致, 便于实现。 0066 所述 HTTP 协议解析与组包模块, 包括对 HTTP Command、 URI、 HTTP Version、 Host, HTTP 标准协议参数的解析, 以及 Cookies 的解析与处理。 0067 实施例 2、 0068 如实施例 1 所述的一种在无操作系统设备中利用 CGI 技术实现动态 web 服务器的 方法, 其区别在于, 所述方法还包括AJAX效果实现方法。

36、 : 所述AJAX效果, 是指不需要人工刷 说 明 书 CN 103513986 A 11 9/10 页 12 新整个页面, 而是由浏览器自动发送查询参数, 并刷新显示在页面的部分区域内 ; 本方法中 的设备运行时间实时显示便是使用 AJAX 实现 ; javascript 文件 get_time.js 包含一个定 时器, 每隔 1 秒向 web 服务器指定的页面发送查询请求, 等 web 服务器应答后, get_time.js 变将结果在后台刷新到页面的指定区域。 0069 所述 get_time.js 的实现如下 : 0070 0071 0072 AJAX 具体发送到的 web 服务器文件。

37、由 url 变量定义, 在此为 get_time.cgi, 然后 get_time.cgi文件将使用CGI函数getsystime获取当前设备运行世界, 并将结果返回给浏 览器便可。 0073 get_time.cgi 文件定义如下 : 0074 说 明 书 CN 103513986 A 12 10/10 页 13 说 明 书 CN 103513986 A 13 1/3 页 14 图 1 说 明 书 附 图 CN 103513986 A 14 2/3 页 15 图 2 图 3 说 明 书 附 图 CN 103513986 A 15 3/3 页 16 图 4 说 明 书 附 图 CN 103513986 A 16 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1