4 11, 2004

RubyºÍweb

    Ruby¶ÔºÜ¶àÈËÀ´Ëµ£¬Ò²ÐíÖ»Êǽű¾ÓïÑÔ£¬»òÕßÖ»ÊÇÍê³ÉЩ»ù±¾¹¦ÄÜ£¬ÎÒÃÇÖªµÀÒѾ­ºÜ¶àÓÃRubyдµÄweb£¬ftp£¬smtp·þÎñÆ÷ÁË¡£È»¶ø£¬Äã»á·¢ÏÖ£¬ruby»¹ÄÜдcgiµÈͨÓóÌÐò£¬ÉõÖÁÌæ´úphp£¨µ±È»Ä¿Ç°À´Ëµ²»¿ÉÄÜÁË£¬¿´¿´phpµÄÓû§ºÍÈí¼þ¾ÍÖªµÀÁË£©¡£

     http://blog.itpub.net/liubin


1¡£±àдcgi

    ¼òµ¥µÄcgi³ÌÐòÈçÏ£º

  #!/usr/bin/env ruby
  print "HTTP/1.0 200 OKrn"
  print "Content-type: text/htmlrnrn"
  print "Hello World!rn"

    ÎÒÃÇ¿ÉÒÔÓÃrubyÀ´´¦ÀíÌá½»µÄ²ÎÊý£¬Ìî³äÄ£°å£¬Éú³ÉhtmlµÈ£¬µ«ÉÔÏÔÂé·³£¬¿ÉÒÔÓÃcgiÄ£¿é¡£

2¡£Ê¹ÓÃcgi.rb

  cgi.rbÓÃÀ´±àдcgi½Å±¾£¬Ëû¿ÉÒÔ²Ù×÷form£¬cookies£¬»·¾³±äÁ¿£¬Î¬»¤sessionµÈ¡£¾ßÌåÓ÷¨ÄãÓ¦¸ÃÖªµÀÈ¥ÄÄÀïÕÒ°É¡£

3¡£ÒýÓúÍתÒå

   /ÔÚurlÀïÊÇÒ»¸öÌØÊâ×Ö·û£¬»¹ÓÐ< ºÍ>µÈ£¬ÓÐʱºòÐèҪתÒ壨escaped£©£¬ÀýÈç/±»×ª³É%2F¡£cgi.rbÌṩÁËÁ½¸öº¯Êý£¬CGI.escape ºÍCGI.unescape£º

    require 'cgi'
    puts CGI.escape( "Nicholas Payton/Trumpet & Flugel Horn" )

²úÉú½á¹û£º

    Nicholas+Payton%2FTrumpet+%26+Flugel+Horn

    תÒåhtmlÎĵµÖÐÔªËØµÄÀý×Ó(ÂÔ)£º

4¡£±íµ¥ form

    Ààcgi¿ÉÒÔÓÃÁ½ÖÖ·½·¨È¡µÃ¿Í»§¶ËÌá½»µÄÊý¾Ý¡£¼ÓÈëÓû§Ìá½»ÁËlookup?player=tom&year=1958£¬ÎÒÃÇ¿ÉÒÔÖ±½ÓÓÃcgi[]Êý×é·ÃÎÊËü¡£

  require 'cgi'
  cgi = CGI.new
  cgi['player']  # -> ["tom"]
  cgi['year']    # -> ["1958"]

ÁíÒ»¸ö°ì·¨ÊÇÄãÓÃÒ»¸öhash±í£¬È¡µÃËùÓвÎÊý¼°Öµ¡£

  require 'cgi'
  cgi = CGI.new
  h = cgi.params
  h['player']    # -> ["tom"]

5¡£²úÉúformºÍhtml

cgiÀàÌṩÁ˷dz£¶àµÄÓÃÀ´²úÉúhtmlµÄ·½·¨£¬¼¸ºõÊÇÿһ¸ötagÒ»¸ö·½·¨¡£»¹ÊÇÀý×ÓÀ´µÃÖ±¹Û£º

require "cgi"
  cgi = CGI.new("html3")  # add HTML generation methods
  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
        }
      }
    }
  }

²úÉúÈçÏ´úÂ룺

6¡£cookies

  require "cgi"
  cookie = CGI::Cookie.new("rubyweb", "CustID=123", "Part=ABC");
  cgi = CGI.new("html3")
  cgi.out( "cookie" => [cookie] ){
    cgi.html{
      "nHTML content here"
    }
  }

²úÉúµÄÍ·ÈçÏÂ:

Content-Type: text/html
Content-Length: 86
Set-Cookie: rubyweb=CustID%3D123&Part%3DABC; path=

È»ºó£¬µ±Óû§ÔÙ·ÃÎÊÒ³ÃæµÄʱºò£¬Äã¾Í¿ÉÒÔ¶ÁÈ¡Õâ¸öÖµÁË¡£

require "cgi"
  cgi = CGI.new("html3")
  cgi.out{
    cgi.html{
      cgi.pre{
        cookie = cgi.cookies["rubyweb"]
          "nCookies aren" + cookie.value.join("n")
      }
    }

7¡£sessions

´¦ÀísessionÐèÒª¶îÍâ¶àÒ»¸öÀࣺCGI::Session

require "cgi"
  require "cgi/session"

  cgi = CGI.new("html3")
  sess = CGI::Session.new( cgi, "session_key" => "rubyweb",
                            "session_id"  => "9650",
                            "new_session" => true,
                            "prefix" => "web-session.")
  sess["CustID"] = 123
  sess["Part"] = "ABC"

  cgi.out{
    cgi.html{
      "nHTML content here"
    }
  }

¶ÁÈ¡sessionͨ¹ýÈçÏ´úÂ룺

  require "cgi"
  require "cgi/session"

  cgi = CGI.new("html3")
  sess = CGI::Session.new( cgi, "session_key" => "rubyweb",
                                 "prefix" => "web-session.")
  cgi.out{
    cgi.html{
      "nCustomer #{sess['CustID']} orders an #{sess['Part']}"
    }
  }

×îлظ´