Web-Anwendungen
Überblick

Dynamische Webseiten

Architekturen

Middleware

Überblick Technologien
Web-DB-Kopplung, © Till Hänisch 2003,2005
Host
„dumme“ Terminals stellen
Ausgaben dar und
nehmen Eingaben an
Mainframe enthält
vollständige Anwendung
Typ. COBOL, C
Web-DB-Kopplung, © Till Hänisch 2003,2005
Mainframe contd.

Nachteile





Vorteile



Mainframe ist teuer (Millionen !)
(damals) keine grafische Oberfläche
Kaum Integrationsmöglichkeiten (anderer Systeme)
Proprietäre Systeme (OS, DB, Anwendung,...)
Nur ein System (das ausfallen kann, gewartet werden muss,...)
Clients (Terminals) benötigen keine Konfiguration, Installation,...
Entwicklung


PCs sind billig und leistungsfähig
Zentral nur noch Datenbank, der Rest (Anwendung,...) läuft auf
Client --> Mainframe wird entlastet (überflüssig ?)
Web-DB-Kopplung, © Till Hänisch 2003,2005
Client Server
Server hält Daten zentral (und
damit konsistent).
Nur Datenbank --> auch mit wenig
leistungsfähiger HW können viele
Clients bedient werden
Anwendung läuft auf Clients (PC)
Typ. C++ Programm (Visual Studio)
Beispiel: SAP R3, WWW ?
Web-DB-Kopplung, © Till Hänisch 2003,2005
Client Server contd.

Vorteile





Nachteile



HW (auf Clients) wird optimal ausgenutzt
Grafische Oberfläche
Client kann auf mehrere Server zugreifen
Kleiner Server --> billig, flexibel (verschiedene Hersteller, UnixPlattform)
Client erfordert Konfiguration/Installation --> hoher Installations-/
Support-Aufwand
Unter Umständen hohe Anforderungen an Client-HW, Netzwerk
Entwicklung



Thin Clients: Client ist nur für Ausgabe/Eingabe zuständig
Aber wie ?
Browser ! (und ggf. Applet,...)
Web-DB-Kopplung, © Till Hänisch 2003,2005
Thin Client, 3 tier
Typ. ASP, JSP, Servlet, PHP usw. Anwendung läuft im Webserver
und greift auf Datenbank zu
Web-DB-Kopplung, © Till Hänisch 2003,2005
Thin Client contd.

Vorteile


Nachteile


Bei hohem Interaktionsgrad Anwendungsentwicklung
komplex und aufwendig
Probleme




Wie bei Mainframe + „modern“
Enge Kopplung zwischen Webserver und Datenbank
Skalierung, Flexibilität !
Anwendungsprogramm enthält Geschäftslogik
Lösung

Trennung durch Applikationsserver, Middleware
Web-DB-Kopplung, © Till Hänisch 2003,2005
Einschub: Architekturen

Von „Client/Server“ zu EAI

Überblick, technische Details komplex

Szenario:





Unternehmen verwendet SAP als ERP-System
wickelt Versand über Dienstleister, hier UPS ab
UPS bietet Verfolgung der Lieferung über Web-Schnittstelle
Daten im ERP (z.B. Auftrag) und beim Dienstleister müssen
abgeglichen werden
Verschiedene Lösungswege
Web-DB-Kopplung, © Till Hänisch 2003,2005
Separate Clients
SAP
SAP GUI
Browser
Spezieller Client für jede Anwendung
Abgleich erfolgt manuell (copy-paste,...)
Probleme: Effizienz, Konsistenz usw.
Web-DB-Kopplung, © Till Hänisch 2003,2005
UPS
Spezieller Client
SAP
Client
Client
Client
Client
Client
Spezieller Client für diese Anwendung
integriert die Daten
Probleme: Aufwand !
Für jede mögliche Anwendung muss neuer
Client entwickelt werden (und installiert,
Gewartet,...)
Web-DB-Kopplung, © Till Hänisch 2003,2005
UPS
Integration
SAP
SAP-GUI
Kopplung zwischen den (Server-) Systemen
SAP greift auf Daten aus Fremdsystem zu
Problem: Programmierung (auf Server) nötig
Wie kommunizieren die verschiedenen
Systeme ?
Web-DB-Kopplung, © Till Hänisch 2003,2005
UPS
Middleware

Techniken zur Kopplung von Systemen

Selbst gebastelt (TCP/IP sockets)

RPC (Remote Procedure Call)

CORBA (Common Object Request Broker Architecture)

