Løbeseddel 3: TCL på Web-serveren

for Database-baseret Web-publicering, efterår 2001

af Niels Hallenberg sidst rettet 5. september, 2001


I denne øvelse skal vi bruge programmeringssproget Tcl til at skabe dynamiske web-sider.

Ved graduerigen lægges der bl.a. vægt på:

Denne løbeseddel skal være besvaret elektronisk på hug.it-c.dk senest tirsdag d. 25. september klokken 09.00 og i CourseGrader.

Hvis du mangler træning i løkker og procedurer, så kan du kigge på ekstra opgaverne til denne uge. Opgaverne øver procedurer og løkker, men er nok lidt sværere end ekstrasættet fra sidste uge.

Opgave A (20 procent) - Temperaturservice

I denne opgave skal du bruge proceduren fra øvelse 2, opgave F til at konstruere en web-service, hvor brugeren indtaster en temperatur i grader Fahrenheit, og servicen genererer en HTML-side med temperaturen angivet i grader Celcius.

Servicen skal gøres tilgængelig fra din web-server på hug.it.edu, som http://hug.it.edu:8013/oevelse3/temperatur.html, hvor 8013 udskiftes med dit port nummer (se deltagerlisten på kursets hjemmeside). Filen temperatur.html kan indeholde følgende HTML kode:

  <form method=post action=temp.tcl>
  Angiv temperaturen i grader Fahrenheit
  <input type=text name=tempf size=7>
  <input type=submit>
  </form>
Programmet som beregner temperaturen i grader Celcius udfra temperaturen i grader Fahrenheit, og som returnerer en passende HTML-side (ved brug af proceduren ns_return), placeres i filen /web/login/www/oevelse3/temp.tclhug.it.edu. (Filnavnet skal være identisk med action værdien angivet i filen temperatur.html.) Filen /web/login/www/oevelse3/temp.tcl kan have følgende format:
  # set the form variables, in this case the variable `tempf'
  set_form_variables

  # Procedure for converting temperature in degrees Fahrenheit
  # to temperature in degrees Celcius
  (Indsæt proceduren fra Opgave F her)

  # Compute the temperature in degrees Celcius from the variable `tempf',
  # which is set by the form-page.
  set tempc [tempf_to_tempc $tempf]

  ns_return 200 text/html "<html>
  <head>
  <title>Temperaturservice</title>
  </head>
  <body>
  <h2>Temperaturservice</h2>
  Temperatur i grader Fahrenheit: $tempf <p>
  Temperatur i grader Celcius: $tempc
  </body>
  </html>"
Proceduren set_form_variables, som kaldes i starten af temp.tcl programmet, sørger for at variablen med navn tempf i form-siden kan tilgås efterfølgende i Tcl programmet. Det er således værdien i tempf form-feltet, som overføres til proceduren tempf_to_tempc, når denne kaldes i Tcl programmet.

Udvid servicen til at undersøge om brugeren virkelig har indtastet nogle tegn i form-feltet (hint: prøv f.eks. med string compare).

