Enterprise Computing Prof. Dr.-Ing. Wilhelm G. Spruth Teil 11 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 platform-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 Byte Code System z Hardware 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. Das HTML Programm einer Web Seite kann eingebetteten Java Code enthalten. Dieser wird von der JVM des Browsers interpretiert und ausgeführt. Damit ist es z.B. möglich, Bewegungsabläufe in dem Browser Fenster darzustellen. HTML WEB Browser WEB Browser Ein Java Applet ist eine Java Klasse, die von einem Web Server herunter geladen wird, und von dem Browser des Klienten ausgeführt wird. WEB Server Mainframe Installationen setzen Java Applets nur zögernd un ungerne ein. WEB Browser Java und der Web Browser HTML Seiten werden zum Web Browser mit Hilfe des HTTP Protokolls übertragen. Erlaubt die Übertragung selbstbeschreibender Daten. Bei jeder Verbindungsaufnahme müssen Datenformate neu ausgehandelt werden. Beispiele für Schicht 5 Protokolle sind: Telnet, FTP, 3270, HTTP, SOAP, IIOP, RMI/JRMP, .... 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 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". Beispiel Screen Der Web Server hat soeben die nebenstehend 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. <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 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. 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> Hier ein weiteres Beispiel. Mit Hilfe von Form Tags lassen sich relativ komplexe Eingabeseiten darstellen, die im Browser dargestellt werden und mit Hilfe des http Protokolls an einen Webserver (z.B. Apache) übertragen werden. Die oben dargestellte Seite wird mit dem folgenden HTML Code dargestellt: PostForm.html, Teil 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>A Sample FORM using POST</TITLE> </HEAD> <BODY BGCOLOR="#FDF5E6"> <H1 ALIGN="CENTER">A Sample FORM using POST</H1> PostForm.html, Teil 2 <BODY BGCOLOR="#FDF5E6"> <H1 ALIGN="CENTER">A Sample FORM using POST</H1> <FORM ACTION="/servlet/hall.ShowParameters" METHOD="POST"> Item Number: <INPUT TYPE="TEXT" NAME="itemNum"><BR> Quantity: <INPUT TYPE="TEXT" NAME="quantity"><BR> Price Each: <INPUT TYPE="TEXT" NAME="price" VALUE="$"><BR> <HR> First Name: <INPUT TYPE="TEXT" NAME="firstName"><BR> Last Name: <INPUT TYPE="TEXT" NAME="lastName"><BR> Middle Initial: <INPUT TYPE="TEXT" NAME="initial"><BR> Shipping Address: <TEXTAREA NAME="address" ROWS=3 COLS=40></TEXTAREA><BR> PostForm.html, Teil 3 Credit Card:<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Visa">Visa<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Master Card">Master Card<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Amex">American Express<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Discover">Discover<BR> <INPUT TYPE="RADIO" NAME="cardType" VALUE="Java SmartCard">Java SmartCard<BR> Credit Card Number: <INPUT TYPE="PASSWORD" NAME="cardNum"><BR> Repeat Credit Card Number: <INPUT TYPE="PASSWORD" NAME="cardNum"><BR><BR> <CENTER> <INPUT TYPE="SUBMIT" VALUE="Submit Order"> </CENTER> </FORM> </BODY> </HTML> HTTP Servlets Web Application Server HTTP HTML WEB Browser WEB Browser WEB Server CGI oder Servlet Programm SQL WEB Browser (WEB) Application Server Datenbank Server Dynamischer WEB Seiten Inhalt (1) Der Web Browser kommuniziert mit dem Web Server über das HyperText Transfer Protokoll (HTTP). HTTP ist das ursprüngliche Transport Protocol für das World Wide Web. Auf der Server Seite existiert ein Programm, welches aufgerufen wird und die übertragenen Daten verarbeitet. Dieses kann z.B. Daten aus einer z/OS DB2 Datenbank verwenden, um eine dynamische HTML Seite zu erstellen. Hierfür existieren mehrere Alternativen. Die wichtigsten sind: • CGI • Java Servlet. Common Gateway Interface (CGI) Mit Hilfe einer URL greift ein Browser Klient auf einen Web Server zu. Der Web Server holt die angeforderte Web Seite aus seinem Plattenspeicher und sendet sie an den Klienten. Im einfachsten Fall ist diese Seite statisch, d.h. ihr Inhalt ändert sich nie. Wird ein CGI Programm durch eine URL aufgerufen, so generiert dieses dynamische Seiten in Echtzeit, z.B. indem ein Teil der wiedergegebenen Information aus einer SQL Datenbank abgefragt wird. Die Ausgabe geht in der Regel direkt an den Klienten. Ein CGI Programm kann von innerhalb einer HTML Seite mit Hilfe des „FORM“ tags aufgerufen werden: < FORM METHOD=„POST“ Action=„/cgi-bin/xyz.cgi“ > ........ </FORM> In diesem Fall kann das CGI Programm Eingabedaten übernehmen, die innerhalb des FORM Tags eingegeben wurden. Damit kann sehr dynamischer Web Seiten Inhalt generiert werden. CGI Programme können in allen auf dem Server verfügbaren Sprachen implementiert werden, z.B. PHP, C/C++, PERL, TCL/CK, Unix Shell Scrip, Visual Basic, REXX, Java, andere. Ausführung eines CGi Programms unter z/OS Unix System Services Beispiel: Ein FORM Tag innerhalb einer HTML Seite ruft ein REXX Programm auf einem Web Server auf, das unter Unix System Serves und z/OS läuft. Dieses ruft wiederum ein weiteres REXX Programm unter TSO auf. Java im Web-Server (CGI, Servlets) CGI-Programme können in jeder beliebigen Programmier- oder Script-Sprache geschrieben werden, auch in Java. In diesem Fall besteht das CGI-Programm aus einem Shell-Script (Batch-Datei), in dem 1. die Java Virtual Machine aufgerufen wird, 2. die den Bytecode der Java-Applikation interpretiert, etwa in einer der folgenden Formen: java Classname java Classname Parameter java -Dvariable=wert Classname Dies bedeutet, dass bei jedem Aufruf des CGI-Programms die Java Virtual Machine neu gestartet werden muss, was eventuell zu längeren Wartezeiten führen kann. Servlet statt CGI Diesen Nachteil kann man vermeiden, wenn man einen Web-Server verwendet, der die Java Virtual Machine integriert enthält und Java-Programme sofort direkt aufrufen kann (z.B. die neueren Versionen von Apache, Netscape Enterprise Server, Lotus Web Server, und vielen anderen). Diese Java-Programme werden als Servlets bezeichnet. Der Name "Servlet" ist analog zu "Applet" gebildet: So wie Applets von einer Java Virtual Machine innerhalb des WebBrowsers ausgeführt werden, so werden Servlets von einer Java Virtual Machine innerhalb des Web-Servers ausgeführt. Dafür gibt es die Packages javax.servlet und javax.servlet.http sowie ein Java Servlet Development Kit JSDK mit einem ServletRunner zum Testen von Servlets, bevor sie im echten Web-Server eingebaut werden. Servlets (1) 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. Servlets (2) Java Servlets sind normale Java-Klassen, die auf einem Server innerhalb einer standardisierten Laufzeit-Umgebung, der "Servlet Engine" oder des "Servlet Containers", ablaufen. Der Servlet Container beinhaltet eine normale Java Virtuelle Maschine. o Servlets sind vollwertige Java-Programme; sie verfügen über alle Java APIs, einschließlich JDBC (Java Data Base Connectivity) und SQLJ. Ein Applet kann auf keine Server-seitigen Daten zugreifen. o Im Gegensatz zu CGI erfordert das Java Servlet nur "Light Weight Context Switches". Daraus resultiert ein deutlich besseres Leistungsverhalten. o Da das Servlet im Hauptspeicher verbleibt, können Verbindungen (Connections) zur Datenbank offen gehalten werden. Ein Servlet kann einen gemeinsamen Vorrat an Datenbankverbindungen verwalten, und diesen je nach Bedarf einzelnen ConcurrentBenutzern zuordnen. o Leistungsfähiges Fehler- und Type-Checking. HTML WEB Browser WEB Browser JDBC WEB Server Java Servlet SQL WEB Browser (WEB) Application Server Datenbank Server Dynamischer WEB Seiten Inhalt (2) Im Gegensatz zu CGI erfordert das Java Servlet nur light weight Context Switches. Daher deutlich besseres Leistungsverhalten. Servlets verfügen über alle Java API´s, einschließlich JDBC (Java Data Base Connectivity). Java Server Pages (JSP) sind eine Erweiterung der Servlet API. Verwenden in Java geschriebene XML ähnliche Tags und Scriplets. Ein Aufruf des Servlets durch eine HTML Seite könnte wie folgt aussehen: <HTML> <HEAD> <TITLE>A Simple Servlet Program</TITLE> </HEAD> <BODY> The current date and time is:<br> <SERVLET CODE=Servlet01> </SERVLET> <BR> The date and time in 120 days will be:<br> <SERVLET CODE=Servlet01> <PARAM NAME=days VALUE=120> </SERVLET> </BODY> </HTML> und dieses Ergebnis produzieren: The current date and time is: 07-Jan-06 6:53:12 PM The date and time in 120 days will be: 07-May-06 7:53:12 PM 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. Web Server Servlet Container Prozess Servlet Instanzen Thread 1 Servlet Instanz Thread 2 Web Application Server Servlet Instanzen und Threads Es existiert nur eine einzige Instanz des Servlets. Das Servlet verfügt über mehrfache Threads in der JVM, die mehrere Klienten Requests gleichzeitig befriedigen können. Servlets werden dynamisch geladen, wenn sie erstmalig angefordert werden, oder statisch geladen beim Hochfahren des Servlet Containers. FF..FF Servlet Ansatz CGI Main Thread CGI Request 1 Thread CGI Request 2 Thread CGI Request 3 Thread andere Prozesse Kernel 00..00 CGI Ansatz T h r e a d T h r e a d 1 2 3 andere Prozesse Ein Servlet kann einen Pool von Data Base Connections verwalten und eine Data Base Connection über Zugriffsgrenzen aufrechterhalten. Servlet Engine Kernel OO..OO Ein Servlet kann mit Hilfe von Threads innerhalb der gleichen JVM mehrere Anfragen parallel bearbeiten. Ein Servlet kann über ein Session Objekt verfügen, welches Session Information über mehrfache Zugriffe verwaltet FF..FF T h r e a d CGI Programme laufen typischerweise in getrennten Adressenräumen. 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. import java.io.*; import javax.servlet.*; import javax.servlet.http.*; 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"); } public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); out.println(message); } } Beispiel: HalloWeltServlet.java Die Methode service ist für die Bearbeitung des Servlet Aufrufs zuständig. Servlet Life Cycle Dargestellt ist der Lebenszyklus eines Servlets. Das Servlett wird gestartet, der Code wird in die JVM geladen und initialisiert. Danach ist das Servlet in der Lage, Anfragen entgegenzunehmen und zu beantworten. Wenn nicht mehr benötigt, wird das Servlet destroyed. Servlet (1) Ein Servlet besitzt einen genau definierten Lebenszyklus, dessen Ablauf vom Servlet Container gesteuert und überwacht wird. Im wesentlichen wird dieser Zyklus durch die Methoden des API ausgedrückt. Dabei muss jedes Servlet das javax.servlet.Servlet Interface direkt, oder indirekt über die abstrakten Klassen GenericServlet oder HttpServlet, implementiert haben. Die 3 wichtigsten Methoden dieser Interfaces sind: •init() •service() •destroy() Wird ein Servlet benötigt, welches noch nie verwendet wurde, so muss dieses vom Servletc zuerst referenziert werden. Das heißt, der Container lädt das Servlet dynamisch in den Speicher. Dabei gibt es zwei Varianten, wann ein Servlet geladen wird. 1. Das Servlet wird beim Starten des Servers schon geladen und steht von Beginn an im Speicher zur Verfügung. 2. Der Servlet – Container lädt das Servlet in den Speicher wenn eine HTTP – Anfrage an eine URL gestellt wird. Dieser weiß, welches Servlet an diese URL gebunden ist und lädt das entsprechende Servlet. Dieser Vorgang wird jedoch nur bei der ersten Anfrage durchgeführt. Bevor ein Servlet für die Verwendung zur Verfügung steht, muss es initialisiert werden. Dies geschieht mit der Methode init(). Dabei wird dem Servlet ein Objekt von Typ ServletConfig übergeben. Mit diesem Objekt kann das Servlet per Name auf Initialisierungsdaten der Webapplikation zugreifen. Konnte das Servlet ordnungsgemäß initialisiert werden, steht es nun bereit, einen HTTP – Request entgegenzunehmen. Damit dies geschehen kann, wird vom Servlet Container die Methode service() aufgerufen. Dieser Methode wird das HTTP Request – Objekt und das HTTP Response – Objekt als Parameter übergeben. Ein Servlet kann während der Bearbeitung einer Anfrage entweder eine ServletException oder eine UnavailableException verursachen. Servlet (2) Eine ServletException tritt dann auf, wenn ein Fehler bei der Bearbeitung der HTTP – Anfrage aufgetreten ist. Der Servlet Container hat nun zu entscheiden, ob die Verarbeitung eines Request abgebrochen oder erneut gestartet wird. Eine UnavailableException signalisiert, dass das Servlet im Moment nicht in der Lage ist einen HTTP-Request entgegen zu nehmen. Dabei unterscheidet man zwischen 2 Varianten, permanent und vorübergehend. Bei der ersten Variante ist ein Fehler aufgetreten, der es für das Servlet unmöglich macht jemals wieder einen HTTP – Request zu bearbeiten. Der Servlet Container hat nun die Aufgabe die Methode service() zu beenden und das Servlet aus dem Adreßraum zu entfernen. Im zweiten Fall wird dem Servlet Container gezeigt, dass er für die Zeit dieses Zustandes dem Servlet keine Anfrage mehr zuordnen soll. Jeder Request der in dieser Zeit abgelehnt wird, muss mit einem SERVICE UNAVAILABLE (503) Response beantwortet werden. Bevor ein Servlet aus dem Adressraum entfernt werden soll, muss vorher die Methode destroy() auf-gerufen werden. Diese Methode gibt dem Servlet die Chance alle Ressourcen, die vom Servlet genutzt wurden, frei zu gehen. Dabei kann es sich zum Beispiel um Datenbankverbindungen oder Hintergrund Threads handeln. Nachdem alle Aufräumarbeiten beendet worden sind, kann der Speicherbereich freigegeben werden und die Referenz auf das Servlet fallen gelassen werden. Trotz der ausgesprochen guten Fähigkeiten der Servlets, gibt es dennoch ein herausragendes Defizit. Servlets genügen leider nicht der Anforderung Information und Darstellung ordentlich zu trennen. Darum war man bestrebt, eine Technologie, aufbauend auf Servlets, zu entwickeln, die diese Vorgabe gerecht wird. Aus diesen Überlegungen heraus entstanden JSPs mit ihren Tag – Libraries. 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 Scripletsum 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. Java Server Pages JSP 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 . Zum Einfügen von JSP – Anweisungen dienen spezielle Tags, die den aus HTML bekannten Tags gleichen. HTML – Tags behalten ihre normale Funktion und dienen auch hier dem Formatieren des anzuzeigenden Dokuments. Im Gegensatz zu HTML – Tags haben JSP – Tags nicht immer direkten Einfluss auf die Ausgabe. Sie werden nicht zum Client gesandt und machen sich nur durch Seiteneffekte serverseitig ausgeführter Aktionen bemerkbar. Der Hauptzweck dieser Aktionen besteht im Allgemeinen in der Umsetzung einer Anwendungslogik. Zu den am häufigsten benötigten Aktionen gehören Datenbankoperationen, wie das Auslesen oder Einfügen von Datensätzen oder die Prüfung von Zugangsberechtigungen. Um Wünsche des Benutzers berücksichtigen zu können, ist es für ein serverseitig ausgeführtes Programm notwendig, Daten vom Client zu erhalten. Die zur Datenaufnahme notwendige Funktionalität wird bereits durch die Seitenbeschreibungssprache HTML zur Verfügung gestellt. Anfragen aus HTML - Dokumenten heraus können mit Hilfe von Formularen generiert werden. Das dazu verwendete <form> – Tag erhält als Zielanwendung die URL einer JSP – Anwendung. Diese kann wiederum alle im Formular enthaltenen Daten direkt übernehmen, verarbeiten und daraus eine passende Antwort generieren. Einfache Java Server Page (1) 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 dieses Java Programm eine komplexere Präsentationslogik. http://www.jsptut.com/ Web Server JSP Request HTML + Quellcode JSP Parser Java Quellcode Eine Java Server Page ist in Wirklichkeit lediglich eine andere Darstellungsform eines Servlets. Beim Aufruf einer JSP extrahiert ein Parser den Java Code aus der JSP. Result Web Page (HTML) JSP Servlet Java Compiler Dieser wird anschließend wie ein Servlet behandelt und ausgeführt. Java Server Page (JSP) 1. Der Web Browser sendet eine Request an die JSP Seite. 2. Die JSP Engine parses den Inhalt der JSP File. Sie erstellt temporären Servlet Quellcode basierend auf dem Inhalt der JSP. 3. Der Servlet Quellcode wird durch den Java Compiler in eine Servlet Class File übersetzt. 4. Das Servlet wird instantiated. Die init and service Methoden des Servlets werden aufgerufen; die Servlet Logic wird ausgeführt. 5. Die Kombination von statischem HTML, kombiniert mit den dynamischen Elementen spezifiziert in der ursprünglichen JSP Definition, geht an den Web Browser zurück durch den Output Stream des Servlet Response Objektes. Web Server Servlet Container Browser Interaktion Servlet - JSP Request Servlet Call Page Response Java Server Page Web Application Server In der Praxis ist es eher selten, dass eine JSP direkt aufgerufen wird. In der Regel wird ein Servlet aufgerufen, welches wiederum eine JSP aufruft. 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 HTTP Servlets Web Application Server The Application Server was originally thought of as an extension to a Web server, consisting of 2 main components: • A plugin for the Web server (HTTP Server) that will pass the request to the actual Application Server, and • The Application Server itself • Web Server plugin usually runs as a separate process either on the same machine as the web server or on a different machine. • Application Server uses a Java environment to run the executables. • Needs a Java runtime environment (JRE) or Software Development kit (SDK) • Key element is Java virtual machine (JVM), the interpretive runtime. • The Application Server runs components as threads in the Application Server. HTTP Server plugin • This plugin is usually a .dll or .so file • It is included in the webserver's configuration file as a plugin (Service statement on z/OS) • It usually has it's own configuration, located in a file or some other location. • It runs just like an API application in the HTTP server, but the vendor you get it from should support any problems. • Performs some very specific functions for the Application Server, as an example 1. Load balancing across multiple Application Servers 2. Enforcing Server affinity 3. Routing requests based on URL Web Application Server Plattform für die Ausführung von Java Servlets, Java Server Pages und EJBs BEA Web Logic verfügbar auf allen Plattformen Windows, Unix, Linux, z/OS IBM WebSphere 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 Public Domain Web Application Server sind: • JBOSS, Tomcat (Produkte von Red Head) • Geronimo der Apache Foundation JBOSS und Geronimo liegen bezüglich ihrer Funktionalität weit hinter WebLogik, WebSpere oder Netweaver. Präsentation Logik Business Logic DatenbankProzess z.B. Oracle, DB2 AnwendungsProzess PC Registrierkasse Geldausgabeautomat Web Application Server Web Application Server sind Software Produkte, die eine Laufzeitumgebung für Anwendungsprozesse zur Verfügung stellen. Sie unterstützen Techniken wie CORBA, HTTP, Enterprise Java Beans (EJB) und Programmiersprachen wie Java, Perl, C++ und fassen mehrere, bisher getrennt erhältliche Middleware–Produkte, zu einem Paket zusammen. Web Application Server bieten dem Systemadministrator eine integrierte Bedienoberfläche, mit der die verschiedenen und Services installiert und verwaltet werden können. Durch die Zusammenfassung mehrerer bisher getrennter Middleware – Funktionalitäten bilden Application Server das Bindeglied zwischen den Clients auf der einen Seite, die über HTTP und/oder IIOP mit dem Web Application Server kommunizieren, und der Datenbank auf der anderen Seite, mit der der Web Application Server mit Hilfe proprietärer Datenbankschnittstellen oder offener Standards wie ODBC / JDBC kommuniziert. Web Application Server Ein sauber strukturierter Anwendungsprozess besteht aus zwei Teilen: 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. Business Logik ist der Teil, in dem Berechnungen erfolgen und Daten in einer Datenbank gelesen/geschrieben werden. Business Logik wird in Sprachen wie C, C++, COBOL, PL/1, Java usw. geschrieben. 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. Unterschiedliche Klienten können die gleiche Busiess Logik benutzen um mit unterschiedlicher Präsentationslogik die Ausgabedaten unterschiedlich darzustellen. Für die Präsentations - Logik gibt es viele Möglichkeiten. Die modernste Alternative benutzt Java Server Pages und einen Web Application Server um den Bildschirminhalt innerhalb eines Web Browsers darzustellen. Die älteste (und einfachste) Alternative verwendet das CICS BMS (Basic Mapping Support) Subsystem. BMS Programme werden in der BMS Sprache geschrieben. Java Beans Unter Java Beans ("Kaffeebohnen") 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. Controller Interaction Control Servlet Business Logik Als Model/View/Controller Triade wird ein zentrisches Programmier Modell bezeichnet. Die gesamte Anwendungslogik (EJB, Servlet, JSP) läuft auf dem Server. Der Klient (thin client) braucht nur einen Browser. Beans EJBs CICS Connector DB2 Connector Die Model/View/Controller Triade wird durch die oben dargestellte Kombination von Servlet, Java Beans und JSP implementiert.. Model View Browser Page Construction JSP Model/View/Controller Triade (MVC) Das “Modell” ist ein Anwendungsobjekt und kapselt die Business Logik. Der “View” ist die Screen Darstellung dieses Objektes. Der “Controller” definiert, wie die Benutzerschnittstelle auf Benutzereingaben reagiert. Command- und Data Beans oder Enterprise Java Beans (plus häufig CICS, IMS Programme, oder Stored Procedures) sind das “Modell” (=Business Logik). JSP´s und View Beans sind der “View” Das Servlet ist der “Controller” MVC entkoppelt Modell und View zur Verbesserung von Flexibilität und Re-Use. Der Entwickler der Browser Darstellung arbeitet nur mit der Java Server Page. 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 Microsoft ASP.NET Microsoft ASP.NET (Active Server Pages .NET, siehe http://www.asp.net/) ist eine serverseitige Technologie von zum Erstellen von Web-Anwendungen auf Basis des Microsoft.NET-Frameworks. ASP.NET trat dabei 2002 mit dem ersten Release die Nachfolge des in die Jahre gekommenen ASP (Active Server Pages) an – hat aber heute außer dem Namen entgegen der allgemeinen Meinung nicht mehr viel mit der alten Technologie zu tun. Der gravierendste Unterschied ist dabei die zeilenweise Abarbeitung der ASP-Skripte durch einen Interpreter, wohingegen ASP.NET-Anwendungen am Server kompiliert und somit nicht mehr interpretiert werden. Dies geschieht just in time – und zwar beim ersten Aufruf eines ASP.NET-Webforms (.aspx). Daraus resultiert ein PerformanceVorsprung gegenüber Interpretersprachen wie etwa Perl oder PHP. ASP.NET bietet insbesondere in Verbindung mit Webcontrols und der IDE Visual Studio .NET von Microsoft eine komfortable Möglichkeit, die Anwendungslogik (den C#-, VB.Net-Code) vom Layout der HTML-Seite zu trennen. Dies bezeichnet Microsoft als Codebehind-Technik. Mit dem Tool Visual Web Developer Express Edition (aktuell Version 5) lassen sich ebenfalls ASP.NET-Webseiten erstellen. Microsoft stellt es kostenlos zum Download zur Verfügung. Es beinhaltet auch einen Webserver, um die ASP.NET-Webseiten auf dem eigenen Rechner auszuführen und zu testen. Mit ASP.NET können Webanwendungen in beliebigen unterstützten .NET-Sprachen erstellt werden, zum Beispiel C#, VB.NET, J#, Delphi.NET, Eiffel.NET, F# oder Managed C++, nicht jedoch Java.