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 2: Datei lesen Browser 3: X.html Web-Server X.html + einfache Sprache (HTML) nur statische Informationen & Verknüpfungen GET http://www.fh-muenster.de:80/docs/welcome.html Methode Protokoll Server DSN + Port symbolischer Pfad Dokument Prof. Dr. Nikolaus Wulff 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-Gateway- Interface (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: Xout Web-Server 6: Xout 2: call X.class a: übersetzen + einfache Sprache (Java) + Dynamik HTML im Java-Code über out.println(... ) mit DB-Zugriffen usw. Servlet-Engine 5: Ausgabe DB X.class 4: X ausführen 3: Class Datei laden (einmal) Java-Compiler (javac) b: erzeugen X.class Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 6
Die Servlet Klassenhierarchie <<Interface>> ServletRequest (from serv let) service GenericServlet (from servl et) service() service <<Interface>> ServletResponse (from servl et) Request kapselt die Anfrage Response kapselt die Antwort <<Interface>> HttpServletRequest service HttpServlet doget() dopost() service <<Interface>> HttpServletResponse Session kapselt den Status 0..1 <<Interface>> HttpSession ServletException (from serv let) throws throws I OException (from io) PrintWriter (from io) 1 Prof. Dr. Nikolaus Wulff Web 2.0 Software-Architekturen 7
Eigene Servlets einbinden <<Int erface>> HttpServletRequest (from http) service HttpServlet (from http) doget() dopost() service <<Int erface>> HttpServletResponse (from http) 0..1 HTML-Page MyServlet as <<Int erface>> Response HttpSession (from http) doget() dopost() 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 Web- Container 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 : Kunde Browser 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