Web Application Server

Transcription

Web Application Server
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.