分享

appweb动态加载自定义模块文件

 erran 2015-11-17
服务器端:simpleModule.c
#include
#include
#include "/usr/lib/appweb/inc/appweb.h"
#include "/usr/lib/appweb/inc/ejs.h"

EjsVar *MyFunction(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
{
        int i = 1;
        if ( i == 1) {
        ejsWrite(ejs, "

Hello Linux

");
        }
        else{
        ejsWrite(ejs, "

Hello World

");
        }
        return 0;
}

MprModule *maSimpleModuleInit(MaHttp *http)
{
        MprModule   *module;
        Ejs *ejs;
        /**
        *创建Module  
        *simpleModule为模块的名字
        *3.3.4为appweb版本号
        **/
        module = mprCreateModule(http, "simpleModule", "3.3.4", NULL, NULL, NULL);
        if (module == 0)
            return 0;
        ejs = ejsGetMaster(http);
        //绑定自己的C函数  
        ejsDefineGlobalFunction(ejs, "myTest", MyFunction);
            return module;
这里两个重点:
1、创建模块mprCreateModule(),模块的名字必须是独一无二的;
2、绑定c函数ejsDefineGlobalFunction();访问的时候通过绑定后的函数名访问c函数,即myTest();
编译生成动态库:gcc simpleModule.c -fPIC -shared -o mod_test.so -L /usr/lib/appweb/lib -lappweb -lajs
将动态库拷贝到/usr/lib/appweb/modules目录下面(该目录是appweb.conf配置文件指定搜索路径)
在appweb里面添加模块加载:(这一步还是很重要的)在appweb.conf的ejs模块加载后填上这句
LoadModule simpleModule mod_test
simpleModule:就是我们的模块名字
mod_test:是动态库的名字

客户端:hello.ejs:

welcome to appweb ejs:<% myTest() %>

 
这样建立的hello.ejs不能直接使用,需要经过编译
ajsweb hello.ejs
出现[BUILD]: hello.ejs代表编译成功,相应的会有hello.mod生成(这个mod文件的生成困扰了我一段时间。。。)
运行appweb --config /etc/appweb/appweb.conf
在浏览器输入127.0.0.1/hello.ejs即可看到结果:

welcome to appweb ejs:

Hello Linux


OK!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多