Lua是一种高度灵活的语言,通常用于多种平台,包括Web应用程序.开源社区成立于2004年,旨在为Lua提供开源Web组件.
尽管还有其他使用Lua的Web框架已经开发,但我们将主要关注由开普勒社区提供的组件.
轨道是基于WSAPI的Lua的MVC Web框架.
WSAPI 是抽象Web主机的API来自Lua Web应用程序的服务器,是许多项目的基础.
Xavante 是一个提供WSAPI接口的Lua Web服务器.
Sputnik 是在Kepler项目上通过WSAPI开发的wiki/CMS,用于幽默和娱乐.
CGILua 基于WSAPI提供LuaPages和LuaScripts网页创建,但不再受支持.请改用Orbit,Sputnik或WSAPI.
在本教程中,我们将尝试让您了解Lua可以做什么并了解更多信息关于它的安装和使用,请参考kepler网站
Orbit是Lua的MVC Web框架.它完全放弃了CGILua的"脚本"模型,而不是应用程序,每个Orbit应用程序都可以放在一个文件中,但如果需要,可以将它分成多个文件.
全部Orbit应用程序遵循WSAPI协议,因此它们目前与Xavante,CGI和Fastcgi一起使用.它包含一个启动程序,可以轻松启动Xavante实例进行开发.
安装Orbit的最简单方法是使用LuaRocks. Luarocks安装轨道是安装的命令.为此,您需要首先安装<a rel="nofollow" target="_blank" href = "https://img01.yuandaxia.cn/Content/img/tutorials/lua/wiki LuaRocks.
如果你还没有安装所有依赖项,下面是在Unix/Linux环境中设置Orbit时要遵循的步骤.
Connect安装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
$ sudo apt-get install luarocks
$ sudo luarocks install orbit $ sudo luarocks install wsapi-xavante $ sudo luarocks install wsapi-fcgi
$ 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到Orbit应用程序根目录中的.htaccess文件 : 在这种情况下,/var/www.
Options +ExecCGI DirectoryIndex index.ws
#!/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
现在,您应该可以启动网络浏览器了.转到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.htmlify(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' { tr{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.htmlify(wrap,test) print(test())
如前所述,WSAPI充当许多项目的基础,并在其中嵌入了多个功能.您可以使用WSAPI并支持以下平台,
Windows
基于UNIX的系统
WSAPI支持的服务器和接口包括,
CGI
FastCGI
Xavante
WSAPI提供了许多库,这使我们更容易使用Lua进行Web编程. Lua中的一些受支持的功能包括,
请求处理
输出缓冲
身份验证
文件上传
请求隔离
多路复用
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是一个Lua HTTP 1.1 Web服务器,它使用了基于URI映射处理程序的模块化体系结构. Xavante目前提供,
文件处理程序
重定向处理程序
WSAPI处理程序
文件处理程序用于常规文件.重定向处理程序启用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 } }
Copas ,一个基于协同程序的调度程序,可以由TCP/IP服务器使用.
Cosmo ,一个"安全模板"引擎,可以保护您的应用程序免受模板中任意代码的攻击.
Coxpcall 将Lua native pcall和xpcall封装为与coroutine兼容的.
LuaFileSystem ,一种可移植的方式访问底层目录结构和文件属性s.
Rings ,这是一个提供从Lua内部创建新Lua状态的方法的库.
有很多基于Lua的Web框架和组件可供我们使用,根据需要,它可以选择.还有其他可用的Web框架,其中包括以下内容;
Moonstalk 可实现高效开发和托管使用Lua语言构建的动态生成的基于Web的项目;从基本页面到复杂的应用程序.
Lapis ,一个使用MoonScript(或Lua)构建Web应用程序的框架. Nginx的自定义版本,名为OpenResty.
Lua Server Pages ,一个Lua脚本引擎插件,可以消除任何其他方法嵌入式Web开发,为传统的C服务器页面提供了显着的捷径.
这些Web框架可以利用您的Web应用程序并帮助您在做强大的操作.