Indsæt et link fra den genererede side tilbage til temperatur.html siden. (Når du indsætter links i Tcl-kode skal du huske at quotes (") skal skrives \"). Indsæt også et link fra din index.html side på hug.it.edu til temperaturservicen.

De to skærmbilleder kan f.eks. se således ud:

Temperatur Temperatur oversat

Opgave B (20 procent) - WebTabel

Konstruer en multiplikationstabelservice for 3. klasser. Servicen skal bruge et form-felt, som i opgave B, til indtastning af et tal. Herudover bruges proceduren multabel4 fra øvelse 2, opgave D til at generere en multiplikationstabel for det indtastede tal.

Servicen skal være tilgængelig som

  http://hug.it.edu:8013/oevelse3/multabel.html
hvor 8013 udskiftes med dit portnummer. På hug.it.edu skal du altså have en fil /web/login/www/oevelse3/multabel.html med et form-felt til indtastning af et tal. Yderligere skal du konstruere en Tcl-fil (/web/login/www/oevelse3/multabel.tcl), som når den læses af web-serveren, returnerer (med ns_return) en HTML-side indeholdende en multiplikationstabel for det indtastede tal.

Indsæt et link fra din index.html side på hug.it.edu til multiplikationstabelservicen.

De to skærmbilleder kan f.eks. se således ud:

multabel.html multabel.tcl

Opgave C (20 procent) - Æblegrødsprocedure

I denne opgave skal du konstruere en procedure aeblegroed, som tager som argument et tal som angiver hvor mange personer der skal laves æblegrød til. Proceduren skal returnere (med return) en HTML side indeholdende en æblegrødsopskrift til det pågældende antal mennesker:
  proc aeblegroed { antal_personer } {
     set page "<html>\n"
     ...
     append page "</html>\n"
     return $page
  }
Her er en æblegrødsopskrift passende til en person:

Ingredienser Fremgangsmåde
  • 2 æbler
  • 1 spsk sukker
  • 1/2 dl vand
  • 1 nip vanille
Æblerne koges og moses sammen med sukkeret, vandet og vanillen.

Det er altså din opgave at skrive proceduren aeblegroed færdig, således at proceduren returnerer en opskrift for det antal personer du kalder proceduren med (formen på opskriften er ikke vigtig!) Her er et eksempel på et kald af proceduren fra Tcl-konsollen:

  % aeblegroed 12
  <html>
  ...
  <table border=1>
  <tr><th align=center>Ingredienser</th><th>Fremgangsmåde</th></tr>
  <tr><td>
    <ul><li> 24 æbler
        <li> 12 spsk sukker
        ...
    </ul></td>...
  </table>
  ...
  <html>
Gem proceduren i filen /web/login/www/oevelse3/procaeblegroed.tclhug.it.edu.

Opgave D (20 procent) - Æblegrødsservice

Brug proceduren aeblegroed fra opgave C til at konstruere en web-service, hvor brugeren indtaster et tal i et form-felt og får serveret en æblegrødsopskrift for det indtastede antal personer.

Servicen skal være tilgængelig som

  http://hug.it.edu:8013/oevelse3/aeblegroed.html
hvor 8013 udskiftes med dit portnummer. På hug.it.edu skal du altså have en fil /web/login/www/oevelse3/aeblegroed.html indeholdende en HTML-form til indtastning af det antal personer, som der skal laves æblegrød til. Tilføj Tcl-kode til filen /web/login/www/oevelse3/aeblegroed.tclhug.it.edu således at når filen læses af web-serveren returneres (med ns_return) en HTML-side indeholdende en æblegrødsopskrift for det indtastede antal personer.

Indsæt et link til servicen fra din index.html side på hug.it.edu.

De to skærmbilleder kan f.eks. se såleds ud:

aeblegroed.html aeblegroed.tcl

Opgave E (20 procent) - WebMail

Med AOLserver kan du sende emails fra dine Tcl-programmer ved brug af AOLservers indbyggede Tcl-kommando ns_sendmail. Du kan således lave web-services som sender emails til dig eller andre. På sin simple form tager kommandoen ns_sendmail fire argumenter:
  ns_sendmail to from subject body
Det første argument skal indeholde modtagerens email-adresse, det andet argument skal indeholde afsenderens email-adresse. For at kommandoen ikke skal fejle er det vigtigt at de to første argumenter er på formen name@domain. De to sidste argumenter er strenge, som skal indeholde henholdsvis beskedens emne (subject) og den egentlige besked.

Konstruer en web-service med ns_sendmail kommandoen, hvor en bruger af din service kan sende dig en email. Det skal være muligt for brugeren at indtaste sin egen email-adresse, emne og besked. Servicen skal være tilgængelig som

  http://hug.it.edu:8013/oevelse3/send-mig-mail.html
hvor 8013 udskiftes med dit portnummer. På hug.it.edu skal du altså have en fil /web/login/www/oevelse3/send-mig-mail.html indeholdende HTML-forms til indtastning af afsenderens email-adresse, emne og besked. Yderligere skal du konstruere en Tcl-fil (/web/login/www/oevelse3/send-mig-mail.tcl), som når den læses af web-serveren, sender en email med ns_sendmail kommandoen og returnerer (med ns_return) en HTML-side indeholdende en passende ``Tak for din mail'' besked.

Indsæt et link til servicen fra din index.html side på hug.it.edu.

Dit skærmbillede kan f.eks. se således ud:

send_mig_mail.html


nh@it.edu