About Me About MeProjects ProjectsPhotos PhotosSitemap Sitemap
  About Me > C/S Praktikum 99: Servlets > Kurzvorstellung Servlets

 

C/S Praktikum 1999-2000

Kurzvorstellung: Servlets

Dynamisch erzeugte Webseiten gewinnen immer mehr an Bedeutung. Sei es um die Ausgabe einer Datenbankabfrage anzuzeigen, eine Bestellung zu tätigen oder eine bestehende Anwendung an das Internet anzubinden.

Die wichtigsten Technologien zur dynamischen Erstellung von Webseiten sind:

  • CGI Skripte
  • Skript-Sprachen (zB: Net.Data von IBM, ActiveServerPages (ASP) von Microsoft, ColdFusion von Allaire).
  • Server Plugins für bestimmte Webserver (z.B.: NSAPI von Netscape und ISAPI von Microsoft)
  • Servlets

Was sind (HTTP) Servlets?

Servlets sind spezielle serverseitige Java Programme.

"Serverseitig" bedeutet, daß die Programme auf dem Server laufen und nicht auf dem Computer der die Webseite anzeigt. Geladen und ausgeführt werden Servlets also von einem Webserver welcher Servlets unterstützt, oder von einem entsprechendem Applikationsserver. So wie Applets die Funktionalität eines Webbrowsers erweitern, erweitern Servlets die Funktionalität eines Servers.

Servlets werden durch das Java Servlet API definiert, welches eine Schnittstelle zwischen dem Server und dem Servlet darstellt. Deshalb sind Servlets prinzipiell nicht abhängig von einem bestimmten Server.

Das Java Servlet API besteht aus den folgenden zwei Packages:

  • Package javax.servlet: Enthält Klassen für die Unterstützung von generischen, protokollunabhängigen Servlets.
  • Package javax.servlet.http: Enthält Klassen für die Unterstützung von Servlets, welche das HTTP Protokoll benutzen. (HTTP Servlets)

Um ein HTTP Servlet zu erhalten muß man die Klasse HttpServlet erweitern.

Was können Servlets?

Hier einige Beispiele:

  • Eine ganze oder ein Teil einer HTML Seite dynamisch erzeugen und zurückliefern..
  • Eine Benutzereingabe verarbeiten und die Ergebnisse an andere Servlets oder JSPs (mehr dazu bei den Vorteilen) schicken.
  • Mit anderen Server-Ressourcen kommunizieren (Datenbanken, andere Java Applikationen)
  • Verbindungen mit mehreren Klienten managen und Daten an diese verteilen. (z.B. ein Chat-Server mit Servlets).

Wie werden Servlets aufgerufen?

Es gibt mehrere Möglichkeiten ein Servlet aufzurufen:

  • über einen Hyperlink
  • über ein HTML Formular (GET bzw. POST Methode)
  • über ein anderes Servlet

Verantwortlich für das Laden und Instanziiren, das Ausführen und das Entfernen eines Servlets ist der Webserver bzw. Applikationsserver. Dazu benutzt er das Java Servlet API. In der Regel existiert nur eine Instanz jedes Servlets und mehrere Threads (eines für jeden Aufruf durch einen Klienten) greifen auf das Servlet zu (Figure 2).

3-Tier Architecture Servlet Execution Model
(Figure 2 ist aus IBM's Redbook (html)sg245423.pdf)

Nachteile

  • Performance? Über die Performance von Servlets vs. den anderen Technologien habe ich eigentlich keine genaue Informationen. Es gibt jedoch zwei Faktoren welche sich nachteilig auf die Performance auswirken können:
    • Java ist nicht die schnellste Programmiersprache.
    • Da jedes Servlet i.d.R. nur einmal Instanziiert wird (es existiert also genau ein Objekt von einem Servlet) und mehrere Threads des Servers gleichzeitig darauf zugreifen, muß man oft die Methoden des Servlets als synchronized deklarieren, um die Konsistenz von Member-Variablen (Klassenvariablen) zu gewährleisten. Dies wirkt sich negativ auf die Performance aus. Meistens kann man jedoch ohne Member-Variablen in den Servlets auskommen.
  • Höhere Anforderungen: Um mit Servlets zu arbeiten braucht man einen Webserver / Applikationsserver der das Java Servlet API unterstützt.

Vorteile

  • Java basierend: Servlets werden in Java geschrieben. Man profitiert also von den positiven Eigenschaften dieser Programmiersprache, wie zB. die Objektorientierung und Modularisierung, die Einfachheit der Sprache und den einfachen Datenbankzugriffen (JDBC). Dadurch kann Code wiederverwendet werden und die benötigte Entwicklungszeit verkürzt sich.
  • Portabilität: Da Servlets in Java geschrieben werden ist die Portabilität zwischen verschiedenen Plattformen / Betriebsystemen gewährleistet. Außerdem ist durch das Servlet API eine serverunabhängige Schnittstelle definiert, was Servlets portabel zwischen verschieden Servern macht.
  • Performance: Jedes Servlet wird nur einmal von Webserver geladen (instanziiert). Es befindet sich dann im Speicher und kann sofort auf Anforderungen (requests) des Klienten reagieren. Zusätzlich hat ein Servlet die Möglichkeit schon während des initialisierens Datenbankverbindungen zu erzeugen und zu behalten, so daß diese nicht für jede Anforderung eines Klienten neu erzeugt werden müssen.
  • Trennung von Applikationslogik und Presentationslogik: Eine verwandte Technologie zu Servlets sind JSPs (Java Server Pages). Dabei handelt es sich um HTML Seiten die auch Java Programmcode enthalten. Servlets können diese JSPs aufrufen und ihnen gleichzeit Objekte mit Daten übermitteln. Die JSPs können diese Daten in den HTML Code der Seite einfügen. So wird eine Trennung zwischen der Applikationslogik (Servlets) und der Datenanzeige (JSPs) erzielt.
  • Sessions: Dieses Objekt des Servlet APIs wird eindeutig einem Benutzer (über ein Cookie) zugeordnet. In eine Session können Daten von verschiedenen Servlets geschrieben und gelesen werden. Auf diese einfache Art und Weise können komplexe Vorgänge (z.B. eine Bestellung) in mehrere Servlets aufgeteilt werden.

Im Praktikum:

Für das Praktikum benutzen wir den Applikationsserver WebSphere von IBM, auf dem die Servlets ausgeführt werden. Als Datenbank benutzen wir DB2 von IBM. Als Webserver werden wir voraussichtlich Apache benutzen.

Die konkreten Aufgaben stehen z.Zt. noch nicht fest.

Zum herumspielen wird es außerdem ein online Bestellsystem eines fiktiven Pizza-Bringdienstes geben, welches auf Servlets basiert.