Functionaliteiten van onze server:
----------------------------------

Bij het uitlezen van een inkomende request, hebben we onze server beperkt
tot het uitlezen van enkel de eerste reqel (ie. de "request line" zoals gespecifieerd
staat in RFC 2068).  Wat het HTTP protocol betreft, wil dit zeggen dat onze server beperkt
is tot het behandelen van GET methodes.

Wat JSP betreft, kan het de volgende dingen aan:
Als script taal kan het enkel java aan.  Bovendien worden de volgende tags behandeld.
<%-- ... %>			(commentaar)
<%@ page import="..." %>	(import directive)
<%= %>				(expressies)
al de rest wordt behandeld als "template" data

Nog op te merken hierbij is dat <%! tags (declaraties) niet voorzien is.  Wel laten
we toe dat declaraties tussen <% %> tags mag staan (wat eigenlijk niet overeenkomt
met de JSP specificatie).

Gebruik van de server:
----------------------

Onze server is geschreven en getest mbv. JDK 1.3.  Voor eerdere versies kunnen we
helaas niet garanderen dat de server naar behoren werkt.  Verder hebben we onze server
getest zowel op een windows systeem als op een Linux systeem.

De server kan opgestart worden in 2 verschillende modes.  Enerzijds waarbij een GUI venster wordt
gecreeerd, en anderzijds waarbij de server wordt gestart vanuit de command-line (dus zonder
GUI venster).

USAGE:	java HTTPServer [-p <port>] [-w]
	-p <port>	met deze optie zal de server luisteren op aangegeven poort
	-w		met deze schakeloptie zal geen GUI venster worden gecreeerd

Voor het compileren en runnen van de server te vergemakkelijken, hebben we batch en
.sh scripts voorzien:

Voor het compileren:
	compile.bat
	compile.sh

voor het runnen:
	run_with_window.bat	--> creert een venster
	run_with_window.sh
	run_console.bat		--> start the server vanuit de command line
	run_console.sh

Om het gebruik wat orderlijk te houden hebben we een bepaalde directory structuur gemaakt:
	de server "class" files staan in de directory "classes"
	de server "source" files staan in de dir "src"
	de root directory dient als root van de website (html files, jsp files, images...)
Wel op te merken is dat de "root" directory in de server is "hardcoded".  Dus alle
bestanden die ter beschikking worden gesteld via de server MOET in deze directory staan.  Ook is
het belangrijk dat alle directories van jsp bestanden in de classpath moet staan, bij het opstarten
van de server.

Links die je kan uitproberen:

http://<host:port>
http://<host:port>/index.html
http://<host:port>/jspexamples.html
http://<host:port>/jsp/test.jsp
http://<host:port>/jsp/counter.jsp
http://<host:port>/jsp/riddle1.jsp
http://<host:port>/jsp/riddle2.jsp
http://<host:port>/jsp/snoop.jsp

Toelichting bij de source bestanden:
------------------------------------

De ganse server is geschreven in java, en bestaat uit volgende classes:

	* HTTPServer
	* Connection
	* Request
	* Response
	* JSPEngine
	* JspPage
	* JspParser
	* JspBase
	* FileSender
	* ServerWindow
	* Output

Hieronder wordt een beknopte beschrijving gegeven van de functionaliteit van elk
van de opgenoemde classes:

* HTTPServer:
	Is de eigenlijke HTTP server.  Dit is een thread, en in the run methode
	blijft hij constant luisteren (op een gegeven poort) voor inkomende requests.
	Bij het inkomen van elke nieuwe request wordt Een "Connection" object (eveneens
	een thread) aangemaakt die deze nieuwe request verder afhandelt.

* Connection:
	Deze class is ook een thread en handelt een nieuw inkomend request af.  Voor elk
	nieuw inkomend request wordt door de server een nieuw "Connection" object aangemaakt.
	dit object creert aan de hand van de request line een "Request" object en een "Response"
	object aan.
	Vervolgens wordt de aard van de request bekeken:  een JSP request zal worden afgehandeld
	door een JSPEngine object.  Andere requests (van statische inhoud, vb. HTML, JPG, ...) worden
	afgehandeld door een "FileSender" object.

* Request en Response:
	Deze methoden hebben we hoofdzakelijk ingevoerd voor compatibiliteit met de JSP specificatie.

	Request stelt n enkele request voor.  Het leest de request line (zoals gespecifieerd in
	RFC 2068), en stelt methodes ter beschikking voor bv. opvragen van methode, url, ...

	Response stelt methodes ter beschikking om bepaalde inhoud naar de client te versturen
	over daarvoor beschikbare socket stream.

* JSPEngine:
	Deze class behandeld JSP requests.  Voor elk nieuw JSP request wordt een "JspPage" Object
	aangemaakt.  Vervolgens stuurt het signalen om deze jsp pagina te parsen en
	te compileren (indien nodig), en vervolgens laat het deze pagina uitvoeren.

* JspPage:
	Deze class stelt een JSP pagina voor.  Het verwijst telkens naar een bepaald JSP file (op harde schijf).
	En stelt methodes ter beschikking om het te parsen en uit te voeren.

* JspParser:
	Deze class parsed een Jsp Pagina, ie. neemt een jsp bestand, parsed het en converteert het naar
	een java class.  Het bevat een FileInputStream (die naar een jsp bestand op harde
	schijf zou moeten verwijzen) en een FileOutputStream (waar de geconverteerde inhoud naar wordt weg-
	geschreven dus de .java file gegenereerd uit de .jsp file).

* JSPBase:
	Dit is een abstracte class die als basis dient voor elke JspPagina.  Ie. de java-versie van
	elk jsp page is een subclass van "JSPBase".

* FileSender:
	Deze class behandeld requests die statische inhoud opvraagt (die als bestanden op harde schijf
	staan opgeslagen).  Bv. HTML bestanden, JPG bestanden, ...

* ServerWindow:
	Een GUI venster.  Voorzien van volgende componenten:
	- 'start' knop om de server te starten.
	- 'stop' knop om de server te stoppen.
	- 'messages' text area om server berichten weer te geven.
	- 'error messages' text area om error berichten weer te geven.
	- labels om de server status te displayen
	- 'port' text field, waarin de gebruiker een bepaald poort nr. kan opgeven.

