对 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过程用于响应用户输入,更新设置或执行特定动作。

一般步骤:

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

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

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

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

  • 首先在web目录下创建一个asp文件,命名为MyTest.asp
<html>
<head>
<title>My Test</title>
<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
<% language=javascript %>
</head><body>
<h1>My Test</h1>
<!- 创建一个form表单,goforms会解释为以/goforms开头的URIs ->
<form action=/goform/FormMyTest method=POST><table>
<tr>
<!- 在需要动态显示内容处用ASP过程名代替,格式如下,用<% %>包裹,页面执行到这里 ->
<!- 会跳转到与ASP过程关联的C函数执行内容显示到页面上,之后继续返回页面执行     -><td>Name:</td><td><input type="text" name="name" size=50 value="<% AspMyTest("name"); %>" ></td>
</tr>
<tr><td>Age:</td><td><input type="text" name="age" size=50 value="<% AspMyTest("age"); %>" ></td>
</tr>
<tr><td></td><td ALIGN="CENTER"> <input type="submit" name="apply" value="Apply"> <input type="submit" name="cancel" value="Cancel"></td>
</tr>
</table>
</form>
</body>
</html>

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过程从全局变量取出来,显示到页面上)

  • 结束

对 goahead Web服务器 的学习(一)相关推荐

  1. goahead服务器性能,goahead web 服务器总体结构

    goahead web 服务器总体结构 内容精选 换一换 应用服务器通过物联网平台创建设备命令时,如果设置了callbackurl回调地址,当命令状态变化时(执行失败,执行成功,超时,发送,已送达), ...

  2. arm linux imx6u移植goahead web服务器

    arm linux imx6u移植goahead web服务器 源码下载 源码结构 源码移植 源码下载 1.源码版本goahead2.5 2. 百度云下载链接https://pan.baidu.com ...

  3. 六、Web服务器——FilterListener 学习笔记

    今日内容 1. Filter:过滤器 2. Listener:监听器 Filter:过滤器 1. 概念:* 生活中的过滤器:净水器,空气净化器,土匪.* web中的过滤器:当访问服务器的资源时,过滤器 ...

  4. 用虚拟机搭建web服务器模拟学习项目发布

    1. 下载镜像 这里用的是linux系统做服务器,下载的centos镜像,学习模拟使用minimal版本的就行,玩命令行哈. 2.虚拟机装系统配置系统 首先是虚拟机配置镜像这一套操作,不多赘述了,注意 ...

  5. arm linux goahead,goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中

    本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程.步骤.遇到的问题及其解决方法. 开发环境: 宿    主   机:window XP: 虚    拟   机: ...

  6. 学习PHP7如何快速安装WEB服务器

    文章作者:Lccee 原创说明:欢迎转载,注明出处即可 如何安装web服务器? 学习php7需要安装web服务器,那么新手如何快速安装web服务器 首先我们来简单了解一下,什么叫web服务器 在了解什 ...

  7. 服务器关闭重启后客户端socket能自动连接吗_用Python 撸一个 Web 服务器

    从一个 Hello World 程序说起 要编写 Web 服务器,需要用到一个 Python 内置库 socket.Socket 是一个比较抽象的概念,中文叫套接字,它代表一个网络连接.两台计算机之间 ...

  8. goaheadlinux移植_goAhead2.5嵌入式web服务器移植

    1. GoAhead Web服务器介绍 goAhead Web服务器,小巧.精致,提供了值得称道的性能,特别适合于嵌入式系统,因此,在很多嵌入式产品如路由器中都用到了goAhead作为嵌入式web服务 ...

  9. goahead(嵌入式Web服务器)之交叉编译、移植篇

    GoAhead简介: GoAhead是一个开源(商业许可).简单.轻巧.功能强大.可以在多个平台运行的嵌入式Web Server. GoAhead主要特性: 1 很小的内存消耗 2 支持认证功能Dig ...

最新文章

  1. 数据库常用操作(未完待续)
  2. 指针数组 数组指针 函数指针 指针函数
  3. html点击按钮自动获取值,如何获取HTML按钮的文本值
  4. Oracle处理小数点后位数、格式化数字、查找指定字符所在位置的几个函数
  5. WebSocket和Java
  6. LeetCode 2022春季赛 1. 宝石补给
  7. supervisor监控php进程程序,详解Supervisor进程守护监控(转)
  8. CSS框架+响应式设计
  9. 毕业前五年,我们应该把钱看轻
  10. BZOJ1296[SCOI2009] 粉刷匠
  11. Java调用ffmepg+mencoder视频格式转换(*)
  12. 2020.9.2丨个体重测序、KASP分型产品介绍
  13. Peer cert cannot be verified or peer cert invalid 尝试其他镜像。
  14. 51单片机教程:二相四线步进电机驱动
  15. 9型人格人口占比数据_数据人格
  16. MongoDB:count 结果不准确的原因与解决方法
  17. 计算机概念知识点,计算机知识点最全版概念.doc
  18. @media媒体查询
  19. NHANES数据库的介绍及使用(一)
  20. 又一虚假炒外汇诈骗平台被上海警方捣毁

热门文章

  1. hpuoj1691 CZY追女孩
  2. 《百岁人生》读书笔记 | 能活百年,为什么要死在 35 岁?
  3. CSS高级篇——圆角
  4. Python 3DES 加密解密
  5. 封装型号对照_贴片三极管型号代码
  6. [Leetcode] KMP
  7. Ashton Kutcher 确认主演斯蒂夫•乔布斯传记电影
  8. 乘的英语计算机和驾驶三门课程,新视野英语教程1 Unit 1 答案
  9. 白市驿计算机学校,重庆白市驿职业中学
  10. Android设备系统及屏幕分辨率统计信息汇总(截至2018年7月)