轻量级嵌入式web服务器 --libhttpd

本文介绍了嵌入式设备中使用Web服务器的目的,如提供用户友好的界面和简化管理。重点讨论了LibHttpd,一个适合arm7嵌入式设备的开源轻量级Web服务器。LibHttpd支持HTTP子集,自动处理Html Form数据,提供API方便集成,并附带使用手册和示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、嵌入式web服务器

      在网上找了很多关于嵌入式web server的资料,比如shttpd、appweb、boa、go ahead、server等等, 但都有网友反映移植不方便、资源要求高等等。如果用于运行ucLinux的arm9上,就没有什么问题,而用于运行ucOS的arm7上,则有很多限制,需要进行很多的移植工作,今天找到一个叫做LibHttpd的,采用ANSIC编写,仅从介绍上来看,非常适合arm7的嵌入式设备使用。

      嵌入式设备中使用Web server的主要目的就是用来进行参数设置,使用这种方式,有很多优点:

      1、可以给用户熟悉的用户界面,减少用户的学习负担。

      2、具有B/S方式的优点,不再需要在每个客户机上安装配套的软件,不需要在客户机上升级软件,也不再需要支持由于客户机环境带来的种种问题。

      LibHttpd是一个开源轻量级嵌入式Web server,LibHttpd实现了下述功能:

      1)实现了HTTP的子集;

      2)使用表格技术自动处理Html Form数据;

      3)产生的内容既可以是静态的网页,也可以是调用C函数动态产生的(callback);

      LibHttpd提供API,利用这些API,用户可以很方便地将自己的Web内容加入到程序当中。


 二、libhttpd中带有英文的使用手册,也增加了使用实例源码,在编程中可以做一个很好的模板:

#include "config.h"

#include <stdio.h>
#include <unistd.h>
#include <signal.h>

#ifdef _WIN32
#  include <getopt.h>
#else
#  include <sys/time.h>
#endif

#include "httpd.h"

/*
** This is a static page of HTML.  It is loaded into the content
** tree using httpdAddStaticContent( ).
*/
#define test1_html "<HTML><BODY>This is just a test</BODY>"

#define ember_code1 "printf(\"This is from ember in process %d\n\",getpid());"
#define ember_code "load \"/usr/local/nk/www/content.lib\"; dispatchWebPage(\"/index.html\");"

/*
** Below are 2 dynamic pages, each generated by a C function.  The first
** is a simple page that offers a little dynamic info (the process ID)
** and the setups up a test link and a simple form.
** 
** The second page processes the form.  As you can see, you can access
** the form data from within your C code by accessing the symbol table
** using httpdGetVariableByName() (and other similar functions).  You
** can also include variables in the string passed to httpdOutput( ) and
** they will be expanded automatically.
*/
void index_html(server)
    httpd   *server;
{
    httpdPrintf(server,
        "Welcome to the httpd server running in process number %d<P>\n",
        getpid());
    httpdPrintf(server,
        "Click <A HREF=/test1.html>here</A> to view a test page<P>\n");
    httpdPrintf(server,
        "Click <A HREF=/login.html>here</A> to authenticate<P>\n");
    httpdPrintf(server,
        "Or <A HREF=/wildcard/foo>here</A> for a test wildcard page<P>\n");
    httpdPrintf(server, "<P><FORM ACTION=test2.html METHOD=POST>\n");
    httpdPrintf(server, "Enter your name <INPUT NAME=name SIZE=10>\n");
    httpdPrintf(server, "<INPUT TYPE=SUBMIT VALUE=Click!><P></FORM>\n");
    return;
}

void test2_html(server)
    httpd   *server;
{
    httpVar *variable;

    /*
    ** Grab the symbol table entry to see if the variable exists
    */
    variable = httpdGetVariableByName(server, "name");
    if (variable == NULL)
    {
        httpdPrintf(server,"Missing form data!");
        return;
    }

    /*
    ** Use httpdOutput() rather than httpdPrintf() so that the variable
    ** embedded in the text is expanded automatically
    */
    httpdOutput(server,"Hello $name");
}

