Ruby Web应用程序
-
Web应用程序-CGI编程
Ruby是一种通用语言。它根本不能正确地称为网络语言。即使这样,Web应用程序和Web工具通常还是Ruby的最常见用法。您不仅可以用Ruby编写自己的SMTP服务器,FTP守护程序或Web服务器,而且还可以将Ruby用于更常见的任务,例如CGI编程或替代PHP。 -
编写CGI脚本
最基本的Ruby CGI脚本看起来像这样-puts "HTTP/1.0 200 OK" puts "Content-type: text/html\n\n" puts "<html><body>This is a test</body></html>"
如果调用此脚本test.cgi并将其上载到具有适当权限的基于Unix的Web托管提供程序,并且您将test.cgi上载到主目录并赋予其执行权限,在这里,当从Web浏览器请求test.cgi时,Web服务器将在网站上查找test.cgi,然后使用Ruby解释器执行它。Ruby脚本返回一个基本的HTTP标头,然后返回一个基本的HTML文档。 -
使用cgi.rb
Ruby带有一个称为cgi的特殊库,与之前的CGI脚本相比,该库支持更复杂的交互。让我们创建一个使用cgi的基本CGI脚本-require 'cgi' cgi = CGI.new puts cgi.header puts "<html><body>This is a test</body></html>"
在这里,您创建了一个CGI对象,并用它来为您打印交互头。 -
表单处理
使用类CGI可以通过两种方式访问HTML查询参数。假设给我们一个URL /cgi-bin/test.cgi?FirstName=Zara&LastName=Ali。您可以直接使用CGI#[]访问参数FirstName和LastName,如下所示:require 'cgi' cgi = CGI.new cgi['FirstName'] # => ["Zara"] cgi['LastName'] # => ["Ali"]
还有另一种访问这些表单变量的方法。此代码将为您提供所有键和值的哈希-require 'cgi' cgi = CGI.new h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]} h['FirstName'] # => ["Zara"] h['LastName'] # => ["Ali"]
以下是检索所有key的代码-require 'cgi' cgi = CGI.new cgi.keys # => ["FirstName", "LastName"]
如果表单包含多个具有相同名称的字段,则相应的值将作为数组返回到脚本。[]访问器仅返回这些方法中的第一个。将params方法的结果返回索引以将其全部获取。在此示例中,假设表单具有三个名为“name”的字段,并且我们输入了三个名称“ Zara”,“Huma”和“Nuha”-require 'cgi' cgi = CGI.new cgi['name'] # => "Zara" cgi.params['name'] # => ["Zara", "Huma", "Nuha"] cgi.keys # => ["name"] cgi.params # => {"name"=>["Zara", "Huma", "Nuha"]}
注意 -Ruby将自动处理GET和POST方法。这两种不同的方法没有单独的处理方法。可以发送正确数据的关联但基本的表单将具有如下HTML代码-
<html> <body> <form method = "POST" action = "http://www.example.com/test.cgi"> First Name :<input type = "text" name = "FirstName" value = "" /> <br /> Last Name :<input type = "text" name = "LastName" value = "" /> <input type = "submit" value = "Submit Data" /> </form> </body> </html>
-
创建表单和HTML
CGI包含大量用于创建HTML的方法。您将为每个标签找到一种方法。为了启用这些方法,必须通过调用CGI.new创建一个CGI对象。为了使标记嵌套更容易,这些方法将其内容作为代码块。代码块应返回String,它将用作标签的内容。例如-require "cgi" cgi = CGI.new("html4") cgi.out { cgi.html { cgi.head { "\n"+cgi.title{"This Is a Test"} } + cgi.body { "\n"+ cgi.form {"\n"+ cgi.hr + cgi.h1 { "A Form: " } + "\n"+ cgi.textarea("get_text") +"\n"+ cgi.br + cgi.submit } } } }
注意:CGI类的form方法可以接受method参数,该参数将设置要在表单提交中使用的HTTP方法(GET,POST等)。在此示例中使用的默认值为POST。
这将产生以下结果-Content-Type: text/html Content-Length: 337 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD> <TITLE>This Is a Test</TITLE></HEAD><BODY> <FORM METHOD="post" ENCTYPE="application/x-www-form-urlencoded"> <HR><H1>A Form: </H1> <TEXTAREA NAME="get_text" COLS="70" ROWS="10"></TEXTAREA> <BR><INPUT TYPE="submit"></FORM></BODY></HTML>
-
引用字符串
在处理URL和HTML代码时,必须小心引用某些字符。例如,斜杠(/)在URL中具有特殊含义,因此,如果它不是路径名的一部分,则必须将其转义。例如,URL查询部分中的任何/都将转换为字符串%2F,并且必须转换回为/才能使用。空格和&符也是特殊字符。为了解决这个问题,CGI提供了例程CGI.escape和CGI.unescape。require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
这将产生以下结果-Zara+Ali%2FA Sweet+%26+Sour+Girl")
require 'cgi' puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
这将产生以下结果-<h1>Zara Ali/A Sweet & Sour Girl</h1>'
更多内置函数,参考方法,请查阅参考手册。