4. Einen Webserver programmieren
In diesem Kapitel werden wir einen (nein: mehrere) Webserver programmieren.
Sie müssten ja jetzt im Prinzip wissen, wie das geht: das sind Programme, die
TCP-Verbindungen annehmen, dann aus dieser Verbindung Daten lesen; falls diese
das Format eines HTTP-Requests haben, werden Sie den Request "verstehen", also in
seine Einzelteile zerlegen (am wichtigsten ist natürlich die angefragte URL, also das,
was direkt auf den Befehl GET
folgt); dann wird das Programm den
Request beantworten, also zum Beispiel die angefragte Datei einlesen und, als
HTTP-Response verpackt, zurückschicken.
Im Prinzip ganz einfach, in der Umsetzung natürlich nicht.
- Wenn wir wirklich alles per Hand machen wollten, müssten wir (zum Beispiel in Java), ein Programm schreiben, das den HTTP-Request zerlegt, also einen Parser. Hierfür gibt es natürlich bereits Bibliotheken / Pakete, die das für uns übernehmen.
- Der Server soll ja in der Praxis nicht nur sklavisch angeforderte Dateien schicken; nein, die Anfrage sollte vielleicht auch eine Datenbanksuche oder generell etwas Dynamisches auslösen.
- Bei der Programmierung des Servers können wir die Programmiersprache frei wählen. In diesem Kurs habe ich mich für Node.js (Javascript) entschieden. Nicht, weil das eine didaktisch besonderes hochwertige Sprache wäre, sondern weil es relativ niedrigschwellig ist: der Code ist meistens kurz; es stehen unzählige Bibliotheken zur Verfügung, die uns das Leben einfacher machen; später, wenn wir Interaktion im Browser lernen wollen, müssen Sie soweiso Javascript lernen, weil das die Sprache ist, die alle Browser sprechen.
Ein erster Webserver in Java
Meinen primitiven Java-Webserver finden Sie in der Datei PrimitiveWebServer.java. Speichern Sie die Datei lokal, kompilieren Sie ihn, starten Sie ihn und öffen parallel dazu den Code mit Ihrem Code-Editor:
javac PrimitiveWebServer.java
java PrimitiveWebServer 1234
PrimitiveWebServer listening at port 1234
Gehen Sie jetzt in einen Browser und geben
localhost:1234
in die Adresszeile ein.