COM+ (Common Object Model, .NET)

RMI (Remote Method Invocation)

XML-RPC

SOAP (Simple Object Access Protocol)

Web Services

usw.
Web-DB-Kopplung, © Till Hänisch 2003,2005
Schnittstellen
SAP
System 2
UPS
System 1
System 3
Bei N Systemen N*(N-1)/2 Schnittstellen !
Web-DB-Kopplung, © Till Hänisch 2003,2005
EAI
Keine Punkt zu Punkt Schnittstellen sondern gemeinsame
Architektur mit (mehr oder weniger) zentraler Vermittlung
Bus
Hub
Sieht einfach aus,
ist es aber nicht
Web-DB-Kopplung, © Till Hänisch 2003,2005
Portal
Client
Webserver
Browser
Portal
SAP
UPS
Verlagerung der Komplexität an eine
Stelle (Portal)
Konsequenz für Informationsanbieter ?
Wie kommt das Portal an die Daten ?
z.B. Web Services
Web-DB-Kopplung, © Till Hänisch 2003,2005
Anbieterseite
klassisch
jetzt
Browser
Webserver
z.B. PHP
z.B. DB
Browser
Webserver
z.B. PHP
z.B. DB
Webservice
deshalb
Browser
Webserver
Applikation muss
mehrfach entwickelt
werden !!
Applikationsserver
Webservice
Web-DB-Kopplung, © Till Hänisch 2003,2005
DB
4 tier Architektur
Darstellung
Logik
Daten
Verschiedene Middleware Technologien, etwa CORBA, .NET, J2EE,
Webservices usw. zur Kommunikation (insb.) zwischen Webserver
und Applikationsserver
Web-DB-Kopplung, © Till Hänisch 2003,2005
Midleware

Vorteile




„modern“, flexibel,....
SW-technisch optimal: Trennung in einzelne
Funktionalitäten: Präsentation, Anwendung, Geschäftslogik,
Datenhaltung
Stand der Technik
Probleme




Komplexität, Administration,....
Unübersichtliche Technologie-Vielfalt: Ebene 1 und 4 meist
klar, aber 2 und 3 bieten Vielzahl an Technologien
Entwurf der Middleware-Schnittstelle nicht einfach: Auf
welcher Ebene soll hier abstrahiert werden (Daten,
Funktionen, Prozesse,....)
Performance teilweise schlecht
Web-DB-Kopplung, © Till Hänisch 2003,2005
Schicht 1: HTML

Auszeichnungssprache

Tags stellen Semantik des Dokuments dar

Präsentation durch Browser

heute auch Präsentation durch HTML


Formatierung <FONT>, ...
Logik JavaScript, DHTML,...

Trennung Inhalt/Layout durch CSS (teilweise)

Statische (Text-) Inhalte

Dynamische teilweise durch JavaScript
(Navigation,...)
Web-DB-Kopplung, © Till Hänisch 2003,2005
Schicht 1: XML

XML ist standardisiert

XML ist eine Methode strukturierte Information zu speichern

XML ist HTML ähnlich (aber sehr anders)

XML ist Text, der nicht zum Lesen gedacht ist

XML ist eine Familie von Technologien (XSLT...)

XML ist neu! (oder doch nicht?)

XML ist lizenzfrei, Plattform unabhängig, unterstützt
standardisierte XML-Programmierschnittstellen (SAX, DOM)

XML-Applikationen sind nicht standardisiert!

Wichtigste Anwendung: Datenaustausch zwischen Systemen


Aber auch im Browser: IE unterstützt XML-Darstellung mit CSS
Verstärkt auch zwischen den anderen Schichten
Web-DB-Kopplung, © Till Hänisch 2003,2005
Schicht1: Java-Applets

Was tun, wenn Anwendung interaktiv sein muss ?

Beispiele




Programm, das im Browser abläuft



Aktien-Ticker
Spiele
Komplexere Navigation
Portabel (versch. Hardware, Betriebssystem,...)
Sicher (Content aus dem Web)
Alternative: Microsoft ActiveX (COM,....)


Windows-Komponenten, die vom IE ausgeführt werden
Sicherheit !! (ActiveX-Komponenten sind beliebige WindowsProgramme)
Web-DB-Kopplung, © Till Hänisch 2003,2005
JVM
Bytecode
Verifier
Java
Source
Class
Loader
Java
Compiler
JIT
Compiler
Interpreter
Bytecode
JVM
Hardware
Web-DB-Kopplung, © Till Hänisch 2003,2005
Schicht 2

