Dynamische Webseiten mit JavaServer Pages (JSP) einige Links: java.sun.com/products/jsp JavaServer Pages java.sun.com/products/servlets Java Servlet Technologie www.micromata.de Schrödinger (Download) jsp.micromata.de Schrödinger (Forum) jakarta.apache.org Tomcat www.jsp-develop.de deutsches JSP-Portal www.netbeans.org IDE inkl. Tomcat www.eclipse.org IDE www.coreservlets.com Marty Hall -Webseite, enthält Buch CoreServlets and JSP, 1.Aufl. (engl.), ca. 10 MB www.moreservlets.com mehr von Marty Hall www.heise.de/ix/artikel/2000/07/152/ JSP-Tutorial (deutsch, 3 Teile) validator.w3.org XHTML-Validator 1
Clientseitige Techniken Client-Rechner mit Web-Browser http://www.xyz.ab/hallo.html Anfrage (request) Antwort (response) Server-Rechner mit Web-Server hallo.html Dateien Clientseitige Techniken: HTML/XHTML CSS, JavaScript, JScript, VBScript <html>... <body> Hallo, hallo! </body> </html> hallo.html 2
Serverseitige Techniken am Beispiel von JavaServer Pages Client-Rechner mit Web-Browser Clientseitige Techniken: HTML/XHTML CSS, JavaScript, JScript, VBScript http://www.xyz.ab/login.jsp Anfrage (request) Antwort (response) <html>... <body> Login okay! </body> </html> Server-Rechner mit Web-Server und JSP-Server (z.b. Tomcat) Serverseitige Techniken: JSP, Servlets, CGI, SSI, ASP, PHP login.jsp login.jsp Überprüfung Ergebnis Dateien Datenbank 3
JSP-Server BEA WebLogic Engine IBM Webshere JBoss JRUN Resin ServletExec Tomcat ( Referenzimplementation) 4
Servlet / JSP - Standards und Tomcat Versionen Jahr Servlet JSP Tomcat (reference platform) 1999 2.2 1.1 3.x (aktuell 3.3.2) 2001 2.3 1.2 4.x (aktuell 4.1.30) 2003 2.4 2.0 5.x (aktuell 5.0.19) 5
JavaServer Pages Bestandteile Scripting-Elemente elementare Elemente - zum Formulierung von Java-Anweisungen (JSP-Scriptlets) - zur Formulierung und Anzeige von Ausdrücken - zur Deklaration von Variablen, Methoden, Klassen - zur Formulierung von Kommentaren Direktiven beeinflussen die Gesamtstruktur der aus den JSP's erzeugten Servlets Aktionen beziehen sich auf Java-Objekte, die erzeugt, ausgeführt oder verändert werden können 6
JSP Syntax Skripting-Elemente Direktiven Aktionen <%... %> <jsp:scriptlet... /> <%=... %> <jsp:expression... /> <%!... %> <jsp:declaration... /> <%--... --%> <%@ page... %> <jsp:directive.page... /> <%@ include... %> <jsp:directive.include... /> <%@ taglib... %> <jsp:directive.taglib... /> <jsp:usebean... > <jsp:setproperty... > <jsp:getproperty... > <jsp:include... > <jsp:forward... > <jsp:params... > <jsp:param... > <jsp:fallback... > <jsp:plugin... > benutzerdefiniert 7
JSP-Skriptlet <%... %> oder <jsp:scriptlet... /> zwischen diesen Tags eingebettete Codefragmente einer gültigen Scriptingsprache (z.b. Java) werden auch Scriptlet genannt. <%-- date1.jsp --%> <html> <body> <% // Dies ist einzeiliger Kommentar %> <% java.util.date d; %> <hr> <% d = new java.util.date(); out.println( "Heutiges Datum: <em>" + d + "</em>" ); %> </body> </html> In einer jsp können beliebig viele Java-Scriptlets eingebaut werden. Es können Variablen deklariert werden, auf die in anderen Skriptlets zugegriffen werden kann. Es kann auf Standardbibliotheken zugegriffen werden Java-Code kann auch über mehrere Scriptlets fortgesetzt werden ( s. for.jsp) 8
JSP-Ausdruck <%=... %> oder <jsp:expression... /> zwischen diesen Tags kann ein Ausdruck, eine Variable oder ein Methodenaufruf eingefügt werden. Der eingebettete Text wird ausgewertet und das Ergebnis wird dann in einen String umgewandelt und an der entsprechenden Stelle der HTML-Ausgabe eingefügt. <%-- date3.jsp --%> <html> <body> <hr> Heutiges Datum: <em> <%= new java.util.date() %> </em> <% double zufall = java.lang.math.random() * 1000; %> <h4>zufallszahl 1 : <%= zufall %> <h3>zufallszahl 2 : <%= zufall + java.lang.math.random() * 100%> </body> </html> Beachte: im Scriptlet ist das Semikolon erforderlich, im Ausdruck ist es nicht erlaubt. 9
Java-Code über mehrere Scriptlets hier ein Beispiel mit Java-Code, der über zwei Scriptlets hinweg vervollständigt wird: <%-- for.jsp --%> <html> <body> <% for( int i = 1; i < 6; i++ ) { %> <h4>zufallszahl <%= i %> : <%= java.lang.math.random() %></h4> <% } %> </body> </html> 10
11
JSP-Deklaration <%!... %> oder <jsp:declaration... /> Deklarationen werden für Konstanten, Variablen, Methoden und Klassen verwendet, die global in der JSP gültig sind. Achtung: Variableninhalte bleiben erhalten, auch wenn die JSP von mehreren Benutzern aufgerufen wird! <%-- zugriff.jsp --%> <html> <body> <%! int anzahlzugriffe = 0; %> <%! public int getzugriffe() { return anzahlzugriffe; } %> <h1>zugriffe auf diese Seite</h1> <h2>seit Start des Servletcontainers( Tomcat) bzw. Neukompilierung der jsp: <% anzahlzugriffe++; %> <%= getzugriffe() %> </h2> </body> </html> 12
JSP-Kommentar <%--... --%> Innerhalb dieser Tags stehender auch mehrzeiliger Text dient zur Kommentierung. Er wird nicht in die generierte HTML-Seite übernommen. <%-- Kommentar, auch mehrzeilig möglich 2. Zeile --%> Damit können auch JSP-Anweisungen auskommentiert werden: <%--<%=47-11%>--%> 13
<%-- kommentar.jsp -->% <%-- Dieser Kommentar wird nicht in die HTML-Seite hineingeneriert, er kann mehrzeilig sein --%> <%-- Was passiert hier? <%= application.getserverinfo() %> Hier wird k e i n Kommentar generiert. So kann man JSP-Zeilen auskommentieren. --%> <!-- was macht dies? <%= application.getserverinfo() %> Hier wird Text generiert, der in diesen HTML-Kommentar übernommen wird. --> <%=47-11%> <% // einzeiliger Java-Kommentar kann auch so formuliert werden %> <%! // auch Kommentar %> <% /* so gehts auch sogar mehrzeilig */ %> 14
JSP-Direktiven (directives) Direktiven sind Mitteilungen an den Servlet-Container bzw. die JSP-Engine, um damit die Gesamtstruktur der generierten Servlets zu beeinflussen. Sie produzieren keine für den Benutzer sichtbaren Ausgaben in der erzeugten HTML-Seite. Direktiven können innerhalb einer JSP an jeder Stelle geschrieben werden; sinnvoll ist es, sie am Anfang einer JSP zu platzieren. 15
Syntax der JSP-Direktiven <%@ directive { attribute="value" }* %> <jsp:directive.directive { attribute="value" }* /> anstelle von können auch ' verwendet werden. Mehrere values für ein Attribut werden hintereinander durch Komma getrennt geschrieben. In JSP 1.2 sind 3 Direktiven definiert: include page taglib zum Einfügen von Dateieninhalten zur Übersetzungszeit zum Beeinflussen des Übersetzungsprozesses zur Definition eigener Tags Bsp: <%@ page import="java.util.*, java.sql.*" %> oder <jsp:directive.page import="java.util.*, java.sql.*" %> 16
JSP page Direktive Syntax: <%@ page page_directive_attr_list %> oder <jsp:directive.page page_directive_attr_list /> page_directive_attr_list ::= {language="scriptinglanguage"} {extends="classname"} {import="importlist"} {session="true false"} {buffer="none sizekb"} {autoflush="true false"} {isthreadsafe="true false"} {info="info_text"} {errorpage="error_url"} {iserrorpage="true false"} {contenttype="ctinfo"} {pageencoding="peinfo"} Die page-direktive dient dazu, Einstellungen für eine jsp-übersetzungseinheit (jsp-quelldatei und alle Dateien, die mit einer include-direktive eingefügt worden sind) festzulegen. 17
Attribut Wert Default Beispiel language Scriptsprache "java" language="java" extends Klassenname - extends="mylib.myjsp" import Name der Klasse "java.lang.*, import="java.sql.*" oder des Pakets javax.servlet.*, javax.servlet.jsp.*, javax.servlet.http.*" session "true" od. "false" "true" session="false" buffer Größe des "8kb" buffer="16kb" Zwischenspeichers oder "none" autoflush "true" od. "false" "true" autoflush="false" isthreadsafe "true" od. "false" "true" isthreadsafe="false" info Zeichenkette - info="anmeldeformular" errorpage URL - errorpage="error.jsp" iserrorpage "true" od. "false" "false" iserrorpage="true" contenttype MIME-Typ text/html contenttype="text/xml"; Zeichensatz ISO-8859-1 charset="iso-8859-1" pageencoding Zeichensatz ISO-8859-1 charset="iso-8859-1" 18