Servlet

Ein Servlet ist eine Software auf dem Webserver, geschrieben in Java-Quellcode, die HTML-Ergebnisseiten erzeugt. Damit werden die Fähigkeiten von Webservern um die Generierung von dynamischen Informationen erweitert. Servlets sind Bestandteil einer Webapplikation, die von einem Webcontainer verwaltet wird. Servlets bieten u.a. eine Kapselung von CGI-Details. Damit bieten sie eine Alternative zu herkömmlichen CGI-Scripten oder der Generierung von dynamischen, interaktiven Webseiten beispielsweise mit Hilfe von Ruby on Rails, Active Server Pages (ASP) oder Hypertext Preprocessor (PHP).


Konzept der Servlets

Das Konzept der Servlets geht zurück auf James Gosling - einem der Begründer der Programmiersprache Java - der 1994 den ersten vollständig auf Java aufgebauten Webserver entwickelte, und in diesem Zusammenhang das Konzept der Servlets definierte. Etwas später entwickelte sich die Technik der Java Server Pages (JSP), die den bei Servlets bestehenden Nachteil der Kopplung von Visualisierung und Logik vermeidet.

Der Grundgedanke für die Begriffsbildung "Servlet" waren die sogenannten Applets, die vom Web-Browser ( Client) geladen werden. Und da Servlets serverseitige Programme sind, ergibt sich aus "Server" und "Applet" der Begriff Servlet.

Grundvoraussetzung für die Verwendung von Servlets ist ein Servlet-fähiger Applikations-oder Webserver, wie es z.B. alle Java-EE-Anwendungsserver sind. Ein Servlet ist eine spezielle Java-Klasse, die innerhalb eines Webcontainers instantiiert wird. Ein Webcontainer stellt die Laufzeitumgebung für Servlets zur Verfügung und übernimmt deren Zustandsverwaltung. Dazu gehören die Kommunikation des Servlets nach außen sowie die Verwaltung von dessen Lebenszyklus. Webcontainer können Teil eines Webservers oder eines Applikationsservers sein. Der Webcontainer hat dann die Aufgabe, die Anfrage (Request) eines Clients an ein Servlet weiterzuleiten, das über Java-Code eine Antwort - beispielsweise eine Webseite im HTML-Format - erzeugt.

Alternative Konzepte der Servlets

Es gibt aber auch die alternative Möglichkeit, dass Servlets sich gegenseitig aufrufen können. Eine Methodik dazu ist der Servlet-Kontext. Der Servlet-Kontext bildet für Servlets die Schnittstelle zu ihrer Umgebung und verwaltet Daten wie z.B. Werte einer Webanwendung, die für alle dazugehörigen Servlets verfügbar sind. Die Daten können z.B. über einen sogenannten Deployment Descriptor - eine spezielle xml-Datei web.xml - zur Verfügung gestellt werden. Weitere Möglichkeiten der Kommunikation zwischen Servlets sind spezielle Sessions und Requests sowie gemeinsame Oberklassen.

Kommunikationsstruktur Client-Servlet

Kommunikationsstruktur Client-Servlet

Servlets sind theoretisch nicht an ein bestimmtes Serverprotokoll wie z.B. HTTP gebunden, werden aber in der Regel nur mit HTTP/Webservern verwendet. Servlets bieten im Vergleich zu CGI-Scripten den Vorteil, dass sie nach erster Erzeugung im Speicher verbleiben, und somit also Daten zwischen Requests gespeichert werden können. Wogegen bei der Verwendung von CGI-Scripten jeder Request in einem neuen Prozess bearbeitet wird.

Ein Aspekt bei der Erstellung von Servlets sind die Themen Nebenläufigkeit und Verteilung; es gibt nämlich nur eine Instanz pro Servlet aber u.U. mehrere Clients mit Requests. Oder es greifen zusammen arbeitende Servlets konkurrierend auf gemeinsame Ressourcen wie z.B. Datenbanken zu. In diesem Fall müssen die Zugriffe synchronisiert werden bzw. ist es Aufgabe des Webcontainers die Synchronisation zur Verfügung zu stellen. Hierzu gibt es die Ansätze:

  • Request Serialisation, wobei eine Warteschlange für Requests gebildet wird.
  • Instance Pooling, dabei wird ein Pool mit Servlet-Instanzen angelegt.

Vorteile der Servlets.

Im Vergleich mit CGI-Scripten bieten Servlets erhebliche Vorteile:
  • Portabel und Plattformunabhängig,
  • Java hat umfassende Servlet-Schnittstellen ( APIs),
  • Vielseitig von Java nutzbar z.B. Anbindung an Datenbanken, Middleware,
  • Einsatz der Möglichkeiten einer objektorientierten Programmiersprache wie Java bei komplexen Aufgabenstellungen,
  • Höhere Performance durch Daten-Caching und die Verarbeitung von Requests in Threads und nicht in Prozessen,
  • Skalierbarkeit durch Verteilte Systeme,
  • Durch den Ablauf in Containern sind differenzierte Sicherheitseinstellungen wie Sandbox oder JVM-" policy"-Datei möglich, und
  • J2EE Sicherheitsmodelle sind nutzbar.
Nachteilig ist jedoch, dass bei Servlets die Visualisierung und die Programmlogik nicht getrennt sind. Damit muss bei Änderung des Designs einer Webanwendung ebenfalls der Programmcode modifiziert werden, was entsprechend aufwändig und fehlerbehaftet sein kann.

Es gibt verschiedene lizenzfreie Webserver mit Servlet-Funktionalität, welche die von der Firma Sun veröffentlichte Java-Servlet-Spezifikation erfüllen:

Apache Tomcat. Ein Produkt der Apache Software Foundation mit quelloffenen Code. Definiert eine Umgebung zur Ausführung von Java-Code auf Webservern, integriert einen Servlet-Container und auch einen HTTP-Server.

Glashfish. Leistungsfähiger Webserver mit Unterstützung für Servlets, CGI-Scripts und PHP, der einen Webcontainer integriert.

Jetty. HTTP-Server, der sich u.a. in individuelle Software ( Webservices) einbetten lässt.

Über den aufgeführten Links kann auf Listen der Firma Sun mit weiteren Servlet-fähigen Servern zugegriffen werden.

http://java.sun.com/products/servlet/industry.html

http://tomcat.apache.org/

http://jetty.mortbay.org/

http://glassfish.dev.java.net/

Informationen zum Artikel
Deutsch: Servlet
Englisch: servlet
Veröffentlicht: 27.10.2013
Wörter: 764
Tags: #Java
Links: ASP (active server pages), Apache, API (application programming interface), Applet, Aspekt