Verschiedene Techniken, hier: Auswahl





CGI (Common Gateway Interface)
PHP (bekannt)
Java-Servlets/Java Server Pages (JSP)
Viele andere, wichtig insb. Microsoft ASP (.NET)
Kommunikation zwischen Schicht 1 und 2


HTTP
 Immer bei statischen Anwendungen
 Applets/ActiveX können beliebige Protokolle verwenden
WAP/WML
 Optimiert für mobile Endgeräte
Web-DB-Kopplung, © Till Hänisch 2003,2005
CGI
Browser
TCP/IP
Webserver
Webserver erzeugt neuen
Prozeß, übergibt notwendige
Parameter (im Environment)
Prozeß
Prozeß erzeugt HTTP-Header und Inhalt
(meistens HTML, aber nicht zwingend)
Liefert dies über stdout an Webserver,
wird zum Client durchgereicht
Web-DB-Kopplung, © Till Hänisch 2003,2005
Beispiele
Hello world:
#!/bin/sh
echo Content-type: text/plain
echo
echo Hallo
In C (die restlichen 4711 Sprachen sparen wir uns):
#include <stdio.h>
int main(int argc, char **argv)
{
printf("Content-type: text/plain\n\n");
printf("Ich bin ein C-Programm\n");
return 0;
}
Web-DB-Kopplung, © Till Hänisch 2003,2005
Beispiele contd.
Aktuelles Datum:
#!/bin/sh
echo Content-type: text/plain
echo
echo `date`
Counter
Problem:
mehrere gleichzeitig ?
--> Transaktionen
#!/bin/sh
echo Content-type: text/plain
echo
read val < val.dat
echo $val
val=`expr $val + 1 `
echo $val > val.dat
Web-DB-Kopplung, © Till Hänisch 2003,2005
Warum CGI cool ist
#von http://www.macosxhints.com/article.php?story=20030207070436563
echo Content-type: text/plain
echo
curl -s http://www.thinkgeek.com/fortune.shtml | \
sed -n '/(refresh for another)/,/table\>/p' | \
sed -n '/<p>/,/<\/p>/{/[.]/p; }' | \
sed '{/^<[/]*p>/d; s/<[BbRr]*>//g; s/<\;/</g; s/>\;/>/g; }'
Web-DB-Kopplung, © Till Hänisch 2003,2005
CGI - Lösung für alle ?

Ja





Nein


CGI kann alles tun, was man für Anwendungen braucht
flexibel (beliebige Programmiersprache,...)
einfach
portabel
Performance, Sessions,...
Ablauf




Webserver erkennt, daß Programm aufgerufen werden soll
erzeugt neuen Prozeß (ggf. mit Skript Interpreter)
dieser läuft ab
und terminiert
Web-DB-Kopplung, © Till Hänisch 2003,2005
Performance
Index.html actual (msec):
/cgi-bin/hello actual (msec):
/cgi-bin/chello actual (msec):
/examples/servlet/HelloWorld actual (msec):
79
396
241
135
long
long
long
long
term
term
term
term
258
528
413
261
Achtung: Messungen wurden unter vollständig willkürlichen
und nicht reproduzierbaren Bedingungen (iBook, OS X 10.2.4
mit Apache Webserver bzw. tomcat 4.1.18, JDK 1.4.1,
Java Client, 10 Threads, jeweils 100 msec Wartezeit
zwischen Anfragen, Mittel über ca. 2 min...)
Messungen von Webserver-Performance sind schwierig !!
(Machen Sie‘s besser - und geben mir die Ergebnisse)
Web-DB-Kopplung, © Till Hänisch 2003,2005
Alternativen (technisch)

1) Programme als Module in Webserver gelinkt





2) Webserver mit eingebautem Skript-Interpreter





Apache modules, nsapi, IIS dll
Performance sehr gut
Portabilität/Flexibilität weg
Aufwendige Programmierung (APIs,...)
z.B. Perl, PHP, ASP, OWAS (?), ...
Portabilität/Flexibilität eingeschränkt
Performance gut
einfache Programmierung
3) Servlets/JSP


im Prinzip wie 1)
kombiniert Vorteile von beiden
Web-DB-Kopplung, © Till Hänisch 2003,2005
Architektur
Browser
Webserver
ServletEngine
Servlet
Servlet
Servlet
Servlet
Browser
ServletEngine mit
eingebautem
Webserver
Web-DB-Kopplung, © Till Hänisch 2003,2005
Servlet
Servlet
Servlet
Servlet
Servlet Engines

Java Webserver (SUN)


