Content-Type - AG Netzbasierte Informationssysteme

Werbung
Arbeitsgruppe
Vorlesung Netzbasierte Informationssysteme
Web-basierte
Informationssysteme I
Prof. Dr. Adrian Paschke
Arbeitsgruppe Corporate Semantic Web (AG-CSW)
Institut für Informatik, Freie Universität Berlin
[email protected]
http://www.inf.fu-berlin.de/groups/ag-csw/
Übersicht:
 Inhalt
 Protokolle & Ports
 Kommunikation über HTTP
 Realisierung dynamischer WebAnwendungen
 Mehrschichtige Architekturen
Anwendungsprotokolle
ISO/OSI
TCP/IP
Application Layer
Presentation Layer
Application
Layer
Standards &
Protokolle
FTP, SMTP,
HTTP, TELNET, …
Session Layer
Transport Layer
Host-To-Host
Transport Layer
Network Layer
Internet Layer
Data Link Layer
Physical Layer
Network Access
Layer
TCP, UDP
IP (mit ICMP, ARP)
IEEE 802.3, X.25 …
Prozesskommunikation über TCP/IP
httpd
80 HTTP
popper
date
110 POP
13 Daytime
TCP
Anwendungsprozeß
Socket - TCP oder UDP,
einem Port zugeordnet
UDP
IP
TCP/IP
Netzwerksoftware
Network Access
Layer
Kartenspezifische
Netzwerksoftware
Protocol-Multiplexing mit Ports
browser
Email
client
date
httpd
popper
date
80 HTTP
110 POP
16 Date
80 HTTP
110 POP
16 Date
TCP
UDP
TCP
UDP
IP
IP
Network Access
Layer
Network Access
Layer
Client
Server
BSP: Emails
SMTP
POP
IMAP
POP
• SMTP (Simple Mail Transfer Protocol,
Port 25) zur Übertragung von Emails
• Mail wird i.d.R. auf einem Mail-Server
zwischengelagert
• Über POP (Post Office Protocol, Port 110)
oder IMAP (Internet Message Access
Protocol) wird auf Mail zugegriffen
• SMTP und POP basieren auf TCP
SMTP, POP
(25, 110)
TCP
IP
Network Access
Layer
BSP: Datenübertragung mit FTP
•
•
•
•
Zuverlässiger und effizienter Dateitransfer
Server-Prozess an den Ports 20 und 21 (TCP)
Klartext-Protokoll (Mit Hilfefunktion)
Binäre (unveränderte) Übertragung von Daten
oder Berücksichtigung unterschiedlicher CR/LFKonventionen (ASCII)
• Weite Verbreitung durch Möglichkeit des
anonymen Zugangs zu dafür vorgesehenen
Dateien (Anonymous-FTP)
GET
PUT
FTP (20, 21)
TCP
IP
RFC 959
RFC 1635
Network Access
Layer
Exkurs: DNS-Namensauflösung (seit 1984)
Root-Name-Server
(derzeit 16 Stück)
Name-Server dns.denic.de
Name-Server der Uni
FU-Berlin
DNS (53)
UDP
IP
Network Access
Layer
217.12.6.16
Inf.fu-berlin.de?
internaldns1.inf.fu-berlin.de
Inf.fu-berlin.de
Exkurs: DNS

Auflösung der Namen zu IP-Adressen und v. v.

Dezentrale, hierarchisch organisierte Datenbank
 große Anzahl von Hosts, leichter zu aktualisieren als
zentraler Datenbestand

Unix: BIND-Service (Berkeley Internet Name Domain)
Ur-Nameserver, heute meistgenutzte Nameserversoftware

Root-Name-Server leiten an Top-level-Domains,
Jede Top-level-Domain (wie .org, .com) leiten an Nameserver
für spezielle Domains weiter, …
 Neue Domains sind bei übergeordneten Domain zu registrieren
 DENIC ist die zentrale Registrierungsstelle für alle Domains unterhalb der Top
Level Domain .de

DNS-Protokoll basiert auf UDP

DNS-Caching - Ergebnisse von früheren Anfragen werden temporär
zwischengespeichert
HTTP - HyperText Transfer Protocol
•
„Einfaches“ Protokoll zur Übertragung von Daten beliebiger Struktur
(Entitäten) über das Internet (TCP/IP); Port: 80 ist für HTTP reserviert
•
Über 75% of Internet backbone traffic über HTTP
•
1989 von Tim Berners-Lee am CERN zusammen mit HTML entwickelt
- > Gilt als WWW-Gründung (HTTP/0.9)
•
•
•
Erweiterung auf andere Datentypen (Content-Types) in
Version HTTP/1.0 (1996: RFC 1945, IETF))
•
•
„Zustandsloses“ Request-Reply-Protokoll (HTTP/0.9)
Einsatzgebiet: Transfer von Hypertext (Inhalt vom Typ text/html)
Datentypen entsprechen dem MIME-Format
(Multipurpose Internet Mail Extensions)
RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1 (Aug./96, 99 IETF Standard)
… but: HTTP-related efforts in W3C are continuing
HTTP


