求嵌入式WEB服务器GoAhead入门教程

[复制链接]
 楼主| kasam 发表于 2017-1-24 15:31 | 显示全部楼层 |阅读模式
本人刚接一项目,需要基于嵌入式WEB 服务器GoAhead做一套控制程序,从github上下载了最新的代码。并且在Linux上编译安装完成,现在可以运行静态文件,cgi程序。但是对GoAhead里面的goforms、action这些不清楚如何入手。在网上百度了一些,也没见到比较完整的例子。其中比较好的是某篇blog上提到的内容。如下
****************************************************************************************************
  1. 建立一个form.asp,并保存到项目/web/目录下,内容如下:
  2. <html>
  3. <!-Copyright(c) Go Ahead software Inc.,2012-2012.All Rights Reserved.->
  4. <head>
  5. <title>Goahead Form Test </title>
  6. <link rel="stylesheet" href="style/normal_ws.css" type="text/css">
  7. </head>
  8. <body>
  9. <h1>Goahead Form Test 1</h1>
  10. <form action=/goform/formTest method=POST>
  11. <table>
  12. <tr>
  13. <td>Name:</td><td><input type=text name=name size=50 value=""></td>
  14. </tr>
  15. <tr>
  16. <td>Addr:</td><td><input type=text name=addr size=50 value=""></td>
  17. </tr>
  18. <tr>
  19. <td></td>
  20. <td ALIGN="CENTER">
  21. <input type=submit name=ok value="OK"> <input type=submit name=ok value="CANCEL"></td>
  22. </tr>
  23. </table>
  24. </form>
  25. </body>
  26. </html>

****************************************************************************************************
  1. 在 goahead 中增加如下内容:
  2. websFormDefine(T("formTest"), formtest); // 注册
  3. static void formtest(webs_t wp, char_t *path, char_t *query) // 原型
  4. {
  5. char_t *name, *addr;
  6. name = websGetVar(wp, T("name"), T(""));
  7. addr = websGetVar(wp, T("addr"), T(""));
  8. websHeader(wp);
  9. websWrite(wp, T("<body><h2>Name: %s, Addr: %s</h2>\n"),name, addr);
  10. websFooter(wp);
  11. websDone(wp, 200);
  12. }

****************************************************************************************************

关于**中描述的“在 goahead 中增加如下内容”,一直没搞明白,是在goahead.c中添加上述代码后再编译安装goahead,还是另外编写处理。

如果在goahead.c中添加代码,应该添加在什么位置呢?如果是另外编写程序,又改怎么处理?

烦请各路大侠指点,万分感谢!!!
 楼主| kasam 发表于 2017-2-3 14:20 | 显示全部楼层
终于自己摸索出来了,新版本的goahead和之前的很不一样的。现在基本上就用websDefineAction,和websDefineJst 来进行自定义函数的定义。修改程序主要是在goahead的源代码http.c里面进行。

步骤如下:
1、创建自己的函数,如
static void buy(Webs *wp)
{
        char *name,*item;
        websSetStatus(wp, 200);
        websWriteHeaders(wp, -1, 0);
        websWriteEndHeaders(wp);
        name=websGetVar(wp, "name", NULL);
        item=websGetVar(wp, "item", NULL);
        websWrite(wp,  "Age %s", websGetVar(wp, "age", ""));*/
        printf("Name=%d \n\n",name);
        printf("Item=%d \n\n",item);
        websWrite(wp, "<html><body><p>Name %s</p><p>Item:%s</p></body></html>\n", name,item);
        websFlush(wp, 0);
        websDone(wp);
}

2、在static void initWebs(Webs *wp, int flags, int reuse)中进行注册。如:
        websDefineAction("buy", buy);
3、在程序前面定义函数,否则编译不通过。如:
static void        buy(Webs *wp);

4、在goahead源代码里面的route.txt添加配置,如下
#route uri=/action handler=action------------------这个记得要注释掉,我也不知道为啥,不注释的话,就会访问不到
route uri=/action/buy methods=GET|POST handler=action

5、重新使用make编译源代码,再install

 楼主| kasam 发表于 2017-2-3 14:24 | 显示全部楼层
补充一下,我最新的代码是直接从github上下载的,这里不准贴链接,所以就不贴了,版本是3.6.3。
dirtwillfly 发表于 2017-2-6 17:00 | 显示全部楼层
kasam 发表于 2017-2-3 14:20
终于自己摸索出来了,新版本的goahead和之前的很不一样的。现在基本上就用websDefineAction,和websDefineJ ...

能者自答,赞一个
dirtwillfly 发表于 2017-2-6 17:00 | 显示全部楼层
kasam 发表于 2017-2-3 14:20
终于自己摸索出来了,新版本的goahead和之前的很不一样的。现在基本上就用websDefineAction,和websDefineJ ...

论坛用这个的比较少
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部