Web 2.0 Software-Architekturen Servlets als Controller einer MVC Web Architektur Prof. Dr. Nikolaus Wulff HTTP und HTML • Das HyperText TransferProtokoll (HTTP) beschreibt eine einfache verbindungslose Kommunikation, die auf TCP/IP basiert. • Die ausgetauschten Nachrichten sind mit der HyperText Markup Language (HTML) formatiert. • Ein Browser fordert mittels der HTTP GET Methode ein Dokument vom Webserver an, dieser schickt es dann an den Client zurück. © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 2 Standard HTML 1: get X.html Browser 3: X.html 2: Datei lesen Web-Server X.html + einfache Sprache (HTML) – nur statische Informationen & Verknüpfungen GET http://www.fh-muenster.de:80/docs/Welcome.html Methode Protokoll © Prof. Dr. Nikolaus Wulff Server DSN + Port symbolischer Pfad Dokument Web 2.0 Software-Architekturen 3 HTML und CGI-Bin • Die HTML Seiten sind statisch hinterlegt und erlauben es nicht ein interaktive Client/Server Anwendungen zu bauen. • Um mehr als nur Werbung in das WWW stellen zu können, benötigt man für e-Business so etwas wie „eine Bestellung aufgeben“ ... • Man behalf sich mit dem Common-GatewayInterface (CGI) um auf dem Server externe Prozesse aufzurufen, die dynamisch HTML generierten © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 4 Von CGI zu den Servlets • Externe Prozesse sind eine teure Ressource. Es fehlt die Integration in den Webserver. Sun entwickelte daher die Servlet API als PlugIn für den Webserver. • Anstatt als eigenständiger Prozeß laufen Servlets als Thread innerhalb der JVM. • HttpServlets kapseln die GET/POST Methoden von HTTP in der Java Umgebung. • Da Servlets in Java geschrieben sind stehen nun alle Möglichkeiten wie CORBA, EJB, JDBC, JMS etc. dem Webserver zur Verfügung. © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 5 Java-Servlets 1: get/post servlet/X X.java Browser 7: Web-Server Xout 6: Xout 2: call X.class Servlet-Engine + einfache Sprache (Java) + Dynamik – HTML im Java-Code über out.println(„...“) 5: Ausgabe 4: X ausführen Java-Compiler (javac) b: erzeugen X.class X.class mit DB-Zugriffen usw. DB © Prof. Dr. Nikolaus Wulff a: übersetzen Web 2.0 Software-Architekturen 3: Class Datei laden (einmal) 6 Die Servlet Klassenhierarchie <<Interface>> ServletRequest (from serv let) GenericServlet (from servl et) service service <<Interface>> ServletResponse (from ser vl et) service() Response kapselt die Antwort Request kapselt die Anfrage <<Interface>> HttpServletRequest Session kapselt den 0..1 Status <<Interface>> HttpSession © Prof. Dr. Nikolaus Wulff HttpServlet service service doGet() doPost() throws <<Interface>> HttpServletResponse throws 1 ServletException (from serv let) I OException (from io) Web 2.0 Software-Architekturen PrintWriter (from io) 7 Eigene Servlets einbinden <<Int erface>> HttpServletRequest (from http) HttpServlet (from http) service service doGet() doPost() 0..1 <<Int erface>> HttpSession (from http) MyServlet <<Int erface>> HttpServletResponse (from http) HTML-Page as Response doGet() doPos t() sql (from java) © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 8 Lebenslauf eines Servlets • Ein Client ruft ein Servlet per GET/POST auf. • Das Servlet wird vom Webserver geladen • Das Servlet wird einmalig innerhalb der init()Methode initialisiert, das Servlet kann nun z.B. – eine Datenbankverbindungen initialisieren, – einen EJB oder CORBA Server kontaktieren, etc. – Verwendet wird die ServletConfig des Web-Containers, parametrisiert innerhalb der web.xml. • Request- und Response Objekt werden vom WebContainer initialisiert. • Es wird die doGet oder doPost-Methode aufgerufen. © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 9 Lebenslauf eines Servlets (II) • Das Servlet schreibt seine Anwort in den Ausgabestrom des Response-Objekts. • Der Web-Container wertet den Response aus und schreibt die Antwort per HTTP an den Client. • Beim Herunterfahren der ServletEngine oder falls eine maximale Lebensdauer für das Servlet im Webserver definiert ist, wird die destroy()Methode des Servlets ausgeführt, um eventuelle Aufräumarbeiten auszuführen. © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 10 Servlet Sequenzdiagramm Browser : Kunde WebServer HttpRequest HttpServlet HttpResponse get servlet GET create create servi ce doGet read write © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 11 Infrastruktur • Damit ein Servlet in einem Web-Container läuft muss es in seine Umgebung kopiert werden. Dieser Vorgang heisst: • Deployment – physisches Kopieren aller Ressourcen in ein Verzeichnis oder Packen als WebArchive *.war – logisches Bekanntmachen per web.xml als Bestandteil einer Web-Applikation • Dies sind recht umständliche Schritte, die sich jedoch automatisieren lassen... © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 12 web.xml <?xml version="1.0" ?> <!DOCTYPE web-app PUBLIC "-//Sun ... <web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>de.lab4inf.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/Hello</url-pattern> </servlet-mapping> </web-app> • Bekannt machen eines Servlets in der »web.xml« unter dem symbolischen Pfad /Hello innerhalb der Web-Anwendung per dreifachem Mapping Pfad => Name => Klasse . © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 13 Architektonische Einordnung • Innerhalb einer Web Anwendung sind die Servlets bei einem MVC II Architektur der Controller Schicht zuzuordnen. • Sie nehmen Anfragen entgegen, delegieren an Modeloder Handlerklassen und generieren selbst keine HTML Ausgabe in den Ausgabestrom sondern delegieren dies z.B. an eine JSP als View. • Servlets sollten deshalb im Allgemeinen als stateless Services (aus Sicht des aufrufenden Web-Clients) implementiert werden. – Ein evtueller Client-State gehört in die HttpSession © Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 14