Zustandsloses Protokoll
Anfrage mit Antwort beantwortet
HTTP/1.0 (noch verbreitet eingesetzt):
Bsp: Webpage mit Ressourcen
Client
URL
Analyse
Bilder 1
Server
Ressource laden
(HTML)
Ressource laden
Bilder 2
...
...
Bilder n
Ressource laden
Beispiel: HTTP Protokoll
Server-Response-Codes
 …geben den Status der Transaktion an
 Informative Meldungen (1xx)
 Z.B. 100: Continue ( Anfrage wird bearbeitet )
 Client-Request erfolgreich (2xx)
 z.B. 200: OK, 202: Accepted
 Weiterleitung / Umleitung (3xx)
 Z.B. 301: Moved Permanently, 302: Found
 Client-Request unvollständig (4xx)
 Z.B. 401: Unauthorized, 403: Forbidden, 404: Not Found
 Server-Fehler (5xx)
 Z.B.: 500: Internal Server Error, 503: Service Unavailable
Client-Methoden bei HTTP
 Methoden bei verschiedenen HTTP-Versionen:
 HTTP/0.9:
Nur die Methode GET wird unterstützt.
 HTTP/1.0:
Die Methoden HEAD, POST, PUT, DELETE,
(LINK und UNLINK) kommen hinzu.
 HTTP/1.1:
LINK, UNLINK wieder herausgenommen
Hinzu kommen OPTIONS,TRACE und CONNECT.
 http://www.w3.org/Protocols/
Aufbau Anfrage
 Anfrage besteht aus







Anfragemethode
Anfragebeschreibung durch Kopfzeilen
Allgemeine Beschreibungen
Anfragespezifische Beschreibungen
Beschreibung eventuell beiliegenden Inhalts
Leerzeile
Eventueller Inhalt
 Beispiel:
Client-Methoden: GET
 Um Daten vom Server abzurufen


Methode Ressource HTTP/x.y
Resource ist




Absoluter Pfad im Server-Verzeichnisbaum
Voll-qualifizierte URL bei Anfrage an Proxy
*, Authority bei bestimmten Methoden
GET Methode
Get <URI> <Version> <Conditional-Header>:<DATE>
Beantwortet mit Antwortcode, Kopfzeilen, Inhalt
 Beispielanfrage:

Get /index.html HTTP/1.1
Host: www.apache.org
if-Modified-Since: Fri, 29 Oct 2005
13:50:40 GMT
Accept: image/gif, image/jpeg,
image/pjpeg, image/png, text/html
 Beispielantwort:

HTTP/1.1 304 Not Modified
Date: Fri, 29 Oct 2005 13:50:40 GMT
Content-Type: text/html
Expires: Fri, 29 Oct 2005 18:58:40 GMT
<HTML>
<TITLE>
AG CSW
</TITLE>
GET /index.html
...
Content Negotiation und weitere
Headerfelder
 Oft liegen Ressourcen in unterschiedlicher Qualität,
Sprache (EN/DE) oder Kodierung (GIF/JPEG/...) vor
 HTTP ermöglicht die „Aushandlung“ der besten Variante
(Accept-Charset, Accept-Language, ...)
 Zahlreiche weitere Headerfelder:






User-Agent (Browser und Betriebssystem)
Server (Webserver und Betriebssystem)
Referer (Information über die URL der zuletzt besuchten Seite)
Content-Length (Spezifiziert die Länge des Requests)
Content-Type (Spezifiziert den MIME-Type)
…
Allgemeine Kopfzeile in Anfrage und
Antwort
 Date: Tue, 15 Nov 1994 08:12:31 GMT
 Datum des Abschickens der Anfrage im RFC 1123 Format
 Connection: close
 Verbindung nach Ergebnisübermittlung abbauen
 Cache-Control: Direktive
 Steuert das Caching von Anfragen und Antworten
 no-cache: Antwort darf nicht zur Beantwortung anderer Anfragen
genutzt werden
 no-store: Antwort- oder Anfragemitteilungen dürfen nicht gespeichert
werden
 weitere: max-age, max-stale, min-fresh, no-transform, only-ifcached,
public, private, must-revalidate, proxy-revalidate, smaxage
 Pragma: no-cache
 Entspricht Cache-Control: no-cache
 …
Allgemeine Kopfzeile in Anfrage und
Antwort

Transfer-Encoding: Encoding
Wie die Mitteilung für den Transfer kodiert wurde
 chunked: Mitteilung in Teilen geschickt, Zeichenanzahl in initialer Hexzahl
>java HttpGetClient11 focus.msn.de
java HttpGetClient11 focus.msn.de
HTTP/1.1 200 OK
Date: Fri, 25 Nov 2005 13:20:01 GMT
Server: Apache
set-cookie: NGUserID=11329248012594; path=/; domain=.msn.de;
expires=fri, 10-aug-2012 16:48:59 gmt
Transfer-Encoding: chunked
Content-Type: text/html
2e96
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html> <head>
<title>FOCUS Online in Kooperation mit MSN Homepage</title>
…


identity: Mitteilung unkodiert geschickt
gzip, compress, deflate: Komprimierte Übertragung
Anfrage Kopfzeile
 Host: Name
