对 goahead Web服务器 的学习(一) 您所在的位置:网站首页 goahead是什么 对 goahead Web服务器 的学习(一)

对 goahead Web服务器 的学习(一)

2023-06-22 03:55| 来源: 网络整理| 查看: 265

对 goahead Web服务器 的学习(一)

GoAhead WebServer是一个功能强大、可以在多个平台运行的嵌入式WebServer,至于其特性就不多说了,本篇以在ubuntu系统上构建简单的动态网页为例说明使用goahead进行web开发的一般步骤,至于goahead在其他平台上的移植,后面的文章里再专门详细介绍。

使用的版本为goahead-2.1.8,好吧,这个版本确实比较老了,官方已经结束对此版本的支持,目前官网最新的版本为4.0.1,可以前往下载—–下载链接,但是2.1.8版本代码量较少,更容易理清代码结构,比较适合新手入门。

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

ASP过程GoForms过程(从3.X版本开始更新为GoActions过程,简化了使用,但调用方法基本不变)

asp过程用于在网页中动态显示内容,而goforms过程用于响应用户输入,更新设置或执行特定动作。

一般步骤:

构建web网页,一般为后缀.asp的asp网页文件,动态内容用特定的ASP过程名代替,使用将过程名包裹,也称一个占位符。

在某个.c文件中定义与ASP过程对应的C函数,函数原型static int AspName(int eid, webs_t wp, int argc, char_t argv),然后在**main函数中的initWebs()函数中使用websAspDefine()将ASP过程和C函数关联起来。

类似地,某个.c文件中定义与GoForms过程对应的C函数,函数原型static void FormName(webs_t wp, char_t *path, char_t *query),同样在main函数中的initWebs()函数中使用websFormDefine()将GoForms过程和C函数关联起来。

下面以在页面上实现一个可以输入姓名和年龄的网页为例

首先在web目录下创建一个asp文件,命名为MyTest.asp My Test My Test Name: Age:

GoForms会绑定到以 /goform/开头的URI。 当一个客户端请求一个URI /goform/NAME 时就会调用该动作处理程序,然后通过NAME查找GoForm。 之后调用绑定到NAME的C函数,来为请求提供服务。

接下来定义一个用来关联ASP过程的C函数

为了方便我们就在LINUX/main.c中直接定义吧 先定义两个全局变量用来存储name和age:

char_t g_test_name[32] = {0}; unsigned int g_test_age; /* 与ASP过程绑定的C函数 */ static int AspMyTest(int eid, webs_t wp, int argc, char_t **argv) { char_t *name; char_t buffer[128]; /* 判断参数是否过少 */ if (ejArgs(argc, argv, T("%s"), &name) < 1) { websError(wp, 400, T("Insufficient args\n")); return -1; } /* 根据页面上input标签内的name属性判断将什么变量显示到页面上对应的文本框内 */ if (!strcmp(name,T("name"))) { sprintf(buffer, "%s", g_test_name); return websWrite(wp, T("%s"),buffer); //websWrite()是goahead的API,可以将内容写回html页面 } else if (!strcmp(name,T("age"))) { sprintf(buffer, "%d", g_test_age); return websWrite(wp, T("%s"),buffer); } else { return -1; } } 接下来定义一个用来关联GoForms过程的C函数 同样定义在main.c中吧~ static void FormMyTest(webs_t wp, char_t *path, char_t *query) { char_t *strval = NULL; strval = websGetVar(wp, T("name"), T("")); /* websGetVar()可以从页面取出文本框内的数据 */ if (NULL != strval) { /* 将从页面上取出的数据存入全局变量中 */ strcpy(g_test_name, strval); } strval = websGetVar(wp, T("age"), T("")); if (NULL != strval) { g_test_age = atoi(strval); } websHeader(wp); websFooter(wp); websDone(wp, 200); } 在文件开始将两个函数声明一下 static int AspTestGet(int eid, webs_t wp, int argc, char_t **argv); static void FormMyTest(webs_t wp, char_t *path, char_t *query); 在initWebs函数中将过程与C函数关联

使用websAspDefine()将ASP过程与C函数关联起来

websAspDefine(T("AspMyTest"), AspMyTest);

使用websFormDefine()将Goforms过程与C函数关联起来

websFormDefine(T("FormMyTest"), FormMyTest); 编译生成可执行文件

进入LINUX目录,执行make(因为本次在ubuntu下编译,所以不需要修改Makefile), 编译完成后会生成可执行文件webs

执行程序测试效果

./webs &

浏览器中输入本机ip地址后跟网页文件名访问我们创建的网页,如 127.0.0.1/MyTest.asp

为便于验证,开启两个同样的网页,一个进行操作,另一个及时观察数据的变化。 输入网址后出现网页如下: 初次访问网页 我们分别向两个输入框中输入随意内容,如”admin”,”21”,点击Apply按钮提交输入。(提交时会调用GoForms过程将输入的内容写入C函数中的全局变量)

然后我们重新打一个同样的网页,发现数据已经被成功提交并显示在当前页面上了。(界面显示时会调用ASP过程从全局变量取出来,显示到页面上) 二次刷新网页

结束


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有