Inleiding
De Webserver genereert bijna alle HTML-output vanuit specificatie-files.
De server is daardoor extreem configureerbaar, flexibel, en meerzijdig inzetbaar.
Dit hoofdstuk beschrijft:
- de globale werking van de webserver
- de diverse files "~layout.txt"
- de notatie van de codes in de file "~layout.txt"
- de gebruikte codes in "~layout.txt"
Werking van de webserver
De werking van de webserver verloopt globaal als volgt:
- De server ontvangt een pagina-request van een browser.
- Als er een bestaande file wordt gevraagd, dan wordt die gewoon geleverd.
Een URL die niet eindigt op een '/' is een file.
- Als er een bestaande directory wordt gevraagd,
dan worden alle files van die map achter elkaar geplakt,
en als 1 pagina naar de browser teruggestuurd.
Elke file-type wordt op zijn eigen passende manier weergegeven;
een txt file als letterlijke tekst, een jpg-file als plaatje,
en een zip-file als downloadbare link.
- De HTTP-server kent vrijwel geen HTML-code !.
De gewenste codes worden vooraf vanuit een specificatie-file
legezen, in een tabel gezet, en vanuit die tabel worden de
naar behoefte gegrabbeld om de HTML-code te maken.
- Eventuele parameters in de URL (achter het vraagteken)
worden bewaard als environment variabelen.
- Eventuele meegezondern cookies
worden bewaard als environment variabelen.
- Er wordt standaard een nieuw cookie naar de klant gestuurd
met de laatste bezoektijd,
om later te kunnen aangeven welke files nieuw zijn.
Inlezen van de files "~layout.txt"
De server leest verschillende specificatie-files "~layout.txt",
waarin staat welke HTML-codes op welk moment naar de browser moeten worden gestuurd.
- De server leest de codes in de file "~layout.txt" op de directory
/var/www (de top-directory met alle websites).
Deze codes gelden dus als default voor alle websites.
- De server leest de codes in de file "~layout.txt" op de directory
/var/www/sitename
(de top-directory van de site, die gevraagd werd door de web-browser).
Deze codes gelden dus als default voor alle pagina's binnen de site.
- De server leest de codes in de file "~layout.txt" op de directory
/var/www/sitename/pagina
(op de directory van de site, die gevraagd werd door de web-browser).
Deze codes gelden dus alleen voor de gevraagde pagina.
Als een code op meer dan 1 plaatsen in 1 of meer van deze files is gedefinieerd,
dan geldt alleen de laatste.
Schrijfwijze van ~layout.txt
Als de server een HTML-code moet genereren, dan doet deze dat
door de betreffende code op te zoeken in een tabel
aan de hand van een label.
Die tabel werd hierboven al gevuld met de codes uit de
files "layout.txt".
labels en sublabels
Diverse codes hebben met elkaar te maken,
en zijn daarom samengevoegd onder een hoofd-label.
Bijvoorbeeld: [html.begin] en [html.end] geven
het begin en einde aan van een HTML-pagina,
en hebben daarom beide hoofd-label "html",
en sub-labels 'begin"en "end".
Verkorte notatie in dit manual
In deze documentatie geldt de volgende schrijfwijze:
[label.sublabel]='tekst'
Hiermee wordt bedoeld:
- label is een hoofd-label,
- sublabel is een sub-label, onderdeel van hoofd-label,
- Zodra de webserver het nodig heeft voor de pagina-opbouw,
wordt [label.sublabel] vervangen door 'tekst',
en dan naar de web-browser gestuurd.
[label.sublabel] kan 'leeg' zijn, dus geen tekst bevatten.
Notatie in de files ~layout.txt
- De labels moeten in de ~layout files worden geschreven
tegen de linkerkantlijn, voorafgegaan door een
=.
- De sublabels moeten in de ~layout files worden geschreven
tegen de linkerkantlijn, voorafgegaan door een
.,
en pas ná de definitie van het label waar het een onderdeel van is.
- Daaronder komt de tekst, die het (sub)label moet vervangen
zodra het naar de browser wordt gestuurd.
Deze mag uit meerdere regels bestaan,
zolang het maar niet begint met een
= of ..
Voorbeeld:
De (diverse) files met de naam ~layout.txt moeten op de volgende
wijze worden geschreven:
=label1
.sublabel1
tekst1
.sublabel2
tekst2
Hierdoor worden waarden aan de diverse labels toegekend:
| [label.sublabel] | vervang-waarde |
| [label1.sublabel]1 | tekst1 |
| [label1.sublabel]2 | tekst2 |
Een hoofd-label kan meerdere sublabels bevatten.
Het hoofdlabel hoeft daarbij niet opnieuw te worden opgegegven (mag wel).
Tekens in de eerste kolom
De tekens in de eerste kolom van de file "~layout.txt"
geven aan, wat daarachter staat:
| Char |
Betekenis |
Toelichting |
| = |
label naam |
een = in de eerste kolom geeft de naam van een label aan. Alle navolgende tekstregels behoren tot dit label, tot aan het volgende label. |
| . |
sublabel naam |
een . in de eerste kolom geeft de naam van een sublabel aan. Alle navolgende tekstregels behoren tot dit [label.sublabel], tot aan het volgende sublabel of label. |
| # |
Kommentaar |
Regels met een kommentaar teken in de eerste kolom worden genegeerd |
| | |
Aantal kolommen per pagina |
De pagina wordt in zoveel kolommen verdeeld. De files worden kolomsgewijs afgedrukt. |
| |
Lege regels |
Lege regels worden genegeerd |
| A-Z,a-z,0-9,~!@$%^* |
Overige tekst |
Overige tekst wordt beschouwd als inhoud van het [label.sublabel], en wordt voor [label.sublabel] in de plaats afgedrukt,als de webserver dat [label.sublabel] nodig heeft. |
Voorbeeld: in de volgende ~layout.txt file
#label1
.sublabel1
aap
noot
mies
.sublabel2
wim
zus
jet
=label3
.sublabel1
teun
Zodra de Webserver [label1.sublabel1] moet afdrukken,
kijkt deze in de lijst van teksten, die is opgebouwd uit de
~layout.txt files van
- alle websites.
- de website,
- de pagina
en drukt vervolgens af: "aap noot mies".
Parameters
De tekst in label mag soms een '%s' bevatten.
Die wordt dan vervangen door een waarde, die in de server bekend is.
Meestal is dat een filenaam, soms een regelnummer of systeem-tijd.
Als er meerdere parameters zijn, worden die op volgorde vervangen.
Voorbeeld:
'<h1>%s</h1>'
met parameter 'TITEL' wordt naar de Web-pagina geschreven als:
'<h1>TITEL</h1>'
Generatie van HTML code
Een normale Web-pagina bestaat minimaal uit de codes:
- <html>
- <head>
- de onzichtbare headers van de pagina
- </head>
- <body>
- de zichtbare inhoud van de pagina
- </body>
- </html>
De webserver heeft hiervan echter geen enkel benul,
maar genereert de gewenste tekst door aanroep
van de volgende labels:
- [html.begin]
- [head.begin]
- overige labels voor de onzichtbare headers
- [head.end]
- [body.begin]
- overige labels voor de inhoud van de pagina, en inhoud van de data-files
- [body.end]
- [html.end]
Voor de overzichtelijkheid worden de gebruikte labels hieronder nogmaals gegeven,
maar dan in tabel-vorm, en in de mapjes hieronder.
| Wat de server wil afdrukken |
Wat in de ~layout.txt staat |
De gegenereerde HTML code |
| =html.begin |
=html .begin <html> |
<html> |
| =head.begin |
=head .begin <head> |
<head> |
| ... |
... |
... |
| =head.end |
=head .end </head> |
</head> |
| =body.begin |
=body .begin <body> |
<body> |
| ... |
... |
... |
| =body.end |
=body .end </body> |
</body> |
| =html.end |
=html .end </html> |
</html> |
Generatie van HTML pagina's
Een Web-pagina kan worden opgeroepen op 3 manieren:
- als file (niet eindigend op '/')
- als directory (wel eindigend op '/')
- iets dat niet bestaat.
Al deze mogelijkheden worden in de volgende mapjes verder uitgewerkt.
 |
File
|
 |
Directory
|
 |
Error-pagina
|
 |
Exif
|
File file_to_client.tab
File file_to_client_csv.tab
File file_to_client_inc.tab
File file_to_client_jpg.tab
File file_to_client_other.tab
File sendFormat.tab
File send_exif_info.tab
File send_file_bat.tab
File send_file_csv.tab
File send_file_framed.tab
File send_file_other.tab
File send_headers.tab
File senddir.tab