Aus der URL ermittelter Name des Rechners von
dem angefordert wird. Einziger Pflichtkopfzeile in
HTTP 1.1
 If-Modified-Since: Datum
Änderung der Informationseinheit seit Datum
 Ja: 200 und Inhalt schicken
 Nein: 304 und Inhalt nicht schicken
 If-Unmodified-Since: Datum
Änderung der Informationseinheit seit Datum
 Ja: 412 und nicht verarbeiten
 Nein: Normal verarbeiten (als sei If-Unmodified-Since:
nicht vorhanden)
Inhalts-Kopfzeile
 Content-Encoding: Kodierung
Kodierung des Inhalts
 binary, 8bit, 7bit, quoted-printable, base64, …
 Content-Type: Medienart
 Medientyp des Inhalts
 text/html, image/gif, ..
 Content-Language: Sprachkürzel
 Sprache des Inhalts
 de, en, en-US
 Content-Length: Länge
Länge des Inhalts in Byte
 Content-Range: Range
Beschreibung des Ausschnitts bei Teilanforderung
Inhalts-Kopfzeile
 Content-Location: URI
Verweis auf eigentlichen Inhalt
 Content-MD5: MD5Checksum
Message Digest für Inhalt zur Integritätsprüfung
 Expires: Datum
Kann nach Datum aus Caches gelöscht werden
 Last-Modified: Datum
Letzte Änderung
Inhaltstypen
 Per HTTP können beliebige Inhalte transportiert
werden, nicht nur HTML
 Multipurpose Internet Mail Extensions MIME
(RFC 2045, RFC 2046)
definiert ein Schema zur eindeutigen Benennung durch
einen Inhaltstypen
 In HTTP in Kopfzeile Content-Type
 Format: Typ/Untertyp
 text/html
 image/jpeg
 vnd.motorola.video
MIME Typen
 Acht Typen:
 text: Text
 text/plain, text/html, text/rtf, text/vnd.latex-z
 image: Grafiken
 image/png, vnd.microsoft.icon
 video: Bewegtbilder
 video/mpeg, video/quicktime, video/vnd.vivo
 audio: Audiodaten
 audio/G726-16 , audio/vnd.nokia.mobile-xmf
 application: binäre und/oder anwendungsspezifische Daten
 application/EDIFACT, application/vnd.ms-powerpoint
 multipart: mehrteilige Daten
 multipart/mixed
 message: Nachrichten
 message/rfc822
 model: Daten
 model/vrml
MIME Typen
 MIME Typen
 MIME-Typen werden von der Internet Corporation for
Assigned Names and Numbers IANA verwaltet
 http://www.iana.org/assignments/media-types/
 Verarbeiten eines bestimmten Medientyps nach
Erhalt:
 Teil der Anwendung (siehe auch:
javax.mail.internet.MimeMessage)
 eventuell Unterstützung durch Betriebssystem
 Ermittlung des MIME-Typs für eine Datei:
 Ableitung aus Endung
(javax.activation.MimetypesFileTypeMap)
 Ableitung aus Inhalt der Datei
Client-Methode: POST
 wird benutzt, um (meist Formular) Daten an ein
Programm auf dem Server zu senden
 Post /test.cgi HTTP/1.1
