在嵌入式设备上使用lua实现cgi的方法

文档序号:9911225阅读:1245来源:国知局
在嵌入式设备上使用lua实现cgi的方法
【技术领域】
[0001]本发明涉及httpweb服务领域,具体涉及一种在嵌入式设备上使用Iua实现cgi的方法。
【背景技术】
[0002]1.在嵌入式web领域,对于提供web服务,一般是有这样几种解决方案:
[0003](DCgi 方案
[0004]Cgi是Common Gateway Interface(通用网关接口)的缩写,是HTTP服务器程序和外界交互的一个接口程序,它的基本原理是将需要通过网页来展示的内容,以html语法格式进行封装,传递给HTTP服务。
[0005]Cgi的本质是一个可被执行的程序或者是脚本,能够用多种程序语言来进行编写。
[0006](2)asp 方案
[0007]asp是微软在1996年推出,目的是简化开发web程序时候的复杂性,用于取代对Web服务器进行可编程扩展的CGI方案,主要功能是将脚本语言、html、数据库访问等功能组件结合在一起,形成一个在服务器端运行的应用程序。
[0008]asp最早是应用于桌面服务器上,后来也逐渐移植到了嵌入式平台,像著名的嵌入式web服务器goahead就支持asp。
[0009](3)php 方案
[0010]php和asp的原理和实现方式类似,本身是一门语言,被嵌入到html里面。php在主流的web开发领域广泛使用,通常配合以后台的apache服务器,对数据库的支持也非常友好。
[0011](4)java 方案
[0012]使用java作为嵌入式设备上的web解决方案,也曾经使用,但缺陷较为明显:相对来说最为复杂和笨重。需要在底层有java虚拟机的支持,功能和扩展性丰富,一般使用在大型的web系统中。
[0013]2.传统的C语言cgi方式如下:
[0014]cgi是动态网页技术最早采用的一种方式,如图1所示,它是如下的一个应用场景:有一个http服务器,用于解析http协议,从协议包含的数据域中得到控制信息和数据信息;启动一个新的进程,传入控制命令和数据,新进程做对应处理,生成用户页面展示的html语句,同时将处理得到的数据填入到html中,最后将组合得到的html语句回传给http服务;这样,用户就能通过浏览器访问动态生成的页面。
[0015]这样一个完整的解决方案称之为cgi方式,里面有几个关键点:
[0016](I)有一个第三方的程序,处理控制命令,该程序就称为cgi程序,也叫cgi接口 ;
[0017](2)http服务程序需要知道该cgi程序,并能执行它;
[0018](3)用户在浏览器上看到的页面已经是静态的html语句组成,这些html语句全部是由cgi程序生成;
[0019]在上文中提到,cgi程序可以是一个可执行程序,也可以是一个能被执行的脚本。
[0020]传统的cgi程序由C语言来实现:使用C代码,按照web页面对于html的格式要求,依次输出格式语句(Content-type、〈head〉、〈body〉)和实际的页面内容。
[0021]该段C代码被编译成为一个可执行程序,在Linux上是一个elf文件,被http服务进程调用执行,Linux上的标准的做法是用fork方式在子进程中执行cgi程序。Cgi程序输出的内容要传递给http服务进程,会涉及到进程间通信,由于双方是父子进程关系,会通过管道(pipe)的方式做数据交互。而且按标准做法,会将cgi程序中的标准输出重定向到pipe中,这样,C程序通过标准输出(printf),就能够将页面html语句发送到http服务进程。
[0022]简单的C写成的cgi程序:
[0023]printf("Content-type:text/htmlArAn");
[0024]printf (//<html>\n//);
[0025]printf (//<head><title>CGI Output</titleX/head>\n//);
[0026]printf (//<body>\n//);
[0027]printf (//<H1>CGI Test Program〈/Hl>\n");
[0028]printf (//</body>\n//);
[0029]printf (//</html>\n//);
[0030]3.传统cgi的缺陷
[0031]用C语言来实现cgi程序,存在有多个方面的缺陷:
[0032](I)C语言是编译型语言,在代码修改之后需要重新编译链接生成可执行程序才能执行,这会给开发时候调试页面显示内容带来不便;
[0033](2)C语言偏向系统底层,在处理字符串、正则表达式、面向对象等方面有欠缺,而实际面向服务的应用开发中,这些功能被频繁使用,这就使得cgi程序在开发中较繁琐,不太容易处理较为复杂的应用逻辑;
[0034](3)需要编译才能执行的特性,使得cgi程序和静态html页面的嵌套不太可行。在实际开发中静态页面的开发是可以独立进行的,由专业美工人员进行页面布局、CSS样式的设计,然后再在cgi程序中设法嵌套这些静态html,由cgi代码来控制显示的逻辑,填写必要的动态数据。而由于C语言本身的限制,几乎无法在C代码写成的cgi程序中做这样的操作。
[0035]本发明是使用一种名为Iua的解释型编程语言,混合静态的html语言,以cgi的方式,提供web页面展示。本质上是一个cgi接口,对应于【背景技术】中的第一种CGI方案。

【发明内容】

[0036]为了克服现有技术的上述缺点,本发明提供了一种在嵌入式设备上使用Iua实现cgi的方法,建立在现有的http协议和通用的web基础服务实现之上,创新性的使用Iua脚本语言,混合静态的html页面,实现cgi接口,作为在嵌入式设备上页面展示的框架。
[0037]本发明解决其技术问题所采用的技术方案是:一种在嵌入式设备上使用Iua实现cgi的方法,首先将Iua脚本代码嵌入到静态开发的html页面中,形成混合了 Iua语句和html语句的页面文件;然后采用html文件解析模块对混合了 Iua语句和html语句的页面文件进行解析,解析后交由Iua解释器执行;最后通过Iua cgi接口返回html给http服务器,显示在用户浏览器端。
[0038]进一步地,将Iua脚本代码嵌入到静态开发的html页面中的方法是:把需要输出的html代码单独形成一个文件,同时在里面嵌入Iua语句,用来获取动态数据和控制页面元素展示。
[0039 ]进一步地,所述动态数据包括系统状态信息、数据库的查询。
[0040]进一步地,所述页面元素是指html语言编写的页面上的展示文本、输入控件和表格。
[0041]进一步地,所述控制页面元素展示的方法是:通过Iua语言的条件判断和循环特性来控制文本是否展示,以及控制表格的行、列及展示内容等。
[0042]进一步地,所述html文件解析模块对混合了 Iua语句和html语句的页面文件进行解析时,对于Iua语句部分保留,html语句部分封装一层Iua的标准输出,将这两部分进行合并,翻译成Iua脚本。
[0043]与现有技术相比,本发明的积极效果是:使用了名为Iua的解释型语言,作为实现cgi程序的方式,其特点是:
[0044](I)解释性语言,在修改之后无需编译即可执行,降低开发时候调试的复杂度;
[0045](2)作为一门高级语言,支持面向对象特性,丰富的字符串处理接口、正则表达式匹配,能够方便的开发较为复杂的业务逻辑;
[0046](3)能够被嵌套进入静态的html页面中,作为控制html页面元素输出现实的控制单元。
【附图说明】
[0047]本发明将通过例子并参照附图的方式说明,其中:
[0048]图1是使用cgi方式的web系统服务流程示意图;
[0049]图2这本发明的Iuacgi框架模型示意图。
【具体实施方式】
[0050]为了克服现有技术的缺陷,本发明引入了用脚本语言、解释型语言来作为cgi程序的方式。
[0051]和上面C语言的代码类似,我们给出一段最简单的Iuacgi程序代码:
[0052]#!/bin/lua
[0053]print("Content-type:text/htmlArAn");
[0054]print("〈html>\n");
[0055]print("〈head>〈title>CGI Output</titleX/head>\n//);
[0056]print("〈body>\n");
[0057]print("〈Hl>LUA CGI Test Program〈/Hl>\n");
[0058]print("〈/body>
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1