Websphere (IBM)





Apache module + Servlet Engine
Tomcat (Apache)



Application Server
komplex
Load Balancing
....
Jserv (Apache)


Referenzimplementierung
standalone oder Apache module
einfach und schnell
und viele andere
Web-DB-Kopplung, © Till Hänisch 2003,2005
Hello World

mit GET
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// Was liefern wir zurueck ?
// Hier: ASCII Text, kein HTML
response.setContentType("text/plain");
// Output liefern wir ueber "normale" Java IO
PrintWriter pw = response.getWriter();
pw.println("Hello World");
pw.close();
}
}
Web-DB-Kopplung, © Till Hänisch 2003,2005
Java Server Pages

Warum ?






Wie ?



Servlets sind Programme
Werden von Programmierern erstellt
Wer schreibt HTML ?
unterschiedliche Kenntnisse/Personen !
Viel Logik/viel Design
Java Code wird in HTML-Seiten eingebettet
Oder besser: ausgelagert (Beans,...)
Trennung zwischen Layout und Funktionalität
Web-DB-Kopplung, © Till Hänisch 2003,2005
Hello.jsp
<HTML>
<HEAD><TITLE>Hallo</TITLE></HEAD>
<BODY>
Hallo
</BODY>
</HTML>
Jede (gültige) HTML-Seite ist eine JSP !
Engine erzeugt ein servlet (pagecompile)
public class Hello_jsp extends HttpJspBase {
...
public void _jspService(HttpServletRequest request, ...
{
...
out = pageContext.getOut();
out.write("<HTML>\n");
out.write("<HEAD>");
out.write("<TITLE>Viel Hallo");
out.write("</TITLE>");
...
Web-DB-Kopplung, © Till Hänisch 2003,2005
MuchHello.jsp
<HTML>
<HEAD><TITLE>Viel Hallo</TITLE></HEAD>
<BODY>
<%
for (int i=0;i<10;i++)
out.print(„Hallo“);
%>
</BODY>
</HTML>
Eher Programm, besser (?) Trennung:
<% for (int i=0;i<10;i++)
{
%>
Hallo
<%
}
%>
Web-DB-Kopplung, © Till Hänisch 2003,2005
Parameter
<HTML>
<HEAD><TITLE>Viel Hallo</TITLE></HEAD>
<BODY>
Hallo
<%
if (request.getParameter("Name") != null)
{
%>
lieber <%=request.getParameter("Name")%>
<%
}
%>
</BODY>
</HTML>
(zu) viel Code in JSP reduziert Übersichtlichkeit !!
Web-DB-Kopplung, © Till Hänisch 2003,2005
Beans
<html>
<%@ page session="false"%>
<body bgcolor="white">
<jsp:useBean id='clock' scope='page' class='dates.JspCalendar'
type="dates.JspCalendar" />
<font size=4>
<ul>
<li>
Year: is <jsp:getProperty name="clock" property="year"/>
<li>
Month: is <jsp:getProperty name="clock"
property="month"/>
<li>
Time: is <jsp:getProperty name="clock" property="time"/>
<li>
Date: is <jsp:getProperty name="clock" property="date"/>
</ul>
...
Logik/Code steckt in Bean, in JSP nur Darstellung
--> JSP für Ebene 2, Bean in Ebene 3
Web-DB-Kopplung, © Till Hänisch 2003,2005
Dates/JspCalendar.java
package dates;
...
public class JspCalendar {
Calendar calendar = null;
public JspCalendar() {
calendar = Calendar.getInstance();
public int getYear() {
return calendar.get(Calendar.YEAR);
}
public String getMonth() {
int m = getMonthInt();
String[] months = new String []
{ "January", "February", "March","April", "May",
"June", "July", "August", "September",
"October", "November", "December" };
if (m > 12)
return "Unknown to Man";
return months[m - 1];
Web-DB-Kopplung, © Till Hänisch 2003,2005
Schicht 3

Hier noch unübersichtlicher, wichtigste Techniken:




J2EE
.NET
CORBA
Kommunikation zwischen Schicht 2 und 3 je nach verwendeter
Technologie, Ausnahme: Web-Services
J2EE
.NET
CORBA
Webservice
Sprachen
Java
C#, C++,
VB,..
Fast alle
alle
Plattform
alle
MS
Fast alle
alle
Performance gut
Sehr gut
mittel
schlecht
Verbreitung
hoch
mittel
niedrig
mittel
Web-DB-Kopplung, © Till Hänisch 2003,2005

Web Architekturen