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']}"
}
}