|
|||
| 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 >
|