WebServer-Technologien SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn - SS 2004 - Prof. Dr. Stefan Böttcher Folie 1 Überblick über Internet-Technologien Server-Technologien XSP Java Server Pages (JSP) Servlet generiert HTML PHP CGI generiert HTML nur HTML nur HTML XML+XSL Dokumentsprachen Datenbankkopplung Client-PGM ruft DB-Server Web-Server ruft Datenbankserver nur HTML HTML+Javascript HTML+Applets Client-Technologien - SS 2004 - Prof. Dr. Stefan Böttcher Folie 2 Prof. Dr. Stefan Böttcher 1
Sprachen für Serverpages JSP JSP mit Datenbankanbindung Vergleich von ASP mit JSP Vergleich von PHP mit JSP - SS 2004 - Prof. Dr. Stefan Böttcher Folie 3 Java Server Pages (JSP) Bisher: HTML - statische Seiteninhalte php,... - dynamische Seiteninhalte, nicht typsicher und portabel Servlets - dynamische Seiteninhalte, typsicher und portabel, aber keine Trennung von Layout, Logik und Daten Neu: JSP - dynamische Seiteninhalte, typsicher und portabel, etwas bessere Trennung von Layout, Logik und Daten - SS 2004 - Prof. Dr. Stefan Böttcher Folie 4 Prof. Dr. Stefan Böttcher 2
Java Server Pages (Beispielausgabe) JSP-Verzeichnis JSP-Seite Layout (+konstanter Inhalt) dynamischer Inhalt Layout - SS 2004 - Prof. Dr. Stefan Böttcher Folie 5 JSP (Trennung von Design und Logik) Eingabe JSP-Web-Server JSP-Seite Web- Designer Web- Browser.class-Files Servlet (.java) Ausgabe Web-Seite (html) Java-Klasse(n) Programmierer Client Server - SS 2004 - Prof. Dr. Stefan Böttcher Folie 6 Prof. Dr. Stefan Böttcher 3
Java Server Pages (JSP) http://localhost:8080 /beispiel1/clock.jsp JSP-Web-Server clock.jsp Web-Browser.class-Files Servlet (.java) Willkommen in... Preisliste von Mo. 22.Jan 21:55... Client Web-Seite (html) Server Clock.Java - SS 2004 - Prof. Dr. Stefan Böttcher Folie 7 Servlet-Code zum Form Beispiel import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class KenntKunde extends HttpServlet { public void doget ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { res.setcontenttype("text/html"); PrintWriter aus = response.getwriter (); String kunde = request.getparameter("anrede"); aus.println("ihre Name ist: "); aus.println( kunde ); } } - SS 2004 - Prof. Dr. Stefan Böttcher Folie 8 Prof. Dr. Stefan Böttcher 4
Java Server Pages (Beispiel 1) <!-- clock0.jsp --> <!-- Diese Java Server Page funktioniert ohne eigenes Java-Programm --> <html> <body> </body> </html> Die aktuelle Zeit ist <%= new java.util.date() %> JSP Ausdruck - SS 2004 - Prof. Dr. Stefan Böttcher Folie 9 Java Server Pages (Beispiel 2) JSP-Direktive <-- clock.jsp --> <%@ page language="java" %> <jsp:usebean id="clock" class="clock" /> JSP-Aktion <HTML> <H1>Willkommen in unserem Internetshop</H1> <p> Preisliste von <%= clock.getday() %> ist... </HTML> JSP Ausdruck import java.util.*; public class Clock { public String getday() { return " " + new Date() ; } } - SS 2004 - Prof. Dr. Stefan Böttcher Folie 10 // Clock.Java Prof. Dr. Stefan Böttcher 5
Java Server Pages (Beispiel 3) <%@ page import="java.sql.*" language="java" %> <!-- JSP Aktion: Instanziiere Klasse Shop / Konstruktoraufruf --> <jsp:usebean id="shop" class="shop"/> Shop-Kontruktor erzeugt DB-Verbindung <% ResultSet rsliefert = null ; <!-- Servlet-Request --> String teil = request. getparameter("teil"); if ( teil == null teil.equals("") ) <!-- JSP Skriptlet --> rsliefert = shop. getliefert(); else rsliefert = shop. getliefert(teil); %> <html> <body> <form method="get" action="liefert2.jsp"> Teil: <input type="text" name="teil" size="15"> <input type="submit" value="absenden"> </form>... <!-- Ausgabe des Resultsets als Tabelle --> </body> </html> - SS 2004 - Prof. Dr. Stefan Böttcher Folie 11 JSP mit taglib <HTML> <-- beispiel1.jsp --> <%@ taglib uri="/bsplib" prefix="jsplib" %> <H1>Willkommen in unserem Internetshop</H1> <P>Preisliste von <jsplib:getday/> ist... </P> <jsplib:ifis timeofday="pm"> Sonderangebot vor Ladenschluß... </jsplib:ifis> </HTML> <taglib> <tag> </tag> <tag> </tag> </taglib> // Ausschnitt aus bsplib.tld <name>getday</name> <tagclass>beispiel1.getdaytag</tagclass> <name>ifis</name> <tagclass>beispiel.ifistag</tagclass> <attribute> <name>timeofday</name> <required>true</required> </attribute> - SS 2004 - Prof. Dr. Stefan Böttcher Folie 12 Prof. Dr. Stefan Böttcher 6
Taglib - Datei <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>bsplib</shortname> <tag> <name>getday</name> <tagclass>beispiel1.getdaytag</tagclass> </tag> <tag> <name>ifis</name> <tagclass>beispiel.ifistag</tagclass> <attribute> <name>timeofday</name> <required>true</required> </attribute> </tag> </taglib> - SS 2004 - Prof. Dr. Stefan Böttcher Folie 13 4. Apache-Webserver und CGI Der Apache-Webserver CGI-Skripte Vergleich von CGI und Servlets - SS 2004 - Prof. Dr. Stefan Böttcher Folie 14 Prof. Dr. Stefan Böttcher 7
Apache - Webserver Client GET /willkommen.html HTTP/1.0 action = cgi-bin/pgm1 C:\programme \Apache Group \Apache \htdocs willkommen.html \Abteilung1 WebseitenVonAbteilung1 \Abteilung2 WebseitenVonAbteilung2 \cgi-bin cgi-programme \conf httpd.conf Server - SS 2004 - Prof. Dr. Stefan Böttcher Folie 15 CGI: Interaktion mit HTML-Forms Protokoll, IP-Nummer, Port, Web-Seite Textfeld Passwortfeld Submit-Knopf - SS 2004 - Prof. Dr. Stefan Böttcher Folie 16 Prof. Dr. Stefan Böttcher 8
Quellcode mit HTML-Form <HTML> <BODY> <FORM method="post" action="http://172.16.0.2/cgi-bin/j3.bat"> <br> User: <INPUT type="text" name="username" size="30" > <br> Passwort: <INPUT type="password" name="passwort" size="30" > <br> <INPUT type="submit" value="anfrage abschicken" > </FORM> </BODY> </HTML> - SS 2004 - Prof. Dr. Stefan Böttcher Folie 17 Ausgabe eines CGI-Programms Web-Server CGI-Verzeichnis CGI-Programm Attribut Wert (+ für blank) Liste der Eingabeparameter an das CGI-Programm - SS 2004 - Prof. Dr. Stefan Böttcher Folie 18 Prof. Dr. Stefan Böttcher 9
Common Gateway Interface (CGI) HTML- Seite Eingabe Browser Client CGI- Programm Auf dem Server: CGI-Verzeichnis für Programme (Sprache beliebig) Aufruf von CGI-Programmen ist in HTML-Seite eingebaut Browser-Click ruft CGI-Programm statt gewöhnliche HTML-Seite Dateneingabe im Browser möglich, Übergabe an das CGI-Programm über Umgebungsvariablen (get) oder Datei (post) CGI-Programm muß Eingabedaten decodieren CGI-Programm generiert als Ergebnis HTML-Seite Client-Browser zeigt generierte HTML-Seite ruft generierte Seite Server - SS 2004 - Prof. Dr. Stefan Böttcher Folie 19 CGI-Beispiel Batch-Datei j3.bat wird lediglich benötigt, um Java aufzurufen: java j4 Das Programm CGI-Programm (hier z.b. j4.class) liest die mit POST geschickten Daten von der Standardeingabe und schreibt in die Standardausgabe Der Web-Server schickt diese Ausgabe an den Browser auf dem Client. - SS 2004 - Prof. Dr. Stefan Böttcher Folie 20 Prof. Dr. Stefan Böttcher 10
Prozesse und Threads Prozesse : laufen in eigenem Adreßraum, eigener Prozeßkontrollblock => relativ aufwendig Threads = nebenläufige leichte Prozesse => effizienter/schneller umschaltbar - SS 2004 - Prof. Dr. Stefan Böttcher Folie 21 Threads und Synchronisation Threads = nebenläufige leichte Prozesse op1( ) op2( ) class Kreuzung {... synchronized void überquere( ) {... } } synchronized : schützt kritische Abschnitte, läßt nur einen Thread zur Zeit eintreten - SS 2004 - Prof. Dr. Stefan Böttcher Folie 22 Prof. Dr. Stefan Böttcher 11
MicroSoft s Alternative zu JSP ASP serverseitige Skriptsprache zur Generierung von HTML Mischung von HTML und Kontroll-Code (Schleifen,...) <% Code-Einbindung wie JSP-Skriptlet %> benutzt ASP-Komponenten (z.b. in Visual Basic), generiert Objekte zu diesen Komponenten und ruft für diese generierten Objekte Funktionen der Komponente auf Response für ASP Ausgabe ( wie response Variable bei JSP ) spezielle Kommandos für Datenbankzugriff Einbettung verschiedener MS-Sprachen möglich, z.b. VB - SS 2004 - Prof. Dr. Stefan Böttcher Folie 23 ASP - Beispiel <HTML> <BODY> <% Dim obj Set obj = Server.CreateObject("asp1.hallo") Dim str str = obj.hallowelt Response.Write str %> </BODY> </HTML> ' tests new Development Web Function hallowelt() As String hallowelt = "Hello, World!" End Function Active Server Page asp1.asp Visual Basic ASP Komponente hallo.cls - SS 2004 - Prof. Dr. Stefan Böttcher Folie 24 Prof. Dr. Stefan Böttcher 12
PHP Hypertext Processor (PHP) Alternative zu JSP serverseitige Skriptsprache zur Generierung von HTML Mischung von HTML und Kontroll-Code (Schleifen,...) spezielle Kommandos für Datenbankzugriff im Gegensatz zu JSP und ASP keine Komponenten eher für kleinere Web-Applikationen - SS 2004 - Prof. Dr. Stefan Böttcher Folie 25 PHP-Beispiel <html> <body> Eine Tabelle mit PHP ausgegeben <?php $db = mysql_connect("localhost", "root"); mysql_select_db("mydb",$db); $result = mysql_query("select * FROM Auftrag",$db); echo "<table border=1>\n"; echo "<tr><td>name</td><td>position</tr>\n"; while ($myrow = mysql_fetch_row($result)) { printf( "<tr><td>%s</td><td>%s</td></tr>\n", $myrow[1], $myrow[2] ); } echo "</table>\n";?> </body> </html> - SS 2004 - Prof. Dr. Stefan Böttcher Folie 26 php-einbettung DB-Verbindung Query HTML-Tabelle ein Result lesen und ausgeben eingebetteter HTML-Code Prof. Dr. Stefan Böttcher 13
Extended Server Pages (XSP) Trennung von Layout, Logik und Daten Layout (.xsl-file) Daten (.xml-file) Logik (Java-Code gekapselt in XML) Teil von cocoon - SS 2004 - Prof. Dr. Stefan Böttcher Folie 27 Arten von Webserver-Technologien Server-Technologien für Web-Server statische Webseiten dynamisch generierte Seiten Layout-orientiert Logik-orientiert nur HTML PHP JSP ASP XSP CGI Servlet - SS 2004 - Prof. Dr. Stefan Böttcher Folie 28 Prof. Dr. Stefan Böttcher 14
Überblick über Server-Technologien Server-Technologien für Webserver XSP Active Server Pages (ASP) Mischt Java und XML mischt Programm und HTML Java Server Pages (JSP) mischt Java und HTML Servlet generiert HTML Java portabel & typsicher PHP CGI generiert HTML mischt Programm und HTML beliebige Programmiersprache nur HTML statische Webseiten - SS 2004 - Prof. Dr. Stefan Böttcher Folie 29 Zusammenfassung: Internet-Technologien Webserver-Technologien XSP Active Server Pages Java Server Pages (JSP) Servlet generiert HTML PHP CGI generiert HTML nur HTML nur HTML XML+XSL Dokumentsprachen Datenbankkopplung Client-PGM ruft DB-Server Web-Server ruft Datenbankserver nur HTML HTML+Javascript HTML+Applets Client-Technologien - SS 2004 - Prof. Dr. Stefan Böttcher Folie 30 Prof. Dr. Stefan Böttcher 15