求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 
 

Lua 教程
Lua开发环境
Lua基本语法
Lua变量
Lua数据类型
Lua运算符
Lua循环
Lua决策
Lua函数
Lua字符串
Lua数组
Lua迭代器
Lua表格
Lua模块
Lua元表
Lua协同程序
Lua文件I/O
Lua错误处理
Lua 高级教程
Lua调试
Lua垃圾收集
Lua面向对象
Lua Web编程
Lua数据库/MYSQL操作
Lua游戏编程
Lua标准库
 
 

Lua Web编程
951 次浏览
39次  

Lua是高度灵活的语言,它往往是在多个平台,包括Web应用程序中使用。成立2004年的Kepler社区提供Lua的Web组件开放源码。

虽然,也有使用Lua已经开发了其他的web框架,我们将主要集中在Kepler社区提供的组件。

应用程序和框架

Orbit 是一个lua的MVC Web框架,它是基于WSAPI。

WSAPI是从Lua的Web应用程序抽象的Web主机服务器,是基于许多项目的API。

Xavante是一个Lua的Web服务器,提供了一个WSAPI接口。

Sputnik是一个wiki/CMS开发过WSAPI的Kepler项目用于娱乐和搞笑。

CGILua提供LuaPages和LuaScripts网页制作的基础上的WSAPI,但不再支持。使用Orbit, Sputnik 或WSAPI 代替。

在本教程中,我们会尽量让你可以做更多地了解Lua,它的安装和使用方法,请参考kepler网站

Orbit

Orbit是lua一个MVC Web框架。它彻底抛弃CGILua 的应用,每个应用程序Orbit可以容纳一个单一文件“脚本”的CGILua模式,但是如果想让它分割成多个文件也可以。

所有Orbit应用程序遵循WSAPI协议,所以他们目前正在与Xavante,CGI和FastCGI的一起结合工作。它包括一个发射器,可以很容易推出Xavante实例进行开发。

安装Orbit的最简单方法是使用LuaRocks。 luarocks安装Orbit的安装命令。对于这一点,首先需要先安装LuaRocks。

如果还没有安装所有的依赖,这是应遵循在的Unix / Linux环境设置Orbit的步骤。

安装Apache

连接到服务器。安装Apache2,它支持的模块和能使用所需的Apache2模块:

$ sudo apt-get install apache2 libapache2-mod-fcgid libfcgi-dev build-essential
$ sudo a2enmod rewrite
$ sudo a2enmod fcgid
$ sudo /etc/init.d/apache2 force-reload

安装 LUAROCKS

$ sudo apt-get install luarocks

安装WSAPI, FCGI, ORBIT, AND XAVANTE

$ sudo luarocks install orbit
$ sudo luarocks install wsapi-xavante
$ sudo luarocks install wsapi-fcgi

建立APACHE2

$ sudo raj /etc/apache2/sites-available/default

添加下面的 <Directory /var/www/>部分配置文件的这些内容。如果这个部分有一个“AllowOverride None”,那么需要的“None”改为“All”,这样htaccess文件可以覆盖配置。

<IfModule mod_fcgid.c>
AddHandler fcgid-script .lua
AddHandler fcgid-script .ws
AddHandler fcgid-script .op
FCGIWrapper "/usr/local/bin/wsapi.fcgi" .ws
FCGIWrapper "/usr/local/bin/wsapi.fcgi" .lua
FCGIWrapper "/usr/local/bin/op.fcgi" .op
#FCGIServer "/usr/local/bin/wsapi.fcgi" -idle-timeout 60 -processes 1
#IdleTimeout 60
#ProcessLifeTime 60
</IfModule>

重新启动服务器,以确保变化生效。

为了使可以访问应用程序,需要+ ExecCGI添加到htaccess文件中的Orbit 应用程序的根- 在这种情况下,设置为 /var/www。

Options +ExecCGI
DirectoryIndex index.ws

简单的例子- Orbit

#!/usr/bin/env index.lua
-- index.lua
require"orbit" -- declaration
module("myorbit", package.seeall, orbit.new) -- handler
function index(web)
return my_home_page()
end -- dispatch
myorbit:dispatch_get(index, "/", "/index") -- Sample page
function my_home_page()
return [[
<head></head>
<html>
<h2>First Page</h2>
</html>
]]
end

现在,应该可以启动Web浏览器并转到http://localhost:8080/ ,应该看到

First Page

Orbit 提供了另一种选择,那就是Lua代码可以生成html。

