WebServer-Technologien SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 1 Überblick über Internet-Technologien Server-Technologien XSP Datenbankkopplung Java Server Pages (JSP) Servlet generiert HTML PHP CGI generiert HTML nur HTML Client-PGM ruft DB-Server Web-Server ruft Datenbankserver nur HTML HTML+Javascript nur HTML HTML+Applets XML+XSL Dokumentsprachen Client-Technologien Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 2 Datenbanken und Informationssysteme 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 Datenbanken und Informationssysteme 2 - 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 Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 4 Datenbanken und Informationssysteme 2 Prof. Dr. Stefan Böttcher 2 Java Server Pages (Beispielausgabe) JSP-Verzeichnis Layout (+konstanter Inhalt) JSP-Seite dynamischer Inhalt Layout Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 5 JSP (Trennung von Design und Logik) Eingabe JSP-Web-Server JSP-Seite .class-Files Servlet (.java) Web-Seite (html) Java-Klasse(n) WebBrowser Ausgabe Client WebDesigner Programmierer Server Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 6 Datenbanken und Informationssysteme 2 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 ... Web-Seite (html) Clock.Java Client Server Datenbanken und Informationssysteme 2 - 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 ); } } Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 8 Datenbanken und Informationssysteme 2 Prof. Dr. Stefan Böttcher 4 Java Server Pages (Beispiel 1) <!-- clock0.jsp --> <!-- Diese Java Server Page funktioniert ohne eigenes Java-Programm --> <html> <body> Die aktuelle Zeit ist <%= new java.util.Date() %> </body> </html> JSP Ausdruck Datenbanken und Informationssysteme 2 - 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() ; } } // Clock.Java Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 10 Datenbanken und Informationssysteme 2 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"); <!-- JSP Skriptlet --> if ( teil == null || teil.equals("") ) 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> Datenbanken und Informationssysteme 2 - 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> // Ausschnitt aus bsplib.tld <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> Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 12 Datenbanken und Informationssysteme 2 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> Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 13 4. Apache-Webserver und CGI • Der Apache-Webserver • CGI-Skripte • Vergleich von CGI und Servlets Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 14 Datenbanken und Informationssysteme 2 Prof. Dr. Stefan Böttcher 7 Apache - Webserver C:\programme \Apache Group \Apache Client \htdocs GET willkommen.html /willkommen.html \Abteilung1 HTTP/1.0 WebseitenVonAbteilung1 \Abteilung2 WebseitenVonAbteilung2 \cgi-bin action = “cgi-bin/pgm1“ cgi-Programme \conf httpd.conf Server Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 15 CGI: Interaktion mit HTML-Forms Protokoll , IP-Nummer , Port , Web-Seite Textfeld Passwortfeld Submit-Knopf Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 16 Datenbanken und Informationssysteme 2 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> Datenbanken und Informationssysteme 2 - 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 Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 18 Datenbanken und Informationssysteme 2 Prof. Dr. Stefan Böttcher 9 Common Gateway Interface (CGI) Eingabe HTMLSeite ruft Browser Client CGIgenerierte Programm Seite Server 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 Datenbanken und Informationssysteme 2 - 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. Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 20 Datenbanken und Informationssysteme 2 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 Datenbanken und Informationssysteme 2 - 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 Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 22 Datenbanken und Informationssysteme 2 Prof. Dr. Stefan Böttcher 11 ASP MicroSoft‘s Alternative zu JSP • 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 Datenbanken und Informationssysteme 2 - 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> Active Server Page asp1.asp ' tests new Development Web Function halloWelt() As String halloWelt = "Hello, World!" End Function Visual Basic ASP Komponente hallo.cls Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 24 Datenbanken und Informationssysteme 2 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 Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 25 PHP-Beispiel <html> <body> Eine Tabelle mit PHP ausgegeben php-Einbettung <?php $db = mysql_connect("localhost", "root"); DB-Verbindung mysql_select_db("mydb",$db); $result = mysql_query("SELECT * FROM Auftrag",$db); Query echo "<table border=1>\n"; HTML-Tabelle echo "<tr><td>Name</td><td>Position</tr>\n"; while ($myrow = mysql_fetch_row($result)) ein Result lesen { printf( "<tr><td>%s</td><td>%s</td></tr>\n", und ausgeben $myrow[1], $myrow[2] ); } echo "</table>\n"; eingebetteter HTML-Code ?> </body> </html> Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 26 Datenbanken und Informationssysteme 2 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 Datenbanken und Informationssysteme 2 - 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 nur HTML PHP JSP ASP XSP Logik-orientiert CGI Servlet Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 28 Datenbanken und Informationssysteme 2 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 PHP CGI generiert HTML nur HTML portabel & typsicher mischt Programm und HTML beliebige Programmiersprache statische Webseiten Datenbanken und Informationssysteme 2 - 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 Datenbankkopplung Client-PGM ruft DB-Server Web-Server ruft Datenbankserver nur HTML HTML+Javascript nur HTML HTML+Applets XML+XSL Dokumentsprachen Client-Technologien Datenbanken und Informationssysteme 2 - SS 2004 - Prof. Dr. Stefan Böttcher – Folie 30 Datenbanken und Informationssysteme 2 Prof. Dr. Stefan Böttcher 15