void test3_html(server)
    httpd   *server;
{
    char    *path;

    path = httpdRequestPath(
嵌入式web服务器boa框架的基础上, 使用C语言cgi, 或者Python脚本, 结合HTML + javascript + ajax 的嵌入式web系统的开发实例 html 中使用javascritp + ajax 从C语言生成的cgi文件的get, set 一些值. boa服务器的相关配置参数说明: http://www.cnblogs.com/liuweiqiang/p/3859130.html boa安装包文件名: boa-for-hi3516a.tar.gz boa.conf 文件的保存路径: cat /etc/boa/boa.conf boa可 执行文件的路径: /usr/local/bin/boa, 可以设置为: 系统启动的时候, 这个进程自动启动 boa.conf 文件的重要参数 保存html文件的目录 DocumentRoot /www 可以将这个目录, 设置为samb共享文件夹的目录, 方便修改调试 修改完成以后, 肯定要重启boa进程的 保存python脚本, 或者C语言cgi文件的目录 ScriptAlias /cgi-bin/ /var/www/cgi-bin/ 说明: cgi-bin/ 后面的斜杠, 一定要加上 可以将这个目录, 设置为samb共享文件夹的目录, 方便修改调试 修改完成以后, 肯定要重启boa进程的 html文件文件中, 调用python脚本的时候, 指定的路径, 需要有: /cgi-bin, 比如: var url = "/cgi-bin/getuser.py"; 这个是python 或者 var url = "/cgi-bin/output.cgi"; 这个是C语言 说明: 如果发现, html文件, 修改了, 可是在浏览器中, 查看html源代码的时候, 这个代码, 还是旧的, 那么可以通过清空"IE浏览器", "360浏览器"的浏览记录 以上, javascript 可以调用python 同样, 也可以调用C语言生成的cgi文件(其实, 就是可执行文件) C语言 + Html 例子 C语言 CGI实例 http://blog.youkuaiyun.com/ajrm0925/article/details/8810342 http://blog.youkuaiyun.com/liang890319/article/details/6277900 http://blog.youkuaiyun.com/gnefniu/article/details/42432657 上传文件: http://blog.youkuaiyun.com/yu_xiang/article/details/7996670 查找文件 find . -type f -name "boa.conf" -print -mount find . -type f -name "boa" -print -mount 四、嵌入式web服务器boa的配置和使用 嵌入式web服务器boa的配置文件为boa.conf, 在boa-0.94.13目录下面,复制该文件到文件 系统的/etc/boa目录下面,打开boa.conf,修改为如下内容: Port 80 User root Group root ErrorLog /dev/console AccessLog /dev/null ServerName SoftEmbed.com DocumentRoot /www DirectoryIndex index.html KeepAliveMax 1000 KeepAliveTimeout 10 MimeTypes /etc/mime.types DefaultType text/plain CGIPath /bin:/usr/bin:/usr/local/bin ScriptAlias /cgi-bin/ /www/cgi-bin/ 几个重要配置参数如下: DocumentRoot: 存放html文档的主目录; DirectoryIndex: 默认返回的html文档; ScriptAlias:cgi脚本虚拟路径对应的实际路径,/www/cgi-bin/为cgi脚本存放的实际路径; 其他配置选项的意义请参考相关资料。 复制boa可执行文件到/usr/sbin目录中, 启动boa进程 重新制作文件系统,系统启动后,在客户端浏览器上输入开发板的ip 地址,例如: http://192.168.0.218, 就可以看到显示的测试网页了,如下图所示 CGI getenv函数的参数详解: http://www.cnblogs.com/ser0632/p/5498228.html s = getenv("环境变量名"); 取得环境变量内容 putenv改变或增加环境变量 int putenv(const char * string); setenv(改变或增加环境变量) http://www.jb51.net/article/71940.htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值