#!/usr/bin/env index.lua
-- index.lua
require"orbit" function generate()
return html {
head{title "HTML Example"}, body{ h2{"Here we go again!"}
}
}
end orbit.htmllify(generate) print(generate())

创建表单

一种简单形式的例子如下所示。

#!/usr/bin/env index.lua
require"orbit" function wrap (inner)
return html{ head(), body(inner) }
end function test ()
return wrap(form (H'table' {
r{td"First name",td( input{type='text', name='first'})}, tr{td"Second name",td(input{type='text', name='second'})}, tr{ td(input{type='submit', value='Submit!'}), td(input{type='submit',value='Cancel'})
},
}))
end orbit.htmllify(wrap,test) print(test())

你可以在官方网站上找到一个很长的orbit教程

WSAPI

如前面提到的,WSAPI充当基础由许多项目嵌入其中的多个特征。可以使用WASAPI并支持以下平台,

Windows

UNIX-based systems

支持的服务器和接口由WSAPI包括:

CGI

FastCGI

Xavante

WSAPI提供了大量的使用Lua库,这使得我们更容易在网络编程。一些支持的功能在Lua包括,

Request processing

Output buffering

Authentication

File uploads

Request isolation

Multiplexing

WSAPI一个简单的例子如下所示。

#!/usr/bin/env wsapi.cgi
module(..., package.seeall)
function run(wsapi_env)
local headers = { ["Content-type"]="text/html" } local function hello_text()
coroutine.yield("<html><body>")
coroutine.yield("<p>Hello Wsapi!</p>")
coroutine.yield("<p>PATH_INFO: " .. wsapi_env.PATH_INFO .. "</p>")
coroutine.yield("<p>SCRIPT_NAME: " .. wsapi_env.SCRIPT_NAME .. "</p>")
coroutine.yield("</body></html>")
end return 200, headers, coroutine.wrap(hello_text)
end

你可以在一个简单的HTML页面组成,回到上面的代码中看到。可以看到协程的使用,使得它可以通过语句返回语句来调用函数。最后HTML状态码(200),头和HTML页面返回。

Xavante

Xavante是使用基于URI的模块化架构一个Lua1.1的HTTP Web服务器映射处理程序。 Xavante目前提供,

File handler

Redirect handler

WSAPI handler

文件处理程序是用于一般文件。重定向处理enabes的URI重新映射和WSAPI处理与WSAPI申请。

一个简单的例子如下所示。

require "xavante.filehandler"
require "xavante.cgiluahandler"
require "xavante.redirecthandler" -- Define here where Xavante HTTP documents scripts are located
local webDir = XAVANTE_WEB local simplerules = { { -- URI remapping example
match = "^[^%./]*/$",
with = xavante.redirecthandler,
params = {"index.lp"}
}, { -- cgiluahandler example
match = {"%.lp$", "%.lp/.*$", "%.lua$", "%.lua/.*$" },
with = xavante.cgiluahandler.makeHandler (webDir)
},
{ -- filehandler example match = ".",
with = xavante.filehandler,
params = {baseDir = webDir}
},
} xavante.HTTP{
server = {host = "*", port = 8080},
defaultHost = {
rules = simplerules
},
}

若要使用Xavante虚拟主机,调用xavante.HTTP将改为类似。

xavante.HTTP{
server = {host = "*", port = 8080},
defaultHost = {},
virtualhosts = {
["www.sitename.com"] = simplerules
}
}

Lua Web组件

Copas,基于协程调度器可以使用通过TCP/IP协议的服务器。

Cosmo, “安全模板”引擎,它可以防止在模板中任意代码的应用程序。

Coxpcall Lua封装原生pcall和xpcall与协程相容的。

LuaFileSystem, 可移植的方式来访问底层的目录结构和文件属性。

Rings, 一个库,它提供了一种从内Lua创建新的Lua状态。

截至注意

有这么多Lua基于web框架,并提供给我们,并根据需要组成部分,它可以作为选件。还有包括其他可用的Web框架,

Moonstalk 能够有效地开发和托管建成Lua语言动态生成基于网络的项目;从基本的网页到复杂的应用程序

Lapis, 构建用MoonScript(或LUA)Web应用程序的框架运行的Nginx的定制版名为OpenResty。

Lua Server Pages, 一个Lua脚本引擎插件任何其他方法,以嵌入式网络的发展,提供了一个戏剧性的捷径传统的C服务器页面。

这些Web框架可以利用Web应用程序,并帮助在做强大的操作。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



951 次浏览
39次
 捐助