打印

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

[复制链接]
5419|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kasam|  楼主 | 2017-1-24 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人刚接一项目,需要基于嵌入式WEB 服务器GoAhead做一套控制程序,从github上下载了最新的代码。并且在Linux上编译安装完成,现在可以运行静态文件,cgi程序。但是对GoAhead里面的goforms、action这些不清楚如何入手。在网上百度了一些,也没见到比较完整的例子。其中比较好的是某篇blog上提到的内容。如下
****************************************************************************************************
建立一个form.asp,并保存到项目/web/目录下,内容如下:
<html>
<!-Copyright(c) Go Ahead software Inc.,2012-2012.All Rights Reserved.->
<head>
<title>Goahead Form Test </title>
<link rel="stylesheet" href="style/normal_ws.css" type="text/css">
</head>
<body>
<h1>Goahead Form Test 1</h1>
<form action=/goform/formTest method=POST>
<table>
<tr>
<td>Name:</td><td><input type=text name=name size=50 value=""></td>
</tr>
<tr>
<td>Addr:</td><td><input type=text name=addr size=50 value=""></td>
</tr>
<tr>
<td></td>
<td ALIGN="CENTER">
<input type=submit name=ok value="OK"> <input type=submit name=ok value="CANCEL"></td>
</tr>
</table>
</form>
</body>
</html>

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

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

关于**中描述的“在 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 ...

能者自答,赞一个

使用特权

评论回复
5
dirtwillfly| | 2017-2-6 17:00 | 只看该作者
kasam 发表于 2017-2-3 14:20
终于自己摸索出来了,新版本的goahead和之前的很不一样的。现在基本上就用websDefineAction,和websDefineJ ...

论坛用这个的比较少

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