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.escapeCGI.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>')
    
    这将产生以下结果-
    
    &lt;h1&gt;Zara Ali/A Sweet & Sour Girl&lt;/h1&gt;'
    
    更多内置函数,参考方法,请查阅参考手册。