JSP - of Ralf Gitzel

Werbung
Einführung
Ralf Gitzel
[email protected]
1
Übersicht
Ralf Gitzel
[email protected]
2
Übersicht
•
•
•
•
•
•
JSP Konzept
JSP Beispiel Szenario
Java Code in JSPs
Unsere erste JSP
Skriptfreie Seiten
JSTL
3
JSP Konzept
Ralf Gitzel
[email protected]
4
Was ist eine Java Server Page?
• HTML Seite mit besonderen Befehlen,
die Zugriff erlauben auf Java Objekte
• Wird serverseitig verarbeitet, beim Client
kommt reines HTML an
• JSP kann alles, was ein Servlet auch
kann
5
Was ist eine JSP wirklich?
HTML
Entwurf
Entwicklung
JSP-Datei
Autom. Generierung
Servlet
Autom. Deployment
HTML
Seite
nach Entwurf
Container
(Application Server)
Servlet
6
JSP Beispiel Szenario
Ralf Gitzel
[email protected]
7
Entwurf für die HTML-Seite (1)
8
Entwurf für die HTML-Seite (2)
9
HTML-Code
Zu ersetzen
durch ermittelte
Werte
Zu ersetzen
durch ermittelte
Werte
Zu ersetzen
durch ermittelte
Werte
10
JSP als Teil einer Web-App
Request
Response
Kontrolle (über
die Anfrage)
Modell (erledigt
die Arbeit)
Container
(Application Server)
Controller
Servlet
Java
Business Logic
JSP
Servlet
Ansicht (zeigt
das Ergebnis)
11
Entwicklung der Geschäftslogik
12
Übergabewert an die JSP
13
Controller Servlet
???
Modell befüllen
und ausführen
Parameter
auslesen
14
Klasse: jsp.MaintenancerMasterController-Stage1
Java Code in JSPs
Ralf Gitzel
[email protected]
15
Verschiedene Möglichkeiten,
Java-Code in JSPs zu verwenden
•
•
•
•
Scriptlets
Declarations
Expressions
Directives
16
Scriptlets
• Kleine Java Code Blöcke im HTML Code
• Werden bei der Servlet-Erstellung aus
dem JSP-Code nach einem festen
Muster eingefügt
<% … Java Code … %>
17
„Hello World“ JSP
Semikolon!
18
FirstScriptlet.jsp
Declarations
• Erlaubt die Definition von nicht-lokalen
Variablen, Methoden usw.
<%! Deklaration %>
19
Beispiel
FirstDeclaration.jsp
20
Expressions
• Beliebige Java-Ausdrücke
(=Expressions), deren Ergebnis dann im
HTML Ausgegeben wird
• Vereinfacht gesagt: Ausdrücke sind eine
ganz besondere Kategorie, z.B.:
– Mathematische Operationen
– Methoden mit Rückgabewert != void
– Strings
– Variablen
21
Expressions
Kein
Semikolon!
22
Directives
• Verschiedene Hilfsaufgaben
• Für uns wichtig: Import von Java-Paketen
<%@ page import=„…“ %>
23
Directive-Beispiel
24
Umsetzung im Servlet
• Import-Directives: Als imports am Kopf
der Klassendatei
• Declarations: Im Klassenrumpf
• In der „do[Post/Get]-Ersatzmethode“:
– HTML-Zeilen: out.println(„….“);
– Scriplets: 1-zu-1 an der entsprechenden
Stelle [Damit sind Variablen lokal]
– Expressions: out.println(Expression);
25
Gruppendiskussion
• Warum einmal ein Semikolon (Scriptlets),
warum einmal nicht (Expressions)?
• Hinweis: Antwort steht auf der vorherigen
Folie!
26
Interessante Fragen
• Zugriff auf andere Java Elemente
• Kommunikation mit Servlets
27
Einige implizite Objekte
out
request
JspWriter, im Grunde
zu verwenden wie der
Writer der Response!
HttpServletRequest
response
HttpServletResponse
session
HttpSession
application
ServletContext
config
ServletConfig
Throwable
Für Error Seiten
28
ServletConfig
Bis auf eine
Zeile wie bei
normalen
Servlets
29
Unsere erste JSP
Ralf Gitzel
[email protected]
30
Erinnerung
31
Änderung am Controller Servlet
Klasse: jsp.MaintenanceControllerServlet
32
JSP zum Auswerten der
Ergebnisse
33
Gruppendiskussion
• Was fällt am JSP-Code der vorherigen
Seite (unangenehm) auf?
• Wie gut kann man wohl mit JSPs
arbeiten, die andere entwickelt haben?
• Wirken meine Fragen suggestiv?
34
Skriptfreie Seiten
Ralf Gitzel
[email protected]
35
Motivation
• Webdesigner haben wahrscheinlich
Schwierigkeiten, den Java-HTML Mix
einer JSP zu verstehen
• Alternative JSP Konzepte erlauben die
Vermeidung von Java Code
• Anmerkung: Es folgt ein (nur kurzer)
Einblick
36
Ersatz für Scriptlets
• JSP Expression Language
• Java Standard Template Library (JSTL)
Tags
37
JSP Expression Language
• Wurde bei JSP 2.0 hinzugefügt
• Hier nur ein Abriss der für uns wichtigen
Befehle!
• Wir verwenden EL in Kombination mit
JSTL
38
Expression Language
${Expression}
Hier kommt keine Java
Syntax zum Einsatz!
(Erinnert eher an XSLT.)
Rückgabewert wird an
dieser Stelle in der HTML
Seite eingefügt
39
Ausgewählte Expressions
${x[“y”]}
Zugriff auf eine
Map
X=Map-Name
Y=Schlüssel
Zugriff auf eine
Bean
Zugriff auf eine
List bzw. ein
Array
X=Objekt-Name
Y=Property Name
X=List-Name
Y=Array/List Index
(Mit oder ohne
Anführungszeichen)
40
Anmerkung zur Notation
${x[“y”]}
${x[‘y’]}
${x.y}
Sinnvoll, wenn
ganze Expression
in einem String
steht!
Nicht mit ArrayIndex!
41
Beispiel
InstallInfo = HashMap
emails = ArrayList
Advise = Bean
42
Code: jsp.MaintenanceController_EL, index3.html
Beispiel
InstallInfo = HashMap
emails = ArrayList
Advise = Bean
Code: EL-Results.jsp
43
Hinweis: Property Names
Definiert das Property mit dem Namen „newCost“
(Man beachte die Groß- und Kleinschreibung!!)
44
Implizite Objekte in EL
requestScope
Map mit Request-Attributen
sessionScope
Map mit Session-Attributen
applicationScope
Map mit Application-Attributen
param, paramValues
Maps mit den Request-Parametern
(paramValues bei mehreren Werten
zu einem Namen)
initParam
Map mit Context Init Parametern
(nicht Servlet Init Parametern)
45
Beispiel Implizite Objekte
Code: EL-Results.jsp
46
JSTL
Ralf Gitzel
[email protected]
47
JSTL Tags
• Erlauben Kontrollstrukturen ohne Java
Code
• Müssen explizit importiert werden
• Es können auch eigene Tags
geschrieben werden. (Behandeln wir
nicht!)
48
Import
Herunterladen:
jstl-impl-1.2.jar
jstl-api-1.2.jar
Als Library in das
Projekt einfügen
1. Wie servlet.jar
2. Als Kopie in WEB-INF/lib
3. In Eclipse: Refresh! (Sonst
ignoriert Eclipse diese
manuell kopierten Dateien!)
Anmerkung: Dies ist nur eine Möglichkeit! Den Rest lassen wir
Aus Zeitgründen weg.
In die JSP
importieren
s. Beispiel nächste Folie
49
Beispiel
Import der JSTL („uri“) und
lokale Verwendung unter dem
Namen „c“ („prefix“)
Einsatz eines Tags
aus der JSTL
50
Source: JSTLTest.jsp
JSTL Tags
c:out
Ausgabe von Werten. Gut, um Usereingaben
auszugeben (verhindert „cross-site scripting“ etc.)
<c:forEach>
Iteriert über Arrays und Collections. Beispiel folgt
<c:if>
Bedingtes Ausführen von Anweisungen. Beispiel
folgt (oder: chose/when/otherwise)
<c:url>
Einfaches URL Rewriting in einer JSP (URL wird
als value-Attribut angegeben)
51
c:forEach
Datenquelle
Zugriff auf das aktuelle
Element
Variable für das aktuelle
Element
Quelle: FancyDisplay.jsp (wird vom DataProducer Servlet aufgerufen)
52
c:if
if
Quelle: FancyDisplay.jsp (wird vom DataProducer Servlet aufgerufen)
53
Lernziele
Ralf Gitzel
[email protected]
54
Lernziele
• Beziehung JSP und Servlet
• JSP Wiederholung
• JSPs als Ausgabemedium für
Servlet/EJB Daten verwenden können
• Existierende JSPs verstehen und
verändern können
55
Gruppenaufgabe
Ralf Gitzel
[email protected]
56
Zielsetzung
• Ein Servlet produziert Daten in Form von
ArrayLists und fügt diese als Attribute in
das Request Objekt (als Zahlen)
• Weiterleitung an eine JSP:
– Ausgabe der Daten in einer Liste
– Zahlen, die größer sind als 10 sollen farblich
hervorgehoben werden
– Primzahlen sollen fett gedruckt werden
57
Primzahlen ???
• Es ist eine Klasse zu schreiben, die
Primzahlen erkennt
• Diese soll in der JSP verwendet werden (z.B.
über ein Scriptlet)
• Bonusaufgaben:
– Es wird ein Objekt ZahlData in der Liste übergeben
statt eine echte Zahl. Das Objekt enthält eine
Methode IstPrimzahl.
– Einsatz der als Bonusmaterial eingestuften Folien
58
Bonus Material
Freiwillig*
* = man braucht es nicht in der Klausur, es kann aber in der Klausur nützlich sein!
Ralf Gitzel
[email protected]
59
Variablen-Counter in c:forEach
Quelle: FancyDisplay.jsp (wird vom DataProducer Servlet aufgerufen)
60
Mehr zu c:forEach
Quelle: FancyDisplay.jsp (wird vom DataProducer Servlet aufgerufen)
61
Anmerkung: Templates einfügen
• Man kann HTML-Fragmente
wiederverwenden
• <jsp:include> Tag
• s. auch: HeaderDemo.jsp
62
Herunterladen