Accept: */*
Accept-Language: en-us
Content-Type: application/x-www-form
User-Agent: Mozilla/5.0
Host: www.apache.org
Content-Length: 39
vorname=Peter&name=Mayer&submit=Request
 Server sendet die Ergebnis-Daten des
Programms dann zurück an den Client
Weitere Client-Methoden

HEAD
 liefert gleiche Header-Information wie GET und POST

DELETE, PUT
 Funktionen wie bei FTP

TRACE (HTTP/1.1)
 um zu überprüfen, ob die Nachricht richtig ankommt; liefert den Transportweg (z.B.
mit Proxy), liefert die Anfrage so zurück, wie der Server sie empfangen hat.

OPTIONS (HTTP/1.1)
 um die auf dem Server möglichen Funktionen abzufragen

CONNECT (HTTP/1.1)
 um sich mit einem HTTPS-Server zu verbinden (SSL Tunnel)
HTTP/1.0 Problembereiche
-> HTTP 1.1
 Keine Unterstützung für non-IP-based virtual Hosts
 d.h. mehrere Web Server laufen auf einer physikalischen
Maschine mit einer IP-Adresse & einem Port (80)
 Pro Request eine neue TCP/IP Verbindung (zustandslos)
 Unsichere Nutzer Authentifizierung (basic authentication)
 einfaches <user>:<password>-Schema
 Base64 kodiert, aber keine Verschlüsselung
 (Daneben: Caching Probleme bei Proxies,
nur eingeschränktes Content Negotiation,…)
Virtual Hosts - Lösungsansätze
 Verschiedene Serverports (ab HTTP/0.9)
 jeder Webserver bekommt einen eigenen Port
 nur einer kann den Standardport 80 verwenden
 IP-based virtual Hosts (ab HTTP/0.9)
 dem Rechner werden mehrere IP-Adressen zugewiesen
 jeder Webserver bzw. Domäne erhält eine eigene IP-Adresse
 Problem: „Verschwendung“ von IP-Adressen
 Non-IP-based virtual Hosts (ab HTTP/1.1)
 Auf Maschine (eine IP-Nummer, ein Port) laufen mehrere
Webserver
 Auf Grund der HTTP-Anfrage wird entschieden, welche Ressource
(aus welcher Domain) angefragt wird
Non-IP-based Virtual Hosts
GET /dir1/structure.xml HTTP/1.1
Host: www.firma1.com
GET /home.cgi HTTP/1.1
Host: www.firma2.com
IP: 131.159.224.211
GET /index.html HTTP/1.1
Host: www.firma3.com
• HTTP-Requests verwenden Headerfeld Host
• Eine HTTP/1.1-Anfrage ohne dieses Feld führt zu einem Fehler
• Alle Domains auf Server werden auf gleiche IP-Adresse abgebildet
• Domainauswahl über Host nicht durch den Aufbau der TCP-Verbindung
HTTP/1.1 persistente Verbindungen
Client
Server
Open TCP
URL
Analyse
Bilder 1
Ressource laden
(HTML)
Ressource laden
Bilder 2
...
...
Bilder n
Ressource laden
Close TCP
Wiederverwendung einer Verbindung spart CPU-Zyklen und Bandbreite
Partieller Transfer von Ressourcen
 Übertragung sehr großer Dateien in einzelnen Blöcken
 Wiederholung von abgebrochenen Übertragungen
 Nur der Teil, der fehlt muss übertragen werden
 Parallele Übertragung von Teilen einer großen Datei
 Range: <x-y bytes>
Client
Open
Get /large.zip
Close
Server
Apache httpd.conf
 „KeepAlive“
 legt fest, ob persistente Verbindungen zulässig sind. Wird mit "Off"
deaktiviert
 "MaxKeepAliveRequests":
 die Höchstzahl der während einer persistenten Verbindung
zulässigen Anfragen. Wird 0 angegeben, ist unbegrenzter Zugriff
möglich.
 "KeepAliveTimeout":
 Zeitspanne (Zahl an Sekunden), um auf die nächste Abfrage
desselben Clients mit derselben Verbindung zu warten.
 "MaxClients":
 Höchstzahl der gleichzeitig laufenden Server. Damit wird auch die
Zahl der Clients eingegrenzt, die simultan mit dem Server
verbunden werden können.
Caching/Proxies
 Cache – MISS – die angefragte Ressource ist nicht im
Cache, bzw. HIT im Erfolgsfall
GET http://inf.fu-berlin.de/people/paschke.html HTTP/1.1
host: inf.fu-berlin.de
HTTP/1.0 200 OK
Date: Tue, 30 Oct 2004 10:16:37 GMT
Server: Apache/1.2.6 Red Hat
Last-Modified: Sat, 23 Jan 1999 15:23:35 GMT
ETag: „d908a-65-36a9e977“
Content-Length: 1628
Accept-Ranges:bytes
Content-Type: text/html
Age: 0
x-Cache: MISS from www.xyz.de
Proxy-Connection: keep-alive
Persistente Verbindungen –
Request Pipelining
GET / HTTP/1.1
host: inf.fu-berlin.de
connection:keep-alive
GET /images/homepage.gif HTTP/1.1
host: inf.fu-berlin.de
connection:keep-alive
…
GET /cgi-bin/people.gif HTTP/1.1
host: inf.fu-berlin.de
HTTP/1.1 200 OK
connection:close
HTTP/1.1 200 OK
Header Field connection
Werte: keep-alive, close
HTTP/1.1 200 OK
Date: Tue, 26 Oct 2004 16:56:37 GMT
Server: Apache/1.2.1
Keep-Alive: Timeout=10, max=98
Connection: Keep-Alive
Content-Type: Text/html
<html>...
HTTP/1.1 Authentication
 Digest Access Authentication neben Basic
Authentication
 Ablauf
 Username und Passwort werden MD5 kodiert …und vom Server
geprüft (keine Übermittlung des Rohpasswortes)
 OK oder Antwort mit Status-Code: 401 Unauthorized und Header
WWW-Authenticate: Digest realm=„...“, ...
 Benutzer wird vom Browser nach Passwort gefragt
 Anfrage der Ressource mit zusätzlichem Header
 Authorization: Digest realm=„...“, username=„...“
...
Web Server Survey
http://news.netcraft.com/archives/web_server_survey.html, October 2006
Dynamische Web-Anwendungen
(Applikationslogik und Datenbankzugriff)


… mehr als die Rückgabe statischer Inhalte (HTML, GIF, AVI, …)
Zwei Arten:
 Client-seitige Integration = Code beim Client und DB-Zugriff vom Browser mit
Mitteln des WWW, z.B. ActiveX, Applets
 Server-seitige Integration = HTML-Generierung

Kombination ist denkbar und sinnvoll;
Fokus: Serverseitige Ansätze
HTTPServer
Client
HTML
HTML
Internet
HTML
link
Datenbank
Serverseitige Ansätze - Übersicht
 (über die Generierung statischer HTML-Seiten hinaus)
 CGI - Common Gateway Interface
 Neuere Web Server APIs (z. B. Servlets)
 Server-seitige Skripte (z.B. JSPs)
 …
Common Gateway Interface (CGI)
Klient
(WWW-Browser)
get /cgi-bin/uptime.pl HTTP/1.0
WWW
Server
Content-type:
text/plain
9:36 am up 54 days,
• Server stellt fest: Anfrage bezieht sich auf
Programm/Skript (kein Dokument)
• Server startet das Programm/Skript und übergibt
etwaige Argumente (z. B. aus HTML-Formular)
• Server gibt Output des Programms/Skripts
(HTTP + HTML) über Web Server zurück an den Client
• Im Falle eines Fehlers übergibt der Server eine
Fehlermeldung an den Client zurück
uptime.pl
CGI
Script
CGI-Skripts
Beispiel (In Perl):
#!/usr/local/bin/perl
$UPTIME = /usr/bin/uptime ;
print “Content-type: text/html\n\n”;
print “<HTML>\n\<BODY>\n“;
Uptime-Kommando:
9:36 am up 54 days, 1:46
HTML-Output:
Content-type: text/html
if (-x $UPTIME) {
print `$UPTIME`;
} else {
print “No uptime command.\n”;
}
print “</BODY>\n</HTML>\n“;
<HTML>
<BODY>
9:36 am up 54 days, 1:46
</ BODY>
</HTML>
WWW-Formulare
<FORM method=GET action=http://www.google.com/custom>
<INPUT TYPE=text name=q size=31 maxlength=255 value="">
<INPUT type=submit name=sa VALUE="Search">
</form>
Umgebungsvariablen I
 Server stellt dem Programm Environment-Variablen zur
Verfügung!
 Diese enthalten Variablen, die per GET übertragen worden
sind und Systemvariablen







SERVER_NAME
SERVER_PROTOCOL
REQUEST_METHOD
PATH_INFO
SCRIPT_NAME
QUERY_STRING
REMOTE_ADDR
Hostname/DNS/IP
Name + Revision
POST, GET
Pfad des Programms
Pfad + Name
mit GET übertragene Daten
IP des anfragenden Hostes
Umgebungsvariablen II






CONTENT_TYPE
CONTENT_LENGTH
HTTP_ACCEPT
HTTP_USER_AGENT
HTTP_COOKIE
HTTP_REFERRER
bereitgestellte Daten
Länge der Daten
MIME-Typen des Browsers
Kennung des Browser
Cookie-Daten, falls versandt
letzte Adresse, von der der Browser kam
 Zugriff auf Umgebungsvariablen aus Programmen:
 C or C++: #include <stdlib.h>
char *query = getenv(„QUERY_STRING");
 Perl:
$query = $ENV{‚QUERY_STRING„};
 C shell:
set QUERY = $QUERY_STRING
Übergabe über Standard-Input
 Server prüft, ob Informationen an Header angehängt und
legt gefundene Informationen auf Standard-Input des CGIProgramms
 Server setzt CONTENT_LENGTH und CONTENT_TYPE
 Beispiel: x=4&y=2 mit POST übertragen
x=4&y=2 auf Standard-Input des Programms
 CONTENT_LENGTH=7
 CONTENT_TYPE= application/x-www-form-urlencoded
 Beispiel: Perl-Anweisung zum Auslesen der Daten
 read(STDIN, my $Daten, $ENV{CONTENT_LENGTH});
CGI-Datenbankabfrage
Betätigung Submit-Button
<FORM METHOD="POST"
ACTION="http://www.xyz.de/
cgi-bin/my-form">
client
Aufruf des Skriptes
mit Parametern
Initialisierung bei
jedem Aufruf
HTTPServer
Aufbau der DB
Verbindung bei
jedem Aufruf
Datenbank
CGI-Skript
Verbindungsaufbau
Anfrage
SQL Anfrage
Antwort
Ergebnis
HTTP Server
antwortet
Skript übermittelt
HTML und beendet
sich
Skript generiert
HTML
Skript stellt Anfrage
an DB
Zustandsproblematik bei HTTP, CGI
• Durch den wiederholten
Verbindungsaufbau (Start ) kann
der Server (das Programm) den
Client nicht “wieder erkennen”
• Typisches Beispiel: Online-Shop:
Virtueller Einkaufswagen,
Kunden-ID
xxxx
Name:
ID
457
ID
457
Anonymer Anwender
(Allgemein zugängliche
Information)
Identifikation
(Eingabe von Name
und Kennwort)
Identifizierter Anwender:
Referenz muß zwischen
den einzelnen Verbindungen
übergeben werden.
z.B. in Form einer ID
Zustandsmanagement
URL-Encoding: ID als Argument eines Formular vorweg nehmen:
<FORM ACTION=“http://csw/cgi-bin/states?ID=451” METHOD=POST>
Alternativ: ID als unsichtbares Feld einfügen:
<INPUT TYPE=“HIDDEN” NAME=“ID” VALUE=“451”>
Die meisten Browser erkennen Cookies, im Browser aufbewahrt
& mit nächstem Request wieder an den Server zurückgeschickt
werden:
Content-type: text/html
Set-Cookie: ID=451
Bewertung von CGI
 Vorteile
 Beliebige Programme können integriert werden
(sprachunabhängig)
 Sicherheit durch eigenen Prozess (im User Space)
 Bei allen gängigen Webservern implementiert
 Nachteile





Ein Prozess pro Anfrage
Für jede DB-Anfrage Verbindung aufbauen und trennen(!)
Keine Speicherung des Zustands durch den HTTP Server
Keine Trennung von Präsentation und Anwendungslogik
Keine Lastverteilung zugunsten des Servers /es sei denn, die
Applikation läuft auf separatem Server (Aufrufproblematik!)
Neuere Web-Server APIs
 Entwickelt um Nachteile der CGI-Skripte zu überwinden
 Werden in die Serverumgebung (Context) geladen
 Müssen meist nur einmal geladen werden
 Werden in Threads statt Prozessen ausgeführt
 Sind in der Lage, Zustände zu speichern
 Bekannte Vertreter





Java Servlets (Java Servlet API, Sun)
Apache API (MODPERL, MODPHP, …)
NSAPI (Netscape)
ISAPI
…
API-basierte Ansätze
Betätigung Submit-Button
<FORM METHOD="POST"
ACTION="http://www.xyz.de/
cgi-bin/my-form">
client
Aufruf des Programms,
Parameterübergabe
Initialisierung bei ersten
Aufruf (einmalig)
Verbindungsaufbau zur
DB beim ersten Aufruf
(einmalig)
HTTPServer
Datenbank
Verbindungsaufbau
Anfrage
Programm
SQL Anfragen
Antwort
Ergebnisse
Zustand
Beliebig viele
SQL Anfragen
HTML-Rückgabe
HTML-Generierung
Server-seitiges Java => Servlets
 Einfaches Web-Server API für Java Anwendungen
 Plattformunabhängigkeit und leichte Portierbarkeit
 Servlet bleibt geladen, nachdem eine Anfrage abgearbeitet wurde;
CGI-Programm muss stets neu geladen werden


Servlet Spezifikation durch Sun, aktuelle Version: 2.5
Implementierung durch verschiedene Servletengines





Tomcat von Apache
JRun von Macromedia (Allaire)
IBM WebSphere
Oracle Application Server
…
Servlet Servlet
Client
Web
Server
Servlet
Engine
Multithreading
Kernzprozess
Request für Servlet1
JVM
thread
Servlet1
Request für Servlet2
thread
Servlet2
Request für Servlet1
thread
Entwicklung: Klasse HttpServlet
(Package: javax.servlet.http)
 Bietet Grundfunktionalitäten, um auf HTTP-Anfragen zu
reagieren
 Dabei muß eine der folgenden Methoden überschrieben
werden:
 doGet, wenn das Servlet HTTP GET Anforderungen
entgegennehmen kann.
 doPost, für HTTP POST Anforderungen
 doPut, für HTTP PUT Anforderungen
 doDelete, für HTTP DELETE Anforderungen
 init and destroy, für Ressourcen, die für den Lebenzyklus eines
Servlets gehalten werden sollen
Übersicht
Web
GET request Server
HttpServlet
Unterklasse
doGet()
response
service()
POST request
doPost()
response
Java Servlets - Methoden

void init()
Initialisiere das Servlet (z.B. setzte Parameter, instanziere Klassen oder
öffne Datenbankverbindung)

void doGet(HttpServletRequest, HttpServletResponse)
durch Anfrage vom Typ GET aufgreufen, enthält Funktionalität des Dienstes

void doPost(HttpServletRequest, HttpServletResponse)
durch Anfrage vom Typ POST aufgerufen, enthält Funktionalität des Dienstes

void destroy()
Entfernt Servletinstanz vom Speicher (z.B. schließe DB Verbindung)
Beispiel 1/3
<html>
<body>
<form action="RequestParamExample" method=POST>
Vorname:
<input type=text size=20 name=firstname>
<br>
Nachname:
<input type=text size=20 name=lastname>
<br>
<input type=submit>
</form>
</body>
</html>
Beispiel liest Input
eines Web-Formulars
und gibt diesen im
Web wieder aus
Beispiel 2/3
import
import
import
import
javax.servlet.*;
javax.servlet.http.*;
java.io.IOException;
java.io.PrintWriter;
Objekt zum Handling&
Infos bzgl. Request
public class CSWServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException {
// Auslesen der Request-Parameter
String firstName = request.getParameter("firstname");
String lastName = request.getParameter("lastname");
Objekt zum Handling&
Infos bzgl. Response
Beispiel 3/3
// ContentType setzen und Ausgabe-Stream anfordern
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Ausgabe
out.write("<html>\r\n<head><title>Servlet Beispiel Ausgabe</title><head>");
out.write("<body>\r\n<font face=\"Arial\">\r\n");
out.write("Vorname: " + firstName + "<br>\r\n");
out.write("Nachname: " + lastName + "<br>\r\n");
out.write("</font>\r\n</body></html>");
} // doPost
} // CSWServlet
HttpServletRequest
 Beinhaltet Information vom Client zum Servlet
 Wichtige Methoden:
 Enumeration getParameterNames()
 Liefert eine Liste aller Namen der übergebenen
Parameter
 String[] getParameterValues(java.lang.String name)
 Liefert eine String-Array mit allen übergebenen
Parameter-Werten
 ServletInputStream getInputStream()
 Liefert einen ServletInputStream aus dem binäre
Daten vom Client gelesen werden können
HttpServletResponse
 Beinhaltet Information vom Servlet zum Client
 Wichtige Methoden
 void setContentType(java.lang.String type)
 Setzt den Content-Typ der Antwort (z.B. text/html).
 PrintWriter getWriter()
 Liefert eine PrintWriter-Objekt um Daten an den
Client zu schicken
 ServletOutputStream getOutputStream()
 Liefert einen ServletOutputStream um binäre Daten
an den Client zu schicken
Zustandsmanagement:
Session Interfaces
 javax.servlet.http.Cookie
 Explizites Setzen von Cookies
 javax.servlet.http.HttpSession
 Einfacher und mächtiger
 Cookies/URL Rewriting transparent für
Entwickler
 Objekte werden „in Sessions“ gespeichert
HttpSession
Beispiel: HttpSession
...
Session session = request.getSession();
ShoppingCart cart = session.getAttribute(“Einkaufswagen“);
if (cart == null) {
cart = new ShoppingCart();
session.setAttribute(“Einkaufswagen“, cart);
…
}
if (request.getParameter(“add_item“) != null) {
String itemId = request.getParameter(“item_id“);
Item item = catalogue.getItem(itemId);
cart.addItem(item);
...
}
...
RequestDispatcher
Eingabe.html
post
Servlet zur
Prüfung der Eingabe
forward
include
Eingabe.html
post
KomponentenServlet
If(x<0)
include
If (x>0)
include
DatenbankServlet
Header.html
Inhalt1.html
Inhalt2.html
RequestDispatcher - Syntax
 forward:
...
RequestDispatcher dispatcher =
request.getRequestDispatcher(“PostProcessingServlet“);
dispatcher.forward(request, response);
...
 include:
...
RequestDispatcher dispatcher =
request.getRequestDispatcher(“header.html“);
dispatcher.include(request, response);
out.write(“Der eigentliche Inhalt ...“);
...
Servlet Filter
 Filter können Requests oder Responses ändern bevor sie
eine Ressource erreichen, bzw. nachdem sie von dieser
verarbeitet wurden
 Sequenz der Filter kann in Deployment Descriptor definiert werden
 Anwendungen




Prüfen eines HTTP Request
Authentifizierung und Autorisierung
Auditing und Logging
…
request
response
Filter 1
Filter 2
Ressource:
HTML
Servlet
JSP
Lebenszyklus von Servlets
Einfaches Zähler Beispiel
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Counter extends HttpServlet
{
int count = 0;
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException
{
res.setContentType(“text/html”);
PrintWriter out = res.getWriter();
count++;
out.println(“This servlet has been accessed “ + count + “ times
since loading”);
}
}
Problem
 Die Servlet Engine lädt eine Instanz, die mehrere
auch gleichzeitige Anfragen bearbeitet
 Thread Sicherheit?
 Beispiel:
count++
//thread 1 - count=1
count++
//thread 2 - count=2
out.println(count)
//thread 1 -> 2
out.println(count)
//thread 2 -> 2
Lösungsansätze
 Schutz des Schreibzugriffs auf nicht-lokale Variablen durch
Verwendung von “synchronize”
 Synchronisieren der doGet() Methode
public synchronized void doGet
(HttpServletRequest req, HttpServletResponse res)
 Servlet kann nur mehr einen GET Request gleichzeitig
bearbeiten
 Synchronisieren kritischer Bereiche
PrintWriter out = res.getWriter();
synchronized(this)
{
count++;
out.println(“This servlet has been accessed “ + count + “ times since
loading”);
}
Single-Thread Model
 Das Single-Thread Model garantiert im Gegensatz dazu,
dass keine 2 Threades gleichzeitig die service()-Methode
einer Instanz aufrufen
 Üblicherweise laufen allerdings mehrere Instanzen
public class SingleThreadServlet
extends HttpServlet
implements SingleThreadServlet {
…
}
Servlet Engines

Servlet-Engines sind im wesentlichen eine JVM als Laufzeitumgebung für
Servlets mit spezifischen Methoden zur Abwicklung des Lebenszyklus

Web-Server mit integrierter Servlet-Engine:
 Bsp.: Java WebServer von Sun
 WebServer in Java geschrieben, Class-Dateien der Servlet-Engine zu denen des
WebServers hinzugefügt.

Separate Servlet-Engine
 verlangen eine getrennte Laufzeit-Umgebung für die Servlet-Engine und ein Web
Server Plug-In zur Integration der Java-Umgebung.
 Das Plug-In hat u.a. die Aufgabe, die Kommunikation zwischen Web Server und
Servlet-Engine zu vermitteln.
 Tomcat
 vollwertiger Web-Server, oft eingesetzt als Module des Apache Web Server
 Jakarta-Projekt, wird unter Apache-Software-Lizenz entwickelt
 http://jakarta.apache.org (Servlets 2.2, JSP 1.1)
Java Servlets - Deployment
 Ein Servlet muss in einem Servlet Container deployed
werden
 Direkt als ausgepackte Verzeichnisstruktur oder
 als Web Archive (.war)
 Verzeichnisstruktur von Webanwendungen ist durch die Java
Servlet Spezifikation spezifiziert
 Ein Webarchive kann mit dem Tool “jar” erzeugt werden
 Struktur aller Dateien muss dieser Spezifikation entsprechen
 jar –cf meinServlet.war WEB-INF *.html *.css
 Instruktionen zum Deployment finden sich in der Datei
web.xml, dem Deployment Descriptor
Java Servlets - Deployment
Verzeichnisstruktur einer Webapplikation:
 nameOfApplication/
 Zusätzliche Dateien (z.B. HTML, CSS, GIF, JSP Dateien), können in
Subverzeichnissen sein
 nameOfApplication/WEB-INF/
 Deployment Descriptor web.xml
 nameOfApplication/WEB-INF/classes/
 .class – Datei des Servlets and alle anderen Java Klassen.
 Unterverzeichnisse in /classes – Verzeichnis entspricht Paketstruktur
der Implementierung
 nameOfApplication/WEB-INF/lib/
 .jar - Archive
Java Web Application:
Web Application Archive (WAR)
 Eine Server-seitige Java Applikation als eine
Einheit installierbar
 Servlets und JSP Seiten
 HTML Dokumente und Bilder
 Andere Web Ressourcen
 Erweiterung des JAR Dateiformates
 Einführung in Servlet Spezifikation v2.2
 Multi-platform, multi-vendor
WAR (Web Application Archive)
app.war
JSP pages, HTML documents, image files
Content
directories
JSP pages, HTML documents, image files
web.xml
WEB-INF
classes
Class files
beans
Package
directories
lib
JAR files
tlds
TLD files
Servlet
\WEB-INF\classes
Aufruf: http://host/application/servlet/S
Servlet S im Package csw:
\WEB-INF\classes\csw
Aufruf: http://host/application/servlet/csw.S
Bibliotheken:
\WEB-INF\lib soll z.B. ein Servlet oder
eine JSP mit Treiber aus der
Bibliothek mylib.jar arbeiten, dann
JAR-Archiv ins lib-Verzeichnis kopieren
Class files
Konfigurationsinfomation:
\WEB-INF\web.xml (Kontextparameter
der Servlets, Time-Out für Sessions,
Zugriffsrechte auf Dateien)
Tag Library Descriptions zur Definition eigener
Tags (JSP)
Deployment von WAR-Dateien
 Wurzelverzeichnis zippen und umbenennen
(.war)
 WAR Datei in Webapps Dir. von z.B. Tomcat
kopieren
 Tomcat entpackt die Datei beim Starten in ein
Verzeichnis mit gleichem Namen
 Der Tomcat Manager erlaubt Deployment einer
Web Applikation ohne Neustart (Hot-Deployment)
 Ebenso kann ein kompiliertes Servlet einfach im
entsprechenden Verzeichnis ersetzt werden
Deployment Descriptor
 Deployment Descriptor WEB-INF/web.xml
 <web-app> enthält folgende Information:









Application configuration
Servlet configuration
Session configuration
MIME types
Default pages
Custom tag libraries
External resources
Security
J2EE configuration
Java Servlets - Deployment
Der Deployment-Descriptor web.xml:
 Wird benötigt:
 Registrierung der Servlet Klassen
 Abbildung der Dienst URL auf Servletklassen (URL
Mapping)
 Optional:





Initialisierung der Parameter
Timeouts
Start- und Fehlerseiten
Sicherheitskonfiguration
…
web.xml Beispiel
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<display-name>Servlet Beispiele</display-name>
<description>CSW Beispiele für Servlets und JSPs</description>
<servlet>
<servlet-name>Hello</servlet-name>
<description>Hello World Servlet</description>
<servlet-class>HelloWorld</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>
Allgemeine Information
über die Applikation
Definiert den Namen des
Servlets und ordnet ihn
einer Klasse zu
Ordnet den Namen einer
URL zu
<!-- 30 minutes -->
Entwicklungsumgebung Eclipse
 Local Tomcat: Start/Stop/Restart via Eclipse Plug-In:
 Administration of local Tomcat context:
http://localhost/manger/html/
User: e.g. tomcat Pwd: e.g. tomcat
Bewertung von Servlets
 Vorteile
 Höhere Leistungsfähigkeit
 Programmierkomfort
 Z.B. HttpSession -> Zustandsproblem
 Geringerer Ressourcenverbrauch
 Nachteile
 Nur Java
 Keine Trennung von Präsentation und
Anwendungslogik
Literatur
 Folien, Web
 HTTP:
 http://www.w3.org/Protocols/
 Servlet
 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html
 http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/
 http://www.galileocomputing.de/openbook/javainsel5/, Chapter 17
 Servlet und JSP Buch:
 Hall, M.: Core Servlets and Java Server Pages; Sun Microsystems
Press/Prentice Hall PTR, 2000.
 Übersichtsartikel:
 Turau, V.: Techniken zur Realisierung Web-basierter Anwendungen, Informatik
Spektrum, 22 (1999) 1, S. 3-12.
Herunterladen