嵌入式Web Server中XML数据发生器的设计与实现

时间:2022-08-16 06:05:27

嵌入式Web Server中XML数据发生器的设计与实现

摘 要:在嵌入式Web服务器的开发中采用XML技术,可以为嵌入式系统管理提供统一的数据接口,降低系统开发的复杂度,有利于Web服务器的升级和维护。在分析HTTP1.1的基础上,设计出了一种嵌入式Web服务器,重点描述了Web服务器中XML发生器的设计方法。最后结合C语言编程,给出实例验证。

关键词:XML;嵌入式系统;Web服务器;HTTP1.1

中图分类号:TP393.09;TP368.1

在嵌入式环境下,由于软硬件平台的多样性,在一个嵌入式应用中可能会存在多种不同的软硬件平台,而且随着嵌入式系统后续的不断改进和发展,其配置方案及控制接口可能会发生变化。此外,传统的嵌入式系统开发中,数据存储主要采用流式文件,程序对数据结构的依赖性强,不利于软件的升级和维护。在嵌入式系统中采用XML技术进行数据存储和处理可较好地解决上述问题。它可以用统一的接口来管理不同的设备接口及其相关操作,降低嵌入式系统部署、配置和升级的成本,提高了系统开发效率[1]。嵌入式Web服务器是实现嵌入式系统、设备以及应用之间互联的关键组成部分,已经成为目前嵌入式软件中的研究重点。本文将根据所设计的嵌入式Web服务器的方案,提出一种在嵌入式Web服务器中实现XML数据解析的方法,并对XML数据发生器模块进行重点介绍。

1 嵌入式Web服务器的设计

由于嵌入式设备的资源有限,一般来说嵌入式系统都没有文件系统或者TCP/IP协议栈(网络设备一般都有TCP/IP协议栈,但未必有文件系统),嵌入式存储设备和存储空间都非常小,要实现Web服务功能通常都比较困难。因此,针对上述问题,在分析HTTP1.1的基础上,结合嵌入式Web服务器的特点和要求,本文设计出的一种精简的嵌入式Web服务器结构如图1所示[2]。

嵌入式Web服务器建立在安全套接口(Secure Socket Layer)上,HTTP或XML解析模块用于HTTP请求报文分析。如果HTTP 解析模块发现HTTP报文中的有XML消息,则该报文将由XML解析模块来处理;CGI环境变量模块主要用于定义操作系统的环境变量和程序执行环境,可以通过应用程序对这些变量进行存取。CGI函数模块、XML发生器模块以及本引擎模块都可以读取环境变量,并根据这些变量做出相对应的操作[3];CGI函数模块是一个HTTP函数,由HTTP解析模块负责回调[4]。XML数据发生器模块动态生成系统所需要的页面文件信息,用一种统一的、一致的手段来传递原先不统一、不一致的消息格式,增强系统内外部的交互能力,并降低开发成本。同时与系统的脚本引擎模块进行交互,提供统一数据接口。XML数据发生器模块也是本文重点研究的内容[5]。通过设计实现XML数据发生器功能,能够使得嵌入式 Web服务器支持XML数据,使得在不升级软件的情况下能够方便的更新页面内容和业务逻辑,实现嵌入式Web服务中的页面和业务逻辑动态分离的目标。

2 XML概述

2.1 XML的定义

XML即为可扩展的标记语言(eXtensible Markup Language)。XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。XML并非像HTML那样,提供了一组事先已经定义好了的标签,而是提供了一个标准。利用这个标准,开发人员可以根据实际需要定义自己的新的标记语言,并为这个标记语言规定它特有的一套标签[6]。

2.2 XML的特点

相对于HTML来说,XML具有先天的优越性。为了自己的浏览器增加一些特殊的显示效果,HTML加入了一些特殊的标记。日益增多的标签不但使得HTML越来越庞大,同时,浏览器的开发越来越复杂,还降低了不同浏览器之间的兼容性。尽管HTML的标签越来越多,其表现了却还远远不够,有了XML就可以自由地制定自己的标记。由于XML是非专有的并易于阅读和编写,就使得它成为在不同的应用间交换数据的理想格式。XML使用的是非专有的格式,不受版权、专利、商业秘密或是其他种类的知识产权的限制。同时,对于人类或是计算机程序来说,XML都容易阅读和编写,因而成为交换语言的首选。

3 创建XML数据发生器

3.1 基本思想

跟CGI函数动态生成HTML文档一样,我们需要创建XML 数据发生器去动态生成XML文档。创建XML 数据发生器的过程与创建CGI函数的过程很类似,XML数据发生器的入口函数相当于CGI主函数,XML数据发生器入口函数同样也要注册到CGI全局变量cgi_entries中,这样在图1所示的Web服务器结构中,HTTP 解析模块发现用户请求XML文件时才能找到此入口,并利用XML数据发生器去动态生成XML文件。一般把XML数据发生器跟CGI函数放在同一个文件中。

3.2 应用实例

例如定义一个产生main.xml的数据发生器,主要步骤如下:

(1)新创一个名为main.xml的文件

(2)再新创一个文件main.c,在此文件中定义XML 数据发生器的入口函数

其中put_page函数的定义如下:

其中宏定义XML_PAGE为

#define XML_PAGE “main.xml”

(3)还有函数put_device_name、put_device_mode、put_hw_ver、put_fw_ver、put_host_name、put_login_user都是脚本device_name、device_mode、hardware_version、hardware_version、hostname、loginusername的处理函数。

(4)在cgi_entry.c注册这个函数,即在cgi_entries数组中加入如下语句:

{"main.xml", 0, main_xml},

并在cgi_entry.h中声明这个函数为外部函数:

extern int main_cgi(httpd_cond * http_cond);

完成以上编码后,进行编译、执行,可以测试Web服务器中的XML数据发生器模块是否正常工作。

4 结束语

本文介绍了一种嵌入式Web服务器的结构,重点描述了结构中XML数据发生器的实现方式。测试表明:Web服务器端能够正确的输出动态XML文件。本文所介绍的开发方法,使得嵌入式系统的动态界面开发更加方便快捷。由于程序设计时注重了数据内容与其结构的独立,因此即使界面元素发生变化,程序也无需作大量改动,降低了开发和维护成本。

参考文献:

[1]马毅,高岭,张林.嵌入式Web服务模型的设计及初步实现[J].计算机技术与发展,2009.19(1):29-31.

[2]徐兵,沈玉利,谢仕义.嵌入式Web服务器端脚本引擎设计与实现[J].计算机工程与设计,2008,29(15):3933-3935.

[3]刘利群,谢仕义.嵌入式 Web 服务器端文件系统的设计与实现[J].计算机工程与设计,2009,30(12):2859-2861.

[4]张曦煌,柴志雷.嵌入式web服务器中CGI的特点及实现[J].小型微型计算机系统,2003,24(11):2046-2047.

[5]雷涛,郝福珍.嵌入式Web Server的研究与实现[J].计算机工程与设计,2006,27(16):2992-2994.

[6]高觐悦,张功萱.嵌入式XML解析器的设计与实现[J].苏州市职业大学学报,2009,20(1):66-69.

作者简介:于北瑜(1969-),计算机科学与应用专业,研究方向:软件和计算机网络。

作者单位:广东海洋大学信息学院,广东湛江 524088

上一篇:评价治标 均衡治本 下一篇:基于Access的教务管理系统的设计与应用