|
|||
Forrige < |
Innhold ^
|
Neste >
|
#!/usr/bin/env ruby print "HTTP/1.0 200 OK\r\n" print "Content-type: text/html\r\n\r\n" print "<html><body>Hello World!</body></html>\r\n" |
CGI
.
CGI
støtter skriving av CGI skript.
Med klassen kan du manipulere skjemaer (forms), cookies og miljøet rundt,
opprettholde sesjoner med tilstand og så videre.
Klassen dokumenteres i detalj i referanseseksjonen som starter
på side 497(??),
men we tar et kjapt blikk på dens muligheter her.
%2F
'' og må byttes tilbake til en ``/'' når du
skal bruke den.
Mellomrom og og-tegn (``&'') er også spesielle tegn.
For å ta seg av dette, tilbyr CGI
metodene
CGI.escape
and CGI.unescape
:
require 'cgi' puts CGI.escape( "Nicholas Payton/Trumpet & Flugel Horn" ) |
Nicholas+Payton%2FTrumpet+%26+Flugel+Horn |
require 'cgi' puts CGI.escapeHTML( '<a href="/mp3">Click Here</a>' ) |
<a href="/mp3">Click Here</a> |
require 'cgi' puts CGI.escapeElement('<hr><a href="/mp3">Click Here</a><br>','A') |
<hr><a href="/mp3">Click Here</a><br> |
A
'' taggene påvirket; de øvrige taggene endres ikke.
Hver av disse metodene har en tilsvarende ``un
-'' metode som gir
deg tilbake den opprinnelige strengen.
CGI
gir deg to former for tilgang til HTML forespørselsparameterne.
La oss si at vi har fått en URL som ser ut som /cgi-bin/lookup?player=Miles%20Davis&year=1958
.
Du kan da få tak i parameterne ``player
'' og ``year
''
ved å bruke CGI#[]
direkte:
require 'cgi'
|
||
cgi = CGI.new
|
||
cgi['player']
|
» |
["Miles Davis"]
|
cgi['year']
|
» |
["1958"]
|
Hash
:
require 'cgi'
|
||
cgi = CGI.new
|
||
h = cgi.params
|
||
h['player']
|
» |
["Miles Davis"]
|
CGI
har en mengde metoder som kan brukes for å lage HTML---en metode per tagg. For å kunne bruke disse metodene, må du lage et
CGI
objekt ved å kalle
CGI.new
,
og angi som innparameter den ønskede versjonen HTML.
I disse eksemplene vil vi bruke ``html3
''.
For å gjøre det enklere å nøste taggene, bruker disse metodene kodeblokker for å angi innholdet. Kodeblokken bør returnere en String
,
som vil bli innholdet i taggen.
I dette eksempelet har vi lagt til noen ekstra linjeskift for å få utskriften
til å passe inn på siden.
require "cgi" cgi = CGI.new("html3") # legg til HTML genereringsmetoder 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 } } } } |
Content-Type: text/html Content-Length: 302 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <TITLE>This Is a Test</TITLE></HEAD><BODY> <FORM ENCTYPE="application/x-www-form-urlencoded" METHOD="post"> <HR><H1>A Form: </H1> <TEXTAREA NAME="get_text" COLS="70" ROWS="10"></TEXTAREA> <BR><INPUT TYPE="submit"></FORM></BODY></HTML> |
get_text
'' som holder på teksten som brukeren skrev in.
CGI#out
.
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= <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML> HTML content here</HTML> |
CustID
og Part
, som vist i
HTML-koden.
require "cgi" cgi = CGI.new("html3") cgi.out{ cgi.html{ cgi.pre{ cookie = cgi.cookies["rubyweb"] "\nCookies are\n" + cookie.value.join("\n") } } } |
Content-Type: text/html Content-Length: 111 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><PRE> Cookies are CustID=123 Part=ABC</PRE></HTML> |
CGI::Session
(dokumentasjon begynner på side 504(??)), som bruker cookies men tilbyr
en høyere grad av abstraksjon.
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" } } |
$TMP/web-session.9650
med nøkkel, verdi par for CustID
og Part
.
Når brukeren kommer tilbake, trenger du bare en parameter for å
identifisere sesjonen. I dette eksempelet er det rubyweb=9650
.
Med den verdien i parametrene har du mulighet for å hente hele settet med lagrede sesjonsdata.
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']}" } } |
eruby
og erb
.
Resten av denne seksjonen vil ta for seg eruby
, som er skrevet
av Shugo Maeda.
Innebygging av Ruby i HTML er et kraftig konsept---det gir
oss noe som tilsvarer ASP, JSP eller PHP, men med all styrken til Ruby tilgjengelig.
eruby
fungerer som et filter, enkelt og greitt.
All tekst i innputfilen går igjennom urørt, med følgende unntak:
Uttrykk | Beskrivelse | |||||||
<% ruby kode %>
|
Koden mellom separatortegnene byttes ut med utputten den produserer. | |||||||
<%= ruby uttrykk %>
|
Uttrykket mellom separatortegnene byttes ut med verdien til uttrykket. | |||||||
<%# ruby kode %>
|
Koden mellom separatortegnene ignoreres. (Kjekt for testing) | |||||||
eruby
slik:
eruby [ opsjoner ] [ dokument ] |
eruby
lese fra standard innput.
Kommandolinjeopsjonene til eruby
vises
i tabell 14.1 på side 149.
Kommandolinje opsjoner til eruby
|
eruby
på følgende innput.
This text is <% a = 100; puts "#{a}% Live!" %> |
eruby
bytter ut uttrykket mellom separatortegnene og
produserer
This text is 100% Live! |
<%a = 100%>This text is almost <%=a%> degrees! Cool! |
=a
med verdien til a
.
This text is almost 100 degrees! Cool! |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>eruby example</title> </head> <body> <h1>Enumeration</h1> <ul> <%(1..10).each do|i|%> <li>number <%=i%></li> <%end%> </ul> <h1>Environment variables</h1> <table> <%ENV.keys.sort.each do |key|%> <tr> <th><%=key%></th><td><%=ENV[key]%></td> </tr> <%end%> </table> </body> </html> |
.rhtml
''
og setter opp webserveren til å kjøre eruby
på disse dokumentene
for å generere den ønskede HTML utput.
For å bruke eruby
sammen med Apache webserveren,
må du gjøre følgende steg.
eruby
til cgi-bin
katalogen.
httpd.conf
:
AddType application/x-httpd-eruby .rhtml Action application/x-httpd-eruby /cgi-bin/eruby |
DirectoryIndex
direktivet slik at det inkluderer
index.rhtml
. Dette gjør at du kan bruke Ruby til å lage
kataloglistinger for kataloger som ikke har en
eksplisitt index.html
fil.
For eksempel vil direktivet under gjøre slik at webserveren ser etter
det innebygde Ruby-skriptet index.rhtml
dersom verken
index.html
nor index.shtml
er å finne i en katalog.
DirectoryIndex index.html index.shtml index.rhtml |
DirectoryIndex index.html index.shtml /cgi-bin/index.rb |
CGI
biblioteket,
som dokumenteres på side 497(??).
mod_ruby
(tilgjengelig fra applikasjonsarkivene),
en Apache modul som lenker en komplett Ruby fortolker inn i selve Apache webserveren.
README
filen som følger med mod_ruby
gir detaljert informasjon om
hvordan det skal kompileres og innstalleres.
Når mod_ruby
er innstallert og konfigurert kan du kjøre Ruby-skript akkurat som før,
men de vil komme opp mye raskere.
( In progress translation to Norwegian by NorwayRUG. $Revision: 1.8 $ )
$Log: web.xml,v $ Revision 1.8 2003/08/08 10:36:02 kent Fikser noen overskrifter, figurer og legger inn kapittelnummerering. Revision 1.7 2002/08/12 18:15:50 kent Første kladd ferdig. Revision 1.6 2002/08/12 16:21:04 kent Frem til Installing eruby in Apache Revision 1.5 2002/08/12 14:25:30 kent Frem mot embedding Ruby i HTML. Revision 1.4 2002/08/11 07:58:06 kent Fram til Forms.
Forrige < |
Innhold ^
|
Neste >
|