Enterprise Computing Prof. Dr.-Ing. Wilhelm G. Spruth WS 2010/11 Teil 9 Web Application Server HTTP Servlets Web Application Server Java Ausprägungen Es existieren unterschiedliche Asprägungen von Java, z.B. : Java Java Script Java Applet Java Servlet Java Server Pages Java Bean Enterprise Java Bean (EJB) Alle Ausprägungen von Java erzeugen nach ihrer Compilierung Java Byte Code, der auf einer JVM ausgeführt werden kann. Für Java Script trifft das nicht zu. Deshalb ist ein Java Script Programm auch kein Java Programm. Java Script hat mit Java außer einer ähnlichen Syntax nichts gemeinsam, trotz des (irreführenden) Namens. Emulator Auf einem Rechner mit der Hardware-Architektur x (Host) kann ein Rechner mit der HardwareArchitektur y (Gast) emuliert werden. Beispiele sind: Hercules und FLEX-ES emulieren einen zSeries Rechner mit dem z/OS Betriebssystem auf einem Intel/AMD Windows oder Linux Rechner. Microsoft VirtualPC emuliert einen Intel/AMD Windows Rechner auf einem (älterem) Apple MAC PowerPC Rechner.(Vorsicht, unter dem gleichen Namen gibt es ein weiteres aber unabhängiges Microsoft Produkt, welches ähnlich wie VMWare arbeitet. Bochs ist ein in C++ geschriebener Open Source Emulator, der die Intel/AMD Architektur auf vielen anderen Plattformen emuliert. Eine Java Virtual Machine wird heute fast immer durch eine Emulation auf einer Pentium, PowerPC oder System z Plattform usw. implementiert. Im Gegensatz zu anderen Emulatoren ist der Leistungsverlust bei der Emulation der JVM Architektur relativ klein, z.B. Faktor 3 im Vergleich zu einem Faktor 15 bei der Emulation der System z Architektur auf einem Intel Processor. Maschinensprache der Java Virtual Machine (JVM) Parallele Ausführung von Java Klassen in der Form von Java Threads Java Virtual Machine Betriebssystem Im Zusammenhamg mit Java ist eine neue Hardware Prozessor Architektur entwickelt worden, vergleichbar zur System z, PowerPC oder Pentium Architektur. Diese Architektur wird als Java Virtual Machine (JVM) Architektur bezeichnet. Wenn Java Quellcode für eine JVM kompiliert wird, entsteht Object Code für die JVM. Dieser Objekt Code wird als Byte Code bezeichnet. Ausführungen für Java in Hardware erfolgen auf speziellen Java-Prozessoren. Dies sind Mikroprozessoren, die Java-Bytecode als Maschinensprache verwenden. Sie wurden jedoch nie in größeren Stückzahlen gebaut. Statt dessen werden JVMs auf anderen Rechner Plattformen emuliert. Die JVM ist ein Emulator, vergleichbar mit Hercules oder XEN. Cobol, PL/1, C++ Java Quellcode Compiler MaschinenCode Java Programmausführung Quellcode Compiler Java Byte Code Interpreter JIT Interpreter MaschinenCode Cobol, PL/1 oder C++ Quell Code wird durch einen optimising Compiler in Object Code übersetzt, aus dem nach dem Linking und Loading ausführbarer Maschinencode entsteht. Bei Java erzeugt der Compiler statt dessen Plattform-unabhängigen Byte Code, der anschließend in einer JVM durch einen Interpreter oder just-intime Compiler ausgeführt wird. Die JVM selbst ist plattformabhängig. Sie ist typischerweise in C++ implementiert. Optimizing Compiler erzeugen für die Ausführung besonders schnellen Maschinencode. Interpreter und Just in Time Compiler (JIT) sind in der Regel deutlich langsamer. Java Source Code System z Object Code System z Hardware Byte Code JVM Unter System z ist die Ausführung sowohl als System zObject Code als auch als Byte Code möglich. In der großen Mehrzahl der Fälle wird die Ausführung als Byte Code gewählt. Browser http Server z.B. Apache statische HTML Pages Statische HTML Pages z.B. Google HTML Forms In vielen Fällen ist es wünschendwert, beim Aufruf einer URL zusätzlich Daten an den Server zu senden, die von einem dortigen Programm benutzt werden, um eine Antwort mit dynamischer Information zu erzeugen. HTML Forms sind ein einfache Werkzeuge, mit dem ein Benutzer Daten mit Hilfe des HTTP-Protokolls an einen Server schicken kann. Ein HTML-Form besteht aus einem Code-Block, der mit dem <FORM> Tag anfängt und dem </FORM> Tag aufhört. Eine HTML-Seite kann mehrere Forms enthalten. Der FORM Tag spezifiziert: • Die zu benutzende HTTP-Methode. In den meisten Fällen ist dies POST; die Daten werden innerhalb des Bodys der Nachricht übertragen. • Die Action. Dies ist meistens die URL, es kann aber auch die Action mit ihrem Namen angegeben werden. • Der Typ der MIME-Enkodierung der Daten in der FORM. Der Default ist "application/x-www-formencoded". HTML Forms Beispiel Screen Der Web Server hat soeben die hier dargestellte HTML Seite gesendet. Nach Eingabe in die Felder Username und Password, sowie klick auf den Submit Button wird eine Get oder Post Nachricht mit den eingegebenen Parametern an den Web Server gesendet: Die hier dargestellte Wiedergabe auf einer HTML Seite erwartet eine Eingabe seitens des Benutzers in den hiefür vorgesehenen Feldern. Die Darstellung wird mit Hilfe eines Form Tags innerhalb des HTML Codes programmiert. Der Code auf der folgenden Seite stellt dies dar. Login to Secure Site Username: Password: Submit Clear < FORM METHOD=POST ACTION="http://abc.de/servlet/xyz.servlet" > Username: <INPUT TYPE="TEXT" NAME="username" SIZE="25"><BR> Password: <INPUT TYPE="PASSWORD" NAME="password" SIZE="25"><P> <INPUT TYPE="SUBMIT" VALUE="Submit"> <INPUT TYPE="RESET" VALUE="Clear"> </FORM> <HTML> <HEAD><TITLE> Login </TITLE> </HEAD> <BODY> <H2>Login to Secure Site</H2> Der FORM Tag spezifiziert: < FORM METHOD=POST ACTION="http://abc.de/servlet/xyz.servlet" > Username: <INPUT TYPE="TEXT" NAME="username" SIZE="25"><BR> Password: <INPUT TYPE="PASSWORD" NAME="password" SIZE="25"><P> <INPUT TYPE="SUBMIT" VALUE="Submit"> <INPUT TYPE="RESET" VALUE="Clear"> </FORM> • Die zu benutzende HTTPMethode. Hier ist dies POST; die Daten werden innerhalb des Bodys der Nachricht übertragen. • Die Action. Dies ist meistens die URL, es kann aber auch die Action mit ihrem Namen angegeben werden. • Der Typ der MIME-Enkodierung der Daten in der FORM. Der Default ist "application/x-wwwform-encoded". </BODY> </HTML> HTML Forms HTTP Servlets Web Application Server HTTP HTML WEB Server CGI oder Servlet Programm (WEB) Application Server SQL Datenbank Server Browser Dynamischer WEB Seiten Inhalt (1) Alternativen: • CGI • Java Servlet. Ausführung eines CGI Programms unter z/OS Unix System Services Servlets Ein Applet Tag , z.B. <APPLET CODE="HelloApplet.class"></APPLET> in einer HTML-Seite bewirkt das Herunterladen des Applet Byte Codes vom Server auf den Klienten, wo der Code ausgeführt wird. Ein Servlet Tag , z.B. <SERVLET CODE="HelloServlet"></SERVLET> in einer HTML-Seite wird auf dem Server ausgeführt. HTML WEB Browser WEB Browser JDBC WEB Server Java Servlet SQL WEB Browser (WEB) Application Server Datenbank Server the HTML code <FORM METHOD=GET ACTION="/servlet/HelloWorld"> will always invoke a servlet named HelloWorld -- provided, of course, that (1) the Web server being used supports servlets and (2) a "Hello World" a servlet actually exists in the directory in which servlets are stored on your Web server. Servlet Container Servlets laufen in einer Servlet-spezifischen Laufzeitumgebung, die auch als Container oder Servlet Engine bezeichnet wird. Diese verbessert u.a. die Servlet-Ausführungszeit und stellen dem Programmierer vorgefertigte Strukturen zur Verfügung. Servlet Container haben keine Transactions-, Persistence- und Sicherheitseigenschaften. Ein Servlet Container ist ein Programm, das Requests für Servlets und Java Server Pages (JSP) behandelt. Der Servlet Container ist verantwortlich für: • • • • Erstellung von Servlet-Instanzen, Initialisierung von Servlets, Dispatching von Requests, Verwaltung des Servlet-Kontextes für die Nutzung durch die Web-Anwendungen. Eine Java Klasse erbt mit Hilfe von „extends HttpServlet“ die Servlet Eigenschaften. public class HalloWeltServlet extends HttpServlet { public final static String message = "<html>\n" + "<head><title>Hallo Welt</title></head>\n" + "<body>\n" + "<h1>Hallo Welt</h1>\n" + "</body></html>\n"; public void init() { System.out.println("In HalloWeltServlet init"); } public void destroy() { System.out.println("In HalloWeltServlet destroy"); } Beispiel: HalloWeltServlet.java Die Methode service ist für die Bearbeitung des Servlet Aufrufs zuständig. public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); out.println(message); } } Java Server Pages (JSP) Java Server Pages sind in der Java Programmiersprache geschrieben. Eine JSP ist in Wirklichkeit eine andere Darstellungsform eines Servlets. JSPs benutzen XML-artige Tags und Scriplets um die Logik zu kapseln, die den Inhalt der Seite generiert. Alternativ kann die Anwendungslogik woanders liegen, und die Java Server Page greift hierauf mit den Tags und Scriplets zu. Dies ermöglicht eine Trennung der Seiten-Logik vom Seitenentwurf und der Seitenwiedergabe. Einfache Java Server Page (1) Java Server Pages sind im Aufbau vergleichbar mit HTML-Dokumenten. Sie bestehen jedoch aus zwei Teilen, einem HTML – Text sowie beliebig vielen, darin eingebetteten Anweisungen an den JSP – Server . Den folgenden Text in einer Datei mit der .jsp extension im JSP directory speichern und mit einem Browser ansehen: <html> <head> <title>JSP Example </title> </head> <body> Hello! The time is now <%= new java.util.Date() %> </body> </html> Die Zeichenfolgen <%= und %> schließen Java Epressions ein. Diese werden zur Run Time ausgewertet. Bei jedem Reload der HTML Seite in den Browser wird die gültige Zeit wiedergegeben.Normalerweise enthält ein JSP Programm eine komplexere Präsentationslogik, z.V. in der Form eines Scriplets. http://www.jsptut.com/ JSP Scriptlet Eine JSP Scriptlet hat folgende Form: <% Java Code %> Dies ergibt die Möglichkeit, kompliziertere Ausdrücke auszuwerten und mit out.println an den Outstream zu übergeben. Diese Variante ermöglicht arbiträren Code einzufügen, wie zum Beispiel Anbindung an Datenbanken und andere aufwendigere Zugriffe. Alle in Java verwendbaren Konstrukte können hier verwendet werden. Beispiel: <% String queryData = request.getQueryString(); Out.println(“Attached GET Data: “ + queryData); %> Eine normale URL ruft eine HTML Seite auf. Beispiel www.xxx.yyy/index.html Statt dessen ist es möglich, ein Servlet direkt aufzurufen www.xxx.yyy/Servlet oder auch eine Java Server Page www.xxx.yyy/jsp Web Server Servlet Container Browser Interaktion Servlet JSP Request Servlet Call Page In der Praxis ist es eher selten, dass eine JSP direkt aufgerufen wird. Response Java Server Page Web Application Server In der Regel wird ein Servlet aufgerufen, welches wiederum eine JSP aufruft. HTTP Servlets Web Application Server Web Application Server Plattform für die Ausführung von Java Servlets, Java Server Pages und EJBs BEA Web Logic IBM WebSphere verfügbar auf allen Plattformen Windows, Unix, Linux, z/OS Deutlich mehr als die Hälfte aller in der Wirtschaft eingesetzten Web Application Server. Verwenden die Firmen-eigenen Transaktionsmonitore: Tuxedo, CICS Der SAP Netweaver Web Application Server wird in der Regel in Verbindung mit SAP Software Komponenten eingesetzt. Microsoft Dotnet Alternative Während Web Application Server ursprünglich nur Java Code verarbeiten konnten, werden heute alle gängigen Programmiersprachen unterstützt, spezifisch also auch Cobol, PL/1 und C++ . Web Application Server Open Source Web Application Server sind: • Tomcat (nur Servlets) • Geronimo der Apache Foundation Pseudo-Open Source : • JBOSS JBOSS und Geronimo liegen bezüglich ihrer Funktionalität weit hinter WebLogik, WebSpere oder Netweaver zurück. Presentation Business Logik DatenbankProzeß z.B. Oracle, DB2 AnwendungsProzess PC Registrierkasse Geldausgabeautomat Web Application Server Business Logic (Anwendungslogik) verarbeitet die Eingabedaten des Endbenutzers und erzeugt Ausgabedaten für den Endbenutzer, z.B. in der Form einer wenig strukturierten Zeichenkette (oft als „Unit Record“ bezeichnet. Präsentationslogik ist der Teil, in dem die Ergebnisse der Berechnungen so aufgearbeitet werden, daß sie dem Benutzer in einer ansprechenden Art auf dem Bildschirm dargestellt werden können. Präsentations- Logik formt die rohen Ausgabedaten in eine für den Endbenutzer gefällige Form um, z.B. in Form einer grafischen Darstellung. Java Beans Unter Java Beans versteht man kleine Java-Programme (Klassen) mit festgelegten Konventionen für die Schnittstellen, die eine Wiederverwendung in mehreren Anwendungen (Applikationen, Servlets und Applets) ermöglichen, ähnlich wie bei Unterprogramm-Bibliotheken in anderen Programmiersprachen. Dies ist vor allem im Hinblick auf das Software-Engineering von komplexen Programmsystemen interessant. Dafür gibt es ein eigenes Beans Development Kit BDK, das man zusätzlich zum JDK installieren kann, und ein Package java.beans, das ab Version 1.1 im JDK enthalten ist, JavaBeans sind ein Objektorientiertes Java Komponenten Modell, JavaBeans sind Java binary parts. Sie werden häufig für visuelle Komponenten eingesetzt (etwa Buttons und Scrollbalken) Hauptmerkmale der Java Beans sind: • • • • • Properties (Eigenschaften, z.B. get und set) Methoden und Events (Ereignisse) Namens Konventionen Introspection (BeanInfo Klasse) Java Beans Komponenten Modell Der Java Beans Komponenten Modell Teil des JDK Lieferumfangs unterstützt: • • • • • • • • • Sicherheit (benutzt den Java Security Manager) Versionsmanagement Life-Cycle Management Event Notification, Configuration und Property management Scripting Meta-Daten und Introspection Persistenz (über Serialisierung) Benutzbarkeit (die „BeanBox“ des JDK ist ein Prototyp einer grafischen Umgebung für das Zusammensetzen von Beans) • Eigeninstallation(über Java Archiv Files) Für unternehmensweite Anwendungen (Enterprise Applications) fehlen jedoch Schlüsseleigenschaften, z.B Transaktionsdienste, Namensdienste und Sicherheitsdienste. Werden JavaBeans hiermit angereichert, spricht man von Enterprise JavaBeans. Browser HTML Page (Form ) Web Application Server Servlet call HTML Page (Ergebnis) JSP prepare Bean Bean DB2 access Bean Nutzung von Java Beans Ein Servlet ist ein Java Programm, das Bildschirm Output in der Form einer HTML Datei produziert. Eine JAVAServerPage ist eine HTML Seite mit zusätzlichen JSP Tags. Wird eine JSP Seite aufgerufen, so kompiliert sie ein JSP Übersetzer in ein Servlet. In der Praxis: Servlets und JSP werden von verschiedenen Leuten erstellt (Model-View-Controller Ansatz). Eine JSP ist zwar eine vollwertige Java Komponente, aber der Java Code Anteil innerhalb der JSP wird in der Regel auf ein Minimum reduziert. Es existieren (wie für HTML Seiten) spezielle Werkzeuge für das Erstellen von JSP´s, die das Handcoding von HTML Statements automatisieren. Architektur einer JSP Web Anwendung Erläuterung siehe unten Model - View - Controller Ansatz 1. HTML page: static or dynamic HTML page, created from a previous step, contains one or multiple forms that invoke a servlet for processing of the next interaction. 2. Servlet gets control from the Application Server to perform validation and control of flow; sets up and calls command beans that perform the business logic. 3. Command beans control the processing of the business logic; logic may be imbedded in the command bean, or it can be delegated to back-end or enterprise systems, such as relational databases, transactions systems (CICS, MQSeries, IMS, and so forth); command bean may perform one specific function or it may contain many methods, each for a specific task (task wrappers). Command beans invoke database and transaction systems using „connectors“. 4. Results of command beans (or back-end systems) processing are stored in data beans. Data beans could contain an SQL result or a CICS communication area. 5. View beans provide the contract between the output producing JSPs and the data beans that contain the dynamic data to be displayed in the output; servlet initializes the view beans and registers them with the request block so that the JSPs can find them. 6. Servlet calls a JSP for output processing and formatting depending on the results of the command beans; JSPs generate the output for the browser. 7. JSP use tags to declare the view beans and get access to all the dynamic data that must be displayed in the output. 8. View beans contain one or multiple data beans and provides tailored methods so that the JSP has access to the data stored in the data beans; data beans may not provide the necessary methods for a JSP to access the data. 9. JSP assembles the output and sends it back to the browser as an HTML page with dynamic data; in many cases, that output again contains form(s) to enable the user to continue the dialog with the application. Servlet is the controller Command beans provide the model JSP is the view