Java-Servlets Gliederung: Allgemeine Informationen zu Servlets Einsatz und praktische Nutzung von Servlets Servlet Lebenszyklus CGI versus Servlet Implementierung von Servlets Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 1 Mittwoch, 1. November 2000 Allgemeine Informationen Entwicklungsumgebung für Servlets Java Servlet Development Kit (JSDK) beinhaltet eine Servlet-Engine um die entwickelten Servlets testen zu können implementieren übersetzen mit „servletrunner“ testen Lebensraum für Servlets Webserver mit eingebauter VM für Servlets (Sun Java Web Server, Netscape`s Enterprice Server, Lotus Domino Go Webserver) Webserver mit Erweiterungmodul für Servlets (Apache, IBM`s WebSphere Application Server) Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 2 Mittwoch, 1. November 2000 Servlets - Applets Servlet Applet ohne GUI-Komponente (faceless) JAVA-Programme auf Server Seite erweitern Webserver um dynamische Komponenten Ausführung in VM des Servers nutzen die lokalen Ressourcen des Servers (Filesystem, DB) mit GUI-Komponente JAVA-Programm auf Client Seite wird vom Server heruntergeladen Ausführung in der VM des Clients (Browser) keine Möglichkeit die lokalen Ressourcen des Clients zu nutzen Server (Webserver) Anfrage (Request) Servlet Antwort (Response) Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 3 Mittwoch, 1. November 2000 Einsatz von Servlets Dynamische Generierung von HTML Seiten Client eröffnet Verbindung zum Server HTTP Methode GET (ein Dokument, ein Diagramm, ein Ergebnis einer Datenbankabfrage) HTTP Methode POST (eine Kreditkarten Nummer, neue Daten für eine Datenbank) Antwort ist eine dynamisch erzeugte komplette HTML Seite Server-Side Includes (SSI) Servlets eingebettet in HTML Seiten mit Hilfe des <SERVLET> tag Beispiel ist ein „Counter“ der in die statischen HTML Seiten eingefügt werden soll JavaServer Pages Java Code zwischen <%........... %> tag wird ausgeführt, Ergebnis als String in HTML Seite Zukunft besteht in der Kombination von JavaServer Pages und JavaBeans Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 4 Mittwoch, 1. November 2000 Praktische Nutzung Servlet verarbeitet Daten aus dem Secure Hypertext Transfer Protokoll (Kreditkarteninformationen aus einer HTML Seite). Threads der Servlets lassen sich synchronisieren (Online-Konferenz mit mehreren Clients). Aufgabenteilung durch Zusammenarbeit von mehreren Servlets auf verschiedenen Rechnern um Überlastsituationen abzufangen (Lastausgleich). Nach Verbindungsaufnahme zwischen Client und Server über HTTP-Protokoll kann über ein frei wählbares Protokoll kommuniziert werden. Dynamische Code Erweiterungen sind möglich (Java Bytecode zur Laufzeit auf den Server laden und ausführen) Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 5 Mittwoch, 1. November 2000 Servlet Lebenszyklus Erste Anfrage an Servlet Anfrage an Servlet Anfrage an Servlet Anfrage an Servlet Webserver lädt das Servlet und instantiiert es Webserver initialisiert das Servlet: init() init() Servlet bearbeitet die Anfragen: service() service() Webserver löscht das Servlet: destroy() destroy() Webserver wird beendet Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 6 Mittwoch, 1. November 2000 Eine Instanz viele Threads Webserver request Thread request Thread Beispiel: Counter Servlet request request Autor: Cornelius Wille Status: Entwurf Problem: keine Konsistenz im Filesystem Thread Lösung: Block muß synchronized sein Thread OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 7 Mittwoch, 1. November 2000 CGI versus Servlet Leistung: Servlets werden bei der ersten Anfrage initalisiert und bleiben nach der Abarbeitung im Speicher des Servers erhalten (CGI Prozesse werden immer neu gestartet) Plattformunabhängigkeit: Servlets sind auf beliebiger Plattform lauffähig (Perl basierte CGI-Skripte sind übertragbar, C oder C++ erfordern eine Portierung) Wiederverwendbarkeit: Servlets können als Klassen importiert und an anderer Stelle verwendet werden (CGI sind meist isolierte Anwendungen) Sicherheit: Security Manager von Java verhindert Ressourcenmissbrauch (keine solche Funktion bei CGI) Lastverteilung: Servlets unterstützen Lastverteilung zwischen Servern (CGI nur mit extremen Aufwand realisierbar) Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 8 Mittwoch, 1. November 2000 Hello World import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML>"); out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>"); out.println("<BODY>"); out.println("<BIG>Hello World</BIG>"); out.println("</BODY></HTML>"); } } http://server:8080/servlet/HelloWorld Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 9 Mittwoch, 1. November 2000 Implementierungshierarchie Interface Servlet Package javax.servlet abstrakte Klasse GenericServlet abstrakte Klasse HTTPServlet • allgemein für Client-Server-Architektur Package javax.servlet.http • Http Spezialisierungen MeinServlet Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 10 Mittwoch, 1. November 2000 Servlets und Cookies 1. Anfrage Client Antwort mit Cookie weitere Anfragen mit Session ID http://server:8080/servlet/MeinServlet Cookie: 0x1234ab Server Session ID: 0x1234ab user:“abed“ login at: “17:33“ ......... Session-Objekt •Cookie ist String Objekt (bei Servlets ID der Sitzung). •Cookie kann Informationen beliebiger Art über den Client aufnehmen und auf der lokalen Festplatte des Clients speichern. •Bei einem erneuten Aufruf des Servlets wird der Cookie wieder zurückgeliefert und kann vom Servlet ausgewertet werden. Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 11 Mittwoch, 1. November 2000 Server-Side Includes Webserver .shtml file request response Autor: Cornelius Wille Status: Entwurf <HTML> >HEAD> . </HEAD> <BODY> . <SERVLET CODE= Servlet1> </SERVLET> . </BODY> </HTML> OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Servlet1 Seite 12 Mittwoch, 1. November 2000 Verkettung von Servlets Webserver Server läßt alle Anfragen bezüglich einer URL alle Servlets der Kette durchlaufen. Kette wird nur bei Bedarf durchlaufen (on the fly) Beispiele: dynamisches Übersetzen des Textes einer HTML Seite in die Landessprache Filter mit verschiedenster Funktionalität Autor: Cornelius Wille Status: Entwurf request Servlet1 Servlet2 response OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Servlet3 Seite 13 Mittwoch, 1. November 2000 JavaServer Pages Webserver .jsp file request <HTML> >HEAD> . </HEAD> <BODY> . <%...............%> . </BODY> </HTML> Servlet1 response Autor: Cornelius Wille Status: Entwurf Java Compiler OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 14 Mittwoch, 1. November 2000 Servlets und Datenbanken Webserver Servlet Instanz request lokale Variable response request response request lokale Variable Connection Pool (bei init() erzeugt) Connection Connection Datenbank lokale Variable Connection response Connection Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 15 Mittwoch, 1. November 2000 Servlets im IVS Servlet Entwicklungsumgebung (JSDK) Webserver mit Servlet Erweiterung auf „freyr“ Projekte Counter der Webseiten der AG Volltextsuche über die Webseiten der AG Servlets zur Softwaremessung Autor: Cornelius Wille Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 16 Mittwoch, 1. November 2000