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.