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了。




 

 

 

 

 


 

 

 

原创粉丝点击