appweb3.3.1如何使用EJS调用自己的C函数(ubuntu10.04)
来源:互联网 发布:c语言bzero 编辑:程序博客网 时间:2024/04/30 14:47
appweb是一个非常好的嵌入式web server,它使用C/C++来编写,能够运行在目前所有流行的操作系统上。
1.安装appweb
下载appweb3.3.1的安装包,解压,./install安装,安装完成后在浏览器中输入http://127.0.0.1:7777弹出appweb的官方网站就说明安装成功,安装完后系统将会增加以下目录:
/etc/appweb :存放对appweb进行配置的文件
/var/www/appweb-default :存放网页的地方
/var/log/appweb :2个文件,记录appweb的访问和错误信息
/usr/lib/appweb :头文件,库文件等等
以上目录都是appweb默认的,我们也可以通过appweb.conf来重新配置。
2.如何在appweb中使用EJS
进入/etc/appweb,执行:ajsweb generate app blog,信息如下:
[CREATED] Directory: blog
[CREATED] Directory: .tmp
[CREATED] Directory: .ejs
[CREATED] Directory: bin
[CREATED] Directory: config
[CREATED] Directory: controllers
[CREATED] Directory: db
[CREATED] Directory: db/migrations
[CREATED] Directory: doc
[CREATED] Directory: logs
[CREATED] Directory: models
[CREATED] Directory: messages
[CREATED] Directory: test
[CREATED] Directory: src
[CREATED] Directory: utils
[CREATED] Directory: views
[CREATED] Directory: views/layouts
[CREATED] Directory: web
[CREATED] Directory: web/default
[CREATED] Directory: web/images
[CREATED] Directory: web/themes
[CREATED] App: "src/App.es"
[CREATED] Config File: "config/config.ecf"
[CREATED] Config File: "config/compiler.ecf"
[CREATED] Config File: "config/database.ecf"
[CREATED] Config File: "config/view.ecf"
[CREATED] Layout: "views/layouts/default.ejs"
[CREATED] Web File: "web/index.ejs"
[CREATED] Web File: "web/images/banner.jpg"
[CREATED] Web File: "web/images/splash.jpg"
[CREATED] Web File: "web/ejs.css"
[CREATED] Web File: "web/favicon.ico"
[CREATED] Web File: "web/layout.css"
[CREATED] Web File: "web/js/jquery.tablesorter.js"
[CREATED] Directory: web/js
[CREATED] Web File: "web/js/jquery.ejs.js"
[CREATED] Web File: "web/js/jquery.min.js"
[CREATED] Web File: "web/js/jquery.js"
[CREATED] Web File: "web/themes/ejs.css"
[CREATED] Web File: "web/themes/default.css"
[CREATED] BaseController: "controllers/Base.es"
[CREATED] README: "README"
[BUILD]: controllers/Base.es
Change directory into your application directory: blog
Then run the web server via: "ajsweb run"
and point your browser at: http://localhost:4000/ to view your app.
接着进入blog目录,执行: ajsweb -v compile,正确编译打印信息如下:
[BUILD]: "/usr/lib/appweb/bin/ajsc" --lang fixed --debug --optimize 9 --web --out App.tmod --search "/etc/appweb/blog/modules" src/App.es controllers/Base.es
[PARSE]: web/index.ejs
[BUILD]: "/usr/lib/appweb/bin/ajsc" --lang fixed --debug --optimize 9 --web --out web/index.tmod --search "/etc/appweb/blog/modules" App.mod web/index.es
现在就可以运行EJS了,执行:ajsweb run,正确打印信息如下:
[RUN]: /usr/lib/appweb/bin/appweb --home "/usr/lib/appweb/lib" --ejs "/:/etc/appweb/blog" --log stdout:2
appweb: 2: Configuration for Embedthis Appweb
appweb: 2: ---------------------------------------------
appweb: 2: Host: leolin-virtual-machine
appweb: 2: CPU: i686
appweb: 2: OS: LINUX
appweb: 2: Distribution: ubuntu 11.04
appweb: 2: Version: 3.3.1-0
appweb: 2: BuildType: DEBUG
appweb: 2: ---------------------------------------------
appweb: 2: DocRoot (Main Server): "/usr/lib/appweb/lib/default-web"
appweb: 2: Set connector "netConnector"
appweb: 2: Activating module (Loadable) authFilter
appweb: 2: Add filter "authFilter" to location "" for all extensions
appweb: 2: Activating module (Loadable) rangeFilter
appweb: 2: Add filter "rangeFilter" to location "" for all extensions
appweb: 2: Activating module (Loadable) chunkFilter
appweb: 2: Add filter "chunkFilter" to location "" for all extensions
appweb: 2: Activating module (Loadable) dirHandler
appweb: 2: Add handler "dirHandler" for ""
appweb: 2: Activating module (Loadable) ejsHandler
appweb: 2: Add handler "ejsHandler" for ".ejs"
appweb: 2: SetHandler "ejsHandler" "Main Server", prefix /ejs/
appweb: 2: Activating module (Loadable) uploadFilter
appweb: 2: Upload directory: /tmp
appweb: 2: Add filter "uploadFilter" to location "/upload/" for all extensions
appweb: 2: Activating module (Loadable) fileHandler
appweb: 2: Add handler "fileHandler" for ".html .gif .jpeg .png .pdf """
appweb: 1: Started at Sun Aug 28 09:36:39 2011 CST
appweb: 2: SetHandler "ejsHandler" "127.0.0.1:4000", prefix /
appweb: 2: Add filter "chunkFilter" to location "/" for all extensions
appweb: 2: Add filter "uploadFilter" to location "/" for all extensions
appweb: 1: Starting host named: "127.0.0.1:4000"
appweb: 2: Listening for HTTP on *:4000
appweb: 1: HTTP services are ready with max 4 worker threads
在浏览器中输入http://127.0.0.1:4000,就会弹出ejs的官网,这里需要注意的是/etc/appweb目录下的appweb.conf是对appweb进行配置的,而/usr/lib/appweb/lib目录下的appweb.conf才是对EJS进行配置的,后面我们编写的module将会在后者Load,而不是前者,这里请读者一定要注意了(刚开始我也比较奇怪为什么/usr/lib/appweb/lib下面也有一个appweb.conf,导致走了不少弯路,大家可以看看这2个文件的具体内容,看看是怎么配置的)
3.创建自己的动态库
先贴代码:simpleModule.c
#include <stdio.h>#include <stdlib.h>#include "/usr/lib/appweb/inc/appweb.h"#include "/usr/lib/appweb/inc/ejs.h"EjsVar *MyFunction(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv){ejsWrite(ejs, "<h1>Hello World</h1>");return (EjsVar*) ejsCreateString(ejs, "sunny day");}MprModule *maSimpleModuleInit(MaHttp *http){MprModule *module; MaStage *stage;Ejs *ejs;//printf("2222222222222222222222222222222\n"); //创建Module module = mprCreateModule(http, "simpleModule", "3.3.1", NULL, NULL, NULL); if (module == 0) return 0;ejs = ejsGetMaster(http);//绑定自己的C函数ejsDefineGlobalFunction(ejs, "helloworld", MyFunction);//printf("hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\n"); return module;}
将以上.c编译成动态库,命令:
gcc -fPIC -c simpleModule.c -lappweb -lajs -L/usr/lib/appweb/lib
gcc -shared -o mod_mysimple.so simpleModule.o
将生成的动态库拷贝到/usr/lib/appweb/modules目录下,然后再appweb.conf中加载该库,命令:LoadModule simpleModule mod_mysimple 注意:此命令是加到/usr/lib/appweb/lib目录下的appweb.conf中,且加到系统其它Module Load之后,大概在167行左右,然后重新执行:ajsweb -v compile , ajsweb run,就会看到我们的module加载成功:appweb: 2: Activating module (Loadable) simpleModule
通过以上操作,我们自己的动态库就被成功加载了,MyFunction函数就可以使用了,不过在.ejs中它的名字就不叫MyFunction,而是叫helloworld,下面实验一下:打开/etc/appweb/blog/web下的index.ejs,在最后加入<p>this is my test:<% helloworld() %></p>,来调用自己的C函数,接着ajsweb -v compile , ajsweb run,然后再浏览器中打开http://127.0.0.1:4000,此时在页面中就可以看到我们的打印信息hello world了。
- appweb3.3.1如何使用EJS调用自己的C函数(ubuntu10.04)
- 如何调用自己写的python函数?
- EJS模版的使用
- C中如何调用C++函数的技巧(转)
- NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
- 如何在C中调用C++函数 与 如何在C++中调用C的函数(待修改)
- 如何使自己写的OnDraw函数被调用
- Python中如何调用自己写的函数
- ejs模版学习-- ejs的大概使用
- Lua调用C函数:tolua++ 的使用
- 使用OC调用C语言的函数
- php调用C函数时如何使用zend_parse_parameters
- php调用C函数时如何使用zend_parse_parameters
- windows下如何使用JNI调用C C++函数
- qt 如何调用c函数
- 如何动态调用 C 函数
- 如何动态调用 C 函数
- 使用express框架,如何在ejs文件中导入外部的js、css文件
- 简单的执行跟踪
- GCC后端及汇编发布(40)
- Class-reference types 类引用类型--快要失传的技术
- 辨别盗版windows 7
- GCC's bacl-end & assemble emission (40)
- appweb3.3.1如何使用EJS调用自己的C函数(ubuntu10.04)
- C++语言设计
- loadNibNamed 的使用
- GCC后端及汇编发布(41)
- 模拟实现WPF的依赖属性及绑定通知机制(4)--模拟实现绑定连动机制
- Error creating bean with name 'org.springframework.context.annotation.internalRequiredAnnotationProc
- GCC's bacl-end & assemble emission (41)
- java 冒泡排序
- 《UNIX IO---再谈文件描述符》