嵌入式web服务器--GoAhead

主要特性

GoAhead Web Server,它是一个开源(商业许可)、简单、轻巧、功能强大、可以在多个平台运行的嵌入式Web Server。
GoAhead Web Server的主要特性有:

  • 支持ASP
  • 嵌入式的javascript
  • 标准的CGI执行
  • 内存中的CGI处理GoFroms
  • 扩展的API
  • 快速响应,每秒可处理超过50个请求
  • 完全和标准兼容
  • 如果不包含SSI,仅要求60K的内存;包含SSI,要求500K内存
  • web页面可以存在ROM或文件系统中
  • 支持多种操作系统,包括eCos 、LINUX 、LynxOS 、QNX 、VxWorks 、WinCE、
    pSOS等

一、先介绍下goahead用来构建动态网页的两个重要的过程:

  • ASP过程
  • GoForms过程(从3.X版本开始更新为GoActions过程,简化了使用,但调用方法基本不变)
    asp过程用于在网页中动态显示内容,而goforms过程用于响应用户输入,更新设置或执行特定动作。
    - 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);
  • 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过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只很笨很懒的肥猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值