HTML-Seiten werden dynamisch programmiert, sodass bestimmte Inhalte zum Beispiel aus einer Datenbank in die HTML-Seite eingebunden werden können. Es gibt eine Reihe von Technologien, die in ihrer Gesamtheit dazu beigetragen haben, ein umfassendes Framework für die Entwicklung von Web-Anwendungen auf Basis der Programmiersprache Java zu bilden: Java-Servlets, Java Server Pages und AJAX.
Einer der ersten Ansätze zur Entwicklung dynamischer Webseiten wurde im Jahre 1997 entwickelt. Er bestand darin, die HTML-Seite nicht
"von Hand" zu schreiben, sondern ein Java-Programm den gesamten HTML-Code erzeugen zu lassen. Diese Programme heißen Java-Servlets.
Sie nehmen eine HTTP-Anfrage mit etwaigen Parametern entgegen, stellen die HTML-Seite passend zu der Anfrage zusammen und senden sie als
HTTP-Antwort zurück. Dabei greifen sie üblicherweise auf Datenbanken oder andere Informationsquellen zu, um möglichst
spezifisch auf die Anfrage reagieren zu können.
Java-Servlets werden nicht unmittelbar vom Browser aufgerufen. Sie sind ausführbare Programme und haben daher keine Internet-Adresse (URL), unter der sie von außen erreichbar sind. Damit sie trotzdem HTTP-Anfragen bearbeiten können, muss es eine Komponente geben, die
In der Java EE-Architektur werden diese Komponenten Servlet-Container (auch: Web Container) genannt. In großen Projekten sind Servlet-Container Bestandteil eines Application Servers. Bei kleineren Projekten oder Prototypen können sie auch als einzelne Komponente verwendet werden. Beispielimplementierungen solcher Servlet-Container sind beispielsweise "Apache Tomcat", der bereits in die Entwicklungsumgebung Netbeans integriert ist, sowie "Jetty".
Möchte man eine eigene Servlet-Klasse programmieren, muss die Klasse von HTTPServlet erben. HTTPServlet ist eine
abstrakte Klasse, die im Paket javax.servlet.http enthalten ist und grundlegende Methoden eines Servlets definiert. Da es mit
GET und POST zwei Typen von HTTP-Anfragen gibt, gibt es die beiden Methoden doGet und doPost.
Folgendes einfaches Beispiel-Servlet reagiert auf beide Anfragetypen mit derselben Methode. Es handelt sich um eine traditionelle "Hello
World"-Methode, die einem Benutzer nach Aufruf der Web-Anwendung einen entsprechenden in HTML programmierten Begrüßungstext anzeigt.
In diesem einfachen Beispiel wurde noch kein Zugewinn hinsichtlich der Dynamik erreicht. Schließlich müsste nun bei einer Änderung des Inhaltes anstelle einer HTML-Datei die Java-Klasse manuell angepasst werden. Doch innerhalb eines Java-Programms ist es eine leicht zu lösende Aufgabe, abhängig von den Parametern in der HTTP-Anfrage bestimmte Datenbankabfragen zu starten und den Inhalt aus den Ergebnissen dieser Datenbankabfrage zu füllen.
Programmiert man das Beispiel nach, so kümmert sich die Entwicklungsumgebung eigenständig darum, dass der Servlet-Container gestartet
und das eigene Servlet dort installiert wird. Die URL, mit der auf das Servlet zugegriffen werden kann, wird vom Servlet-Container
vorgegeben. standardmäßig setzt sie sich aus dem Projektnamen und dem Namen der Servlet-Klasse zusammen (hier: siehe Localhost). Die Seite
zeigt die gewünschte Begrüßung an und auch der vom Browser angezeigte Quelltext stimmt mit dem in der Servlet-Methode
zusammengestellten HTML-Code überein.