`

利用GoAhead构建嵌入式web应用

阅读更多
摘要:详细介绍了开源嵌入式web服务器GoAhead的原理,并结合具体实例说明如何利用它构建嵌入式web应用。

Key words: GoAhead, embedded web server, web application

Abstract: This paper introduces the principle of open source embedded web server GoAhead, and explains how to build embedded web application using GoAhead combined with practical examples.

1 简介
廉价的硬件,功能强大的32操作系统,以及无处不在的因特网,它们一起促成了网络应用和设备的飞速增长。大量的设备连接到网络上,于是人们希望通过一种通用、熟悉、快捷的方式来访问和控制它们。嵌入式web服务器正好迎合了这种需求,它们嵌入在网络设备之中,使用标准的浏览器就可以远程访问和控制它们。

然而,并不是所有的web服务器都可以担当如此重任,我们需要的是一个强大,安全,标准的,而且最好是久经考验的嵌入式web服务器。这里将要介绍的GoAhead嵌入式web服务器能够满足所有这些需求,包括西门子,霍尼韦尔,惠普等大型企业都在使用GoAhead。

2 嵌入式web服务器的要求
2.1 易于与设备集成
易于与设备集成包含两个方面的意思,其一是将Web应用程序集成到实时操作系统,其二是可以在Web应用中轻松访问硬件功能。由于GoAhead是开放源代码的,因此这一点不难做到。

2.2 支持将Web页面存储在ROM中
许多嵌入式系统并没有文件系统,因此有必要将web页面保存到ROM中。GoAhead支持对web页面进行编译并将它们链接到最终的可执行文件中。

2.3 加密和用户管理
GoAhead服务器支持使用SSL进行数据加密和认证。同时,它也支持摘要认证机制,一种总是加密密码的更安全的认证机制。用户管理功能允许不同的用户具有不同级别的访问权限。

除了上述要求之外,是否能够快速、方便的生成动态页面是衡量一个嵌入式web服务器的重要指标。GoAhead提供了多种方法编写动态页面,包括asp过程、GoForms过程和embedded JavaScript。GoAhead主要利用asp过程动态获取系统信息然后显示在页面上,GoForms过程则主要用来处理用户指令,例如控制设备和修改配置等。下面以一个动态显示系统当前正在运行的进程信息的小型web应用程序为例,阐述如何利用GoAhead构建嵌入式web应用程序,特别是asp和GoForms过程的使用方法。

3 动态页面支持
在嵌入式设备中,大部分web页面都是动态生成的。生成动态页面的方法主要有两种,通过C代码生成HTML标签和在HTML页面中嵌入表达式标签。直接通过C代码生成页面的优点是灵活,但是却牺牲了友好性,因为不到开始运行程序的最后一刻,你不可能知道这个页面看起来会是个什么样子。相比之下,第二种方法更加直观,你可以使用你所喜欢的工具以所见即所得的方式编辑页面,在必要的地方添加占位符,运行时它们会被动态产生的数据代替。GoAhead完全支持这两种方式。

为了方便的创建具有高度交互性的动态网页,GoAhead提供了asp过程和GoForms过程两种武器。它们实际上都与定义在服务器端的某个C函数绑定在一起,只是分工不同,asp过程用来生成显示在页面中的动态数据,而GoForms过程则用来处理用户输入和修改设置,它们一起构成了GoAhead的核心。

3.1 ASP过程
ASP最初用于IIS中,它是微软开发的生成动态Web页面的服务器端技术。现在已经被移植到包括GoAhead的各种平台中,使用ASP的网页的后缀一般为“.asp”。为了在Web页面中嵌入ASP脚本,只需使用特殊的标签“<%” 和 “%>”将脚本包裹起来。之所以使用ASP标签目的是为了向用户显示动态内容,例如系统进程信息等。因为动态内容实际上是在执行特定的C函数生成的,所以需要将web页面中的ASP标签与特定的C函数联系在一起。一般,整个过程大致可以分成以下三个步骤:

1. 设计web页面,动态内容使用特定的asp过程名替代,也称其为一个占位符。

2. 在某个.c文件中定义与asp过程对应的C函数

3. 在main.c文件中的initWebs函数中使用websAspDefine注册asp过程

以清单1中的<% UpdateProcInfor(); %>标签为例,此标签的目的是为了显示系统当前正在运行的进程的信息。获取进程信息实际上是由位于ui.c中的UpdateProcInfo函数完成的,详见清单2,它负责获取系统进程信息,并格式化为HTML输出。清单3中的websAspDefine函数将<% UpdateProcInfor(); %>标签与UpdateProcInfo函数关联起来,这样当GoAhead解析home.asp页面遇到<% UpdateProcInfor(); %>标签时,控制权就会跳转到UpdateProcInfor()函数,在输出以HTML格式表示的进程信息后,控制权转交给GoAhead继续解析home.asp页面。

注意:asp过程必须符合原型:int AspProcName (int ejid, webs_t wp, int argc, chart_t **argv);
其中,ejid参数作为JavaScript解释器句柄可以用来调用JavaScript相关函数,例如ejGetVar和ejSetResult。wp参数作为浏览器连接的句柄,可以用来调用很多有用的GoAhead服务器函数,例如用来输出HTML语句的websWrite等。argc和argv包含传递给asp过程的实参的个数和内容。

//清单1:home.asp(省略了其它无关的部分,细节请参考附带源代码)

<html>

<head>

<% WriteMetaElement(); %>

</head>



<form action="/goform/UpdateConfig" method="post">

<input type="text" name="interval" value="" size="7" />

<input type="submit" name="ok" value="Update" />

<input type="reset" name="cancel" value="Reset" />

</form>

<% UpdateProcInfo(); %>

</html>

//清单2:ui.c

#include "ui.h"

#include "..\webs.h"

//以HTML格式输出系统当前进程信息

int UpdateProcInfo(int ejid, webs_t wp, int argc, char_t *argv)

{

return WriteProcPage(wp);

}

//根据用户输入改变刷新间隔时间设置

void UpdateConfig(webs_t wp, char_t *path, char_t *query)

{

int tmpInterval=_ttoi(websGetVar(wp, L"interval", L"-1"));

if(tmpInterval>3)

{

s_interval=tmpInterval;

}

websRedirect(wp, L"home.asp");

}

//清单3:main.c文件中的initWebs()函数

#include "ui.h"

//关联asp标签和C函数名字

websAspDefine(T("UpdateProcInfo"), UpdateProcInfo);

websAspDefine(T("WriteMetaElement"), WriteMetaElement);

//关联GoForms标签和C函数名字

websFormDefine(T("UpdateConfig"), UpdateConfig);

3.2 GoForms过程
GoAhead实现了称为GoForms的标准的通用网关接口(CGI)处理用户提交的表单。与传统的CGI方法不同,GoForms过程不是为每个浏览器连接都创建一个新的进程,而是通过与GoAhead服务器共享地址空间,于是可以直接访问全部的请求上下文。GoForms处理器可以自动解析和访问所有的POST和查询数据,它也提供了一组API可以轻松访问CGI变量。

GoForms过程与ASP过程不同,它主要用来响应用户输入以更新系统设置或者执行特定的动作。在GoAhead中,GoForms实现为一个URL处理器,它会解释以"/goform"开始的URLs。紧跟着"goform"之后的字符串定义了表单名字和用户请求的细节。例如:“/goform/ UpdateConfig?interval=5”这个请求表示调用GoForms过程" UpdateConfig ",GoForms变量interval表示用户设置的新刷新间隔时间。GoAhead对ASP过程和GoForms过程的处理十分类似,只是GoForms过程通过websFormDefine函数调用进行关联,并且必须遵守原型“void GoFormsProcName(webs_t wp, char_t *path, char_t *query);”。完整的GoForms过程示例请参考列表1-3中的用来处理用户请求的UpdateConfig过程。

3.3 ROM化网页
对于具有文件系统的嵌入式操作系统来说,可以将web应用中用到的各种资源,例如html文件、图片、css文件以及exe文件直接以文件的形式保存起来。除此以外还存在大量的不具备文件系统的嵌入式操作系统,此时可以利用GoAhead的ROM化功能将所有资源集成到可执行文件中。首先在E:\GoAhead目录下创建一个files.txt文件,将web应用中使用到的所有资源及其路径都保存在这个文件中,如清单4所示:

//清单4:files.txt文件

E:\GoAhead\home.asp

E:\GoAhead\graphics\topbar.gif

E:\GoAhead\style\base.css

然后构建webcomp工程生成webcomp.exe。在命令行中输入命令“webcomp E:\GoAhead files.txt >webrom.c”,此命令的目的是依次将files.txt中的每个资源文件都转换为一个unsigned char数组,并将这些数组添加到自动生成的webrom.c源文件中。最后,只需在webs工程中定义宏WEBS_PAGE_ROM以使能ROM化网页功能,同时使用生成的webrom.c替换webs工程中的原始webrom.c,重新构建webs工程,这样在生成的webs.exe中就包含了运行web应用所需的全部资源,大大简化了部署过程。

3.4 测试web应用程序
运行webs.exe启动GoAhead web服务器,打开浏览器在地址栏输入http://localhost。默认情况下会自动打开home.asp页面,如图1所示。





图1 GoAhead服务器测试页面

4 结语
GoAhead已经被成功的移植到HP-UX, Windows CE, pSOS, QNX, IRIX, uCOS, eCOS, chorus 和 RTEMS等众多操作系统中。本文之所以使用Windows平台上GoAhead移植为例进行说明,一方面每个读者都可以运行附带的源代码亲自进行试验以加深印象,另一方面也可以省略复杂的平台介绍,从而重点掌握GoAhead本身的功能与特点。

笔者在利用GoAhead构建远程监控等嵌入式web应用的过程中,发现有必要对GoAhead特有的一些编程技巧加以说明以少走弯路。GoAhead定义了宏T(x),可以根据是否定义了宏UNICODE使字符串在Unicode和ANSI之间自由切换。当使用websWrite函数输出HTML语句时,请使用<br />而不是\n输出换行符。GoAhead中的一些选项,例如默认页、端口号和重试次数等,都可以进行配置以适应自己的应用程序。另外如果希望为用户提供更加丰富的用户体验,可以考虑使用Java Applet技术。

5 参考文献
1. Anthony J. Massa. Integrating GoAhead WebServer & eCos: Web-based remote management for small systems, http://www.ddj.com/mobile/184405201.

2. GoAhead Overview. http://www.goahead.com/products/webserver/default.aspx
3. Functionality Overview of an Open Source Embedded Web Server. http://data.goahead.com/webserver/WebServer2.1wp5-00.doc


文章摘自:http://www.cnblogs.com/dreamliner/archive/2009/05/30/1492434.html
源码下载地址:http://download.csdn.net/download/dreamliner/1698985
  • 大小: 22.3 KB
分享到:
评论

相关推荐

    利用GoAhead构建嵌入式web应用源代码

    这个压缩包文件包含了使用GoAhead构建嵌入式Web应用的源代码示例,可以帮助开发者深入了解如何在实际项目中应用GoAhead。 1. **GoAhead概述** GoAhead是一个开源的C语言编写的小型Web服务器,它适用于资源有限的...

    利用GoAhead构建嵌入式web应用.doc

    以一个动态显示系统当前运行进程信息的简单Web应用程序为例,我们可以看到如何使用GoAhead来构建嵌入式Web应用。在这个例子中,ASP过程被用来获取系统信息并将其转化为HTML,展示给用户。GoForms过程则处理用户的...

    goAhead-webServer应用开发

    GoAhead webServer是一个小型、轻量级且可靠的嵌入式Web服务器,常用于物联网(IoT)设备和嵌入式系统中。本篇文章将深入探讨如何基于GoAhead进行Web服务器应用开发,以及如何通过页面文件实现对终端的管理。 首先,...

    goahead-2_goahead_设备WEB平台_access管理_goAheadwebserver_服务器

    GoAhead Web Server构建在设备管理框架(Device Management Framework)之上,用户可以像标准的Web Services一样来部署自己的应用,不需要额外的编程。GoAhead Web Server支持SOAP客户端(Simple Object Access ...

    wince-web-server-handler.rar_goahead_wince goAhead_wince web

    在Windows CE(简称WinCE)平台上,开发嵌入式Web应用程序常常需要轻量级的Web服务器,GoAhead Web Server就是这样一款适用于嵌入式系统的HTTP服务器。GoAhead由 Embedthis Software LLC 开发,它以其小巧、高效和...

    嵌入式WebServer GOAHEAD移植实验

    ### 嵌入式WebServer GOAHEAD移植实验 #### 实验目的 通过完成此实验,参与者能够: 1. **了解GOAHEAD Web Server 的移植方法**:掌握将 GOAHEAD Web Server 移植到不同硬件平台的具体步骤,包括如何调整配置文件...

    基于GoAhead webserver的应用开发.docx

    GoAhead webserver是一款轻量级、开源的嵌入式WEB服务器,特别适合于资源有限的环境。它的特点是体积小、功能强大,支持多种操作系统,并且容易进行移植。GoAhead不仅支持静态网页,还具备处理ASP、JavaScript以及...

    goahead-5.1.0.tar.gz

    《Goahead-5.1.0:嵌入式Web服务器的高效选择》 Goahead-5.1.0是一款备受赞誉的嵌入式Web服务器,以其轻量级、高效能和广泛的功能支持在...对于需要构建嵌入式Web应用的工程师来说,Goahead无疑是一个值得信赖的选择。

    GoAhead Webserver

    总结,GoAhead Webserver是一个强大的嵌入式Web服务器,其简洁的设计、易于配置的特性以及对RTOS的良好支持,使其成为嵌入式开发者的理想选择。通过深入理解和利用源码,开发者可以定制出符合项目需求的高效、安全的...

    GoAhead Json开发

    在IT行业中,GoAhead是一种广泛使用的嵌入式Web服务器,尤其适用于物联网(IoT)设备和小型嵌入式系统。它的轻量级设计使得它在资源有限的ARM处理器上运行非常高效,例如ARM7架构。在Linux操作系统上,GoAhead为开发者...

    goahead 添加 ajax

    在IT领域,特别是Web开发中,GoAhead是一个轻量级且高效的嵌入式Web服务器,被广泛应用于资源受限的环境,如嵌入式系统、IoT设备等。而在现代Web应用中,AJAX(Asynchronous JavaScript and XML)技术是实现网页异步...

    goahead-master_goahead_

    总结,Goahead 4.0.5作为一款强大的嵌入式Web服务器,其源代码的学习和理解有助于开发者深入了解Web服务器的工作原理,同时也能为定制化开发提供基础。通过深入研究源代码,我们可以更好地利用Goahead满足各种嵌入式...

    Goahead快速开发指导.doc

    本文档主要介绍如何快速开发基于Goahead的嵌入式WEB应用。 首先,Goahead允许开发者通过goform或CGI来响应网页表单(form)的请求。在项目实践中,通常选择goform来处理页面的表单数据。ASP(Active Server Pages)...

    goahead web server代码及补丁和补丁说明

    GoAhead Webserver构建在设备管理框架(Device Management Framework)之上,用户可以像标准的Web Services一样来部署自己的应用,不需要额外的编程。GoAhead Webserver支持SOAP客户端(Simple Object Access ...

    goahead-2_goahead_设备WEB平台_access管理_goAheadwebserver_服务器_源码.zip

    GoAhead Web Server是一款轻量级的嵌入式Web服务器,广泛应用于各种设备的Web管理平台中,以其小巧、高效、易于集成的特点受到开发者青睐。在深入理解GoAhead之前,我们先来了解一下Web服务器的基本概念。 Web...

    goAhead 源码 3.6.5

    goAhead,一个在嵌入式系统领域广受欢迎的轻量级Web服务器,以其高效、精简的特性,成为许多开发者构建嵌入式产品的首选。本文将详细探讨goAhead 3.6.5版本的核心特点、工作原理以及其在实际应用中的优势。 首先,...

    goahead-4.0.0

    Goahead 4.0.0作为一款优秀的嵌入式Web服务器,其强大的功能和良好的可扩展性,使其成为嵌入式环境下的理想选择。开发者可以通过深入理解和掌握Goahead的特性和API,轻松地在各种嵌入式设备上构建安全、高效的Web...

    goahead-2_goahead_设备WEB平台_access管理_goAheadwebserver_服务器_源码.rar

    总的来说,通过研究goAhead-2_goahead_设备WEB平台_access管理_goAheadwebserver_服务器_源码,开发者不仅可以掌握如何利用goAhead构建和管理设备Web平台,还能深入理解Web服务器的工作机制,这对于开发安全、高效的...

    goahead-server-for-Linux.rar_GOAHEAD WEB_goahead_goahead移植_linux

    《GoAhead服务器在Linux上的移植与应用》 GoAhead服务器是一款轻量级、嵌入式的Web服务器,广泛应用于物联网(IoT)...通过深入学习和实践,我们可以充分利用GoAhead的特性,为Linux系统构建稳定、高效的Web服务环境。

Global site tag (gtag.js) - Google Analytics