Folien - Fakultät Informatik Uni Stuttgart

Werbung
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Java: Kapitel 10
Einführung in die Java Platform,
Enterprise Edition (Java EE):
Servlets und Java Server Pages
Programmentwicklung WS 2008/2009
Holger Röder
[email protected]
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Überblick über Kapitel 10
„ Überblick über die Java EE
„ Statische und dynamische Web-Seiten, HTTP GET und POST
„ Servlets
† Parameterzugriff
† Deployment von Web-Anwendungen
† Request- und Response-Objekte
† Cookies
† Sitzungen
„ Java Server Pages (JSP)
† Bestandteile von JSPs
† Integration von Servlets und JSPs
2
© Holger Röder
„ Die Java Platform, Enterprise Edition (Java EE; früher J2EE) ist eine
Entwicklungsplattform für serverbasierte Java-Anwendungen.
„ Java EE sieht ein verteiltes, mehrschichtiges und
komponentenbasiertes Architekturmodell vor.
„ Java EE ist insbesondere gut geeignet als Entwicklungsplattform für
Web-Anwendungen.
Programmentwicklung
Winter 2008/2009
Überblick über die Java EE
se
3
© Holger Röder
Programmentwicklung
Winter 2008/2009
Java EE Application Model
se
Quelle: Sun Microsystems
4
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Java EE Server – Infrastruktur
„ Ein Java EE Application Server wird als Laufzeitumgebung für Java EEKomponenten benötigt. Der Application Server stellt (häufig benötigte)
Infrastruktur-Dienste für die eigentliche Anwendung bereit, z. B.
† Lebenszyklus-Verwaltung
† Sicherheit, Persistenz, Transaktionsverwaltung,
Namens-/Verzeichnisdienste
† Kommunikation zwischen Komponenten
„ Application Server umfassen meist zwei (logisch getrennte) Container:
† Web Container: Laufzeitumgebung für Java Server Pages und
Servlets
† EJB Container: Laufzeitumgebung für Enterprise Java Beans
„ Am Markt sind viele verschiedene Java EE Application Server
verfügbar
† Vollständige Application Server: Sun Java System Application
Server, IBM Websphere, Oracle, BEA WebLogic, JBoss etc.
† Nur Web Container: Apache Tomcat, Jetty etc.
5
© Holger Röder
„ Apache Tomcat ist ein frei verfügbarer Web Container:
† Unterstützung für Servlets und JSPs
† Integrierter HTTP-Server
† Komplett in Java geschrieben, Open Source
† http://tomcat.apache.org/
Programmentwicklung
Winter 2008/2009
Web-Container: Beispiel Apache Tomcat
se
6
© Holger Röder
Winter 2008/2009
Statische vs. dynamische Web-Seiten
„ Klassische statische Web-Seiten:
† Alle Dokumente (z. B. HTML-Seiten, Grafiken) sind statisch und
werden vom Web-Server an den Client (Web-Browser)
übermittelt.
HTTP Request
<html>
<title>
...
HTTP Response
Web-Browser
Benutzer
Programmentwicklung
Web-Server
se
7
© Holger Röder
Winter 2008/2009
Statische vs. dynamische Web-Seiten (2)
„ Dynamische Web-Seiten:
† Statisch vorliegende Dokumente (z. B. Grafiken) werden vom
Web-Server direkt zurückgeliefert.
† Dynamische Web-Seiten werden im Web Container (des
Application Servers) bei jeder Anfrage dynamisch erzeugt
HTTP Request
<html>
<title>
...
HTTP Response
Programmentwicklung
Web-Server
se
HTTP Request:
Parameter
Application Server,
Web Container
Servlet
oder JSP
Web-Browser
Benutzer
HTTP Response:
Dynamischer
Inhalt
Datenzugriff
Datenbank
8
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Java Servlets – Überblick
„ Mit Hilfe der Java Servlet API können dynamische Web-Seiten
implementiert werden.
„ Servlets sind Java-Objekte, deren Klasse das Interface
javax.servlet.Servlet implementiert.
„ Servlets werden innerhalb eines Web Containers ausgeführt. Der Web
Container übernimmt das Lebenszyklus-Management des Servlets
(Instanziierung, Aufruf, Zerstörung).
„ Servlets können prinzipiell beliebige Arten von Anfragen beantworten,
die an den Server gestellt werden (Request-Response-Prinzip).
„ In der Praxis wird in den meisten Fällen die abstrakte Basisklasse
HttpServlet verwendet. Ein HttpServlet beantwortet HTTPAnfragen, die z. B. durch einen Web-Browser gestellt werden.
† Servlets bekommen vom Client Parameter im Request-Objekt
übergeben.
† Servlets erzeugen meistens HTML-Code, der als Antwort im
Response-Objekt an den Client zurückgeliefert wird.
9
© Holger Röder
Winter 2008/2009
Request-Response-Prinzip
„ Der Web-Browser sendet einen Request (mit
Parametern) an den Web Container.
„ Der Web Container ruft das Servlet auf und
übergibt den Request.
Web Container
Request
Programmentwicklung
Servlet
se
Geschäftslogik (in
„Standard-Java“
implementiert)
Response
„ Das Servlet erstellt dynamisch die Folgeseite
und liefert diese an den Web-Browser zurück.
10
© Holger Röder
Winter 2008/2009
Aufgaben des Servlets
Request
„Aufgabe 1“
Durchführung der im Request angeforderten Tätigkeiten
„ Geschäftslogik anwenden, Daten speichern etc.
Programmentwicklung
Dynamische Erzeugung des Antwortdokuments
„ Meistens HTML, Rückgabe über Response-Objekt
se
„Aufgabe 2“
Response
11
© Holger Röder
„ Wichtig: Java EE ist nur eine
Spezifikation. Die eigentliche
Implementierung der Klassen
ist Teil des Application
Servers.
Programmentwicklung
Winter 2008/2009
Servlet-Hierarchie
se
12
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Servlet-Lebenszyklus
„ Als Laufzeitumgebung ist der Web Container ist für das LebenszyklusManagement der Servlets verantwortlich.
„ Bei der ersten Anfrage wird das Servlet zunächst geladen und
initialisiert
† Aufruf der Methode init() des Servlets
„ Alle Anfragen werden an die Servlet-Instanz weitergegeben
† Generisch (in der Schnittstelle Servlet definiert):
service(ServletRequest req, ServletResponse res)
† Vereinfachung für HTTP-Anfragen (in HttpServlet definiert):
doGet(HttpServletRequest req,
HttpServletResponse resp)
doPost(HttpServletRequest req,
HttpServletResponse resp)
„ Wird der Server oder das Servlet gestoppt, entfernt der Web Container
die Servlet-Instanz.
† Aufruf der Methode destroy() des Servlets
13
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
GET- und POST-Anfragen
„ HTTP unterstützt verschiedene Request-Methoden: die Methoden GET
und POST kommen am häufigsten zum Einsatz.
„ GET-Anfragen:
† Parameter werden als Teil der URL übergeben:
http://localhost/helloWorld?name=carl&uni=stuttgart
† Bearbeitung in der Methode doGet() des Servlets
„ POST-Anfragen:
† Parameter werden als separater Teil der Requests übergeben,
sind nicht Teil der URL
† Einsatz bei Formularen, allgemein bei größeren Datenmengen und
Binärdaten
† Bearbeitung in der Methode doPost() des Servlets
14
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Beispiel: „Hello World“ als Java Servlet
public class HelloWorldServlet extends HttpServlet {
@Override
public void init() throws ServletException {
super.init();
// Eigene Initialisierung ...
}
}
Eigenes Servlet auf
Basis von HttpServlet
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
Zugriff auf Response-Objekt
throws ServletException, IOException {
PrintWriter out = response.getWriter();
HTML-Code, der als Antwort an
out.println("<html><body>");
den Browser geschickt wird
out.println("Hallo Welt!<br />");
out.format ("Heute ist der %1$te. %1$tB!", new Date());
out.println("</body></html>");
out.close();
“Geschäftslogik”: Aufruf
}
beliebiger Java-Objekte
15
„ Aufruf des Servlets im Web-Browser:
http://localhost:8080/HelloWorld/HelloWorldServlet
Programmentwicklung
Winter 2008/2009
© Holger Röder
Beispiel: „Hello World“ als Java Servlet (2)
se
„ Zuvor muss der Web Container entsprechend konfiguriert und das
Servlet im Web Container installiert werden.
16
© Holger Röder
„ Das Installieren einer Java EE Web-Anwendung in einem Web
Container wird als Deployment bezeichnet.
„ Eine Web-Anwendung kann Servlets, Java Server Pages, statische
HTML-Seiten, Grafiken etc. umfassen.
„ Zusätzlich wird eine Konfigurationsdatei benötigt (web.xml).
„ Die XML-Konfigurationsdatei wird als Deployment Descriptor
bezeichnet. Sie enthält Informationen über die Web-Anwendung, die
der Application Server für die Einbindung benötigt.
„ Web-Anwendungen werden häufig als einzelnes Archiv (WAR, Web
Application aRchive) ausgeliefert.
Programmentwicklung
Winter 2008/2009
Deployment von Web-Anwendungen
se
17
© Holger Röder
Deployment Descriptor
„ Beispiel: Auschnitt aus einer Konfigurationsdatei web.xml
Programmentwicklung
Winter 2008/2009
web.xml
se
<web-app id="HelloWorldServlet" ...>
<display-name>
HelloWorld</display-name>
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>pe.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorldServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
18
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Deployment aus Eclipse
„ Das Eclipse Web Tools Platform Project erleichtert die Entwicklung von
JEE-Anwendungen in Eclipse.
„ Das Deployment von Web-Anwendungen und die Kontrolle des
Application Servers ist auf diese Weise bequem aus Eclipse heraus
möglich.
„ http://www.eclipse.org/webtools/
19
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Auswertung von HTML-Formularen
„ HTML-Formulare werden zur Dateneingabe auf Web-Seiten verwendet.
<html>
Request-Methode POST
<body>
<form action="HelloWorldServlet" method ="post">
Eingabe:
<input type="text" name="eingabe" />
<br /><br />
Ausgabe: <!-- Hier steht die Ausgabe -->
<br /><br />
<input type="submit"
value="Text spiegeln" />
</form>
</body>
</html>
„ Der Inhalt der Eingabefelder wird häufig
per POST-Request an den Server übertragen.
20
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Auswertung von HTML-Formularen (2)
„ Die Bearbeitung im Servlet erfolgt in der Methode doPost().
„ Auf die mitgeschickten Parameter (Formularinhalte) kann über das
Request-Objekt zugegriffen werden.
...
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
Auslesen des HTMLthrows ServletException, IOException {
Parameters eingabe
PrintWriter out = response.getWriter();
String eingabe = request.getParameter("eingabe");
String html = erzeugeHtml(eingabe); /* Hilfsmethode */
out.println(html);
out.close();
}
...
21
se
Programmentwicklung
Winter 2008/2009
© Holger Röder
Anfrage-Objekte: ServletRequest
22
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
HttpServletRequest
„ Die Schnittstelle HttpServletRequest repräsentiert eine HTTPAnfrage.
„ Verschiedene Methoden bieten Zugriff auf die Bestandteile der
Anfrage, z. B.
† String getQueryString(): liefert den Query String, der nach
dem Aufrufpfad folgt (bei GET-Anfragen: Parameterliste).
† Enumeration getParameterNames(): liefert die Namen aller
Parameter
† String getParameter(String): liefert den Wert des
angegebenen Parameters
† String[] getParameterValues(String): liefert alle Werte
des angegebenen Parameters
„ Auch Informationen über den aufrufenden Client können ermittelt
werden, z. B.
† String getRemoteAddr(): liefert die IP-Adresse des Clients
† String getRemoteHost(): liefert den Hostnamen des Clients
23
© Holger Röder
„ Beispiel: Aufruf der folgenden URL im Web-Browser
http://localhost/ServletTest/MeinServlet?p1=AB&p2=2007
String s1 = req.getRemoteAddr();
// 127.0.0.1
String s2 = req.getQueryString();
// p1=AB&p2=2007
String s3 = req.getParameter("p2");
// 2007
Enumeration params = req.getParameterNames(); // p1, p2
...
Programmentwicklung
Winter 2008/2009
HttpServletRequest (2)
se
24
se
Programmentwicklung
Winter 2008/2009
© Holger Röder
Antwort-Objekte: ServletResponse
25
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
HttpServletResponse
„ Die Schnittstelle HttpServletResponse repräsentiert eine Antwort
des Servlets auf eine HTTP-Anfrage.
„ Die Methode getWriter() liefert ein PrintWriter-Objekt zurück,
über das Text (z. B. HTML-Code) als Antwort zurückgeliefert werden
kann.
PrintWriter out = response.getWriter();
out.println("<html><body> Hallo Welt! </body></html>");
...
„ Sollen Binärdaten zurückgeliefert werden (z. B. dynamisch erzeugte
Grafiken), kann ServletOutputStream getOutputStream()
verwendet werden.
„ Weitere Methoden:
† sendRedirect(String): leitet die Anfrage um
† setHeader(String, String): setzt einen HTTP-Header
26
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
HTTP-Cookies
„ Einfache Daten können vom Server als sogenanntes Cookie auf dem
Client gespeichert werden.
„ Bei jeder Anfrage sendet der Web-Browser die für diesen Server (bzw.
Pfad) gespeicherten Cookies mit.
„ Die „Nutzlast“ eines Cookies besteht im Wesentlichen aus einem
Name-Wert-Paar.
† Beispiele: userId=carlcoder, lastVisit=20070105-102334
„ Zusätzlich werden für jedes Cookie weitere Informationen gespeichert,
etwa der zugehörige Server, der zugehörige Pfad und das maximale
Alter des Cookies.
„ Cookies werden häufig zur (Wieder-)Erkennung des Clients oder für
das Sitzungsmanagement eingesetzt.
27
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Die Klasse Cookie – Cookies auslesen
„ Die Klasse Cookie im Paket javax.servlet.http bietet
Unterstützung bei der Verwendung von Cookies.
„ Alle vom Client mitgeschickten Cookies können über die Methode
Cookie[] getCookies() des Request-Objekts ermittelt werden. Die
in den einzelnen Cookies gespeicherten Daten können über dann über
entsprechende Methoden (getName(), getValue() etc.) ausgelesen
werden.
PrintWriter out = response.getWriter();
if (request.getCookies() != null) {
/* Cookies mitgeschickt */
for (Cookie c : request.getCookies()) {
String cookieName = c.getName();
String cookieValue = c.getValue();
out.println(cookieName + " = " + cookieValue);
}
28
© Holger Röder
Winter 2008/2009
Die Klasse Cookie – Cookies schreiben
„ Der Konstruktor Cookie(String, String) erzeugt ein neues Cookie
mit dem angegebenen Name-Wert-Paar als Inhalt.
„ Die Eigenschaften des Cookies können über entsprechende Methoden
gesetzt werden (setMaxAge(), setDomain() etc.).
„ Über die Methode addCookie(Cookie) des Response-Objekts kann
ein Cookie zum Client gesendet werden.
Cookie c = new Cookie("lastVisit", "20070105-102334");
c.setMaxAge(24*60*60); /* Max. 1 Tag speichern */
Programmentwicklung
response.addCookie(c);
se
29
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Sitzungen
„ HTTP ist zustandslos, jede HTTP-Anfrage erfolgt unabhängig von
anderen Anfragen.
„ In vielen Fällen sollen aufeinanderfolgende Anfragen eines Clients
dennoch miteinander verknüpft und ein gemeinsamer Zustand über die
Anfragen hinweg bewahrt werden.
„ Eine solche Folge von zusammenhängenden Anfragen wird als Sitzung
(Session) bezeichnet. Die Servlet API bietet Unterstützung für die
Sitzungsverwaltung (Session Management).
„ Wichtig: Die technische Realisierung der Sitzungsverwaltung bleibt
dem Web Container überlassen (z. B. durch Cookies, durch URLEncoding etc.)
30
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
HttpSession
„ Die Klasse HttpSession repräsentiert eine Client-Sitzung.
„ Über die Methode getSession() des Request-Objekts kann das
HttpSession-Objekt für den anfragenden Client ermittelt werden.
„ In der Session können beliebige Objekte (Object) unter einem
eindeutigen Namen (String) gespeichert und ausgelesen werden.
// Objekt in Session speichern
HttpSession session = request.getSession();
Double summe = 14.99;
session.setAttribute("gesamtsumme", summe);
...
// Objekt aus Session auslesen
HttpSession session = request.getSession();
Double summe = (Double) session.getAttribute("gesamtsumme");
„ Die Sitzung wird nach einer festgelegten Zeitspanne, innerhalb der
keine Anfragen vom Client kommen, ungültig.
session.setMaxInactiveInterval(5*60); // max. 5min Inaktivität
...
session.invalidate(); // alternativ: Session sofort ungültig machen
31
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Java Server Pages
„ Die alleinige Verwendung von Java Servlets kann problematisch sein:
† Präsentations- und Verarbeitungslogik werden vermischt.
† HTML-Entwicklungswerkzeuge sind nicht verwendbar.
„ Java Server Pages (JSPs) können hier Abhilfe schaffen. JSPs sind für
den Einsatz als Web-Seiten konzipiert, die sowohl statische als auch
dynamische generierte Teile beinhalten.
† Präsentations- und Verarbeitungslogik werden im Vergleich zu
normalen Servlets strikter getrennt.
† Dynamische Inhalte werden über spezielle JSP Tags eingebunden.
† Die fachliche Verarbeitung erfolgt in Komponenten (z. B. Java
Beans).
„ Technisch betrachtet sind auch JSPs Servlets: beim ersten Aufruf
einer JSP wird diese in ein Servlet übersetzt und kompiliert.
32
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
JSP-Beispiel
„ Normaler HTMLCode
„ JSP-page-Direktive
<%@ page ... %>
„ Java-Code,
eingeschlossen in
<% ... %> Tags
„ out und request
stehen als Objekte
direkt zur
Verfügung
index.jsp
<%@ page language="java"
contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<html>
<head>
<title>Text spiegeln</title>
</head>
<body>
<form method ="post">
Eingabe:
<input type="text" name="eingabe" value="" />
<br /><br />
Ausgabe: <strong>
<%
String eingabe = request.getParameter("eingabe");
if (eingabe != null) {
String ausgabe = new StringBuilder(eingabe)
.reverse().toString();
out.print(ausgabe);
}
%>
</strong>
<br /><br />
<input type="submit" value="Text spiegeln" />
</form><br />
</body>
</html>
33
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
JSPs und JavaBeans
„ JavaBeans werden in JSPs häufig für die fachliche Verarbeitungslogik
eingesetzt. Die Einbindung von JavaBeans erfolgt über den Tag
<jsp:useBean ... />
Lebensdauer (page,
request, session
application)
Java-Klassenname
...
<body>
<form method ="post">
<jsp:useBean id="reverseStringBean" class="ReverseStringBean" scope="session" />
<jsp:setProperty name="reverseStringBean"
property="string" value="<%= request.getParameter("eingabe") %>" />
Eingabe:
<input type="text" name="eingabe"
value="<jsp:getProperty name="reverseStringBean" property="string"/>" />
<br /><br />
Ausgabe: <strong>
<jsp:getProperty name="reverseStringBean" property="reverseString"/>
</strong>
<br /><br />
Zugriff auf die JavaBean
<input type="submit" value="Eingabe spiegeln" />
</form><br />
</body>
...
34
© Holger Röder
Winter 2008/2009
Programmentwicklung
JavaBeans
ReverseTextBean.java
public class ReverseStringBean {
String string = "";
public void setString(String s) {
if (s != null)
string = s;
}
public String getString() {
return string;
}
public String getReverseString() {
return new StringBuilder(string)
.reverse().toString();
}
}
se
„ JavaBeans sind „normale“ JavaKlassen
„ Auf bestimmte Eigenschaften
(Properties) der JavaBean kann
aus der JSP heraus zugegriffen
werden.
„ In der JavaBean-Klasse
existieren setX(...) und/oder
getX()-Methoden für die
Property X
„ Der Zugriff in der JSP erfolgt
über die JSP-Tags
<jsp:setProperty> und
<jsp:getProperty>
35
© Holger Röder
„ Die Properties einer JavaBean können fest mit den im Request-Objekt
gespeicherten Parametern verknüpft werden.
...
<jsp:setProperty name="reverseStringBean" property="*" />
...
„ Mit * werden alle Properties mit gleichnamigen Parametern verknüpft;
alternativ können auch einzelne Parameter angegeben werden.
Programmentwicklung
Winter 2008/2009
JSPs und JavaBeans (2)
se
36
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Wichtige JSP-Direktiven und -Tags
„ Include-Direktive
† Syntax: <%@ include file="..." %>
† Fügt (einmalig) vor dem Kompilieren der JSP den Inhalt einer
Datei ein
„ Include-Tag
† Syntax: <jsp:include page="..." />
† Fügt beim Aufruf der JSP den Inhalt der angegebenen statischen
oder dynamischen Ressource (z. B. JSP) ein
„ Forward-Tag
† Syntax: <jsp:forward page="..." />
† Leitet die Client-Anfrage an die angegebene HTML-Datei, JSP
oder das Servlet zur Verarbeitung weiter
37
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
JSP-Scripting: Deklarationen und Ausdrücke
„ JSPs können „normalen“ Java-Quellcode enthalten, der beim Aufruf
der JSP ausgeführt wird (Scripting).
„ Deklarationen:
† Syntax: <%! ... %>
† Deklaration von Variablen und Methoden (durch Semikolon
abgeschlossen)
<%! int a = 17; %>
„ Ausdrücke:
† Syntax: <%= ... %>
† Beliebige gültige Ausdrücke sind zulässig (ohne abschließendes
Semikolon). Der jeweilige Ausdruck wird zur Laufzeit ausgewertet
und der resultierende Wert in einen String konvertiert.
a + b = <%= a + b %>
38
© Holger Röder
Winter 2008/2009
Scriptlets
„ Vollständige Java-Code-Blöcke in JSPs werden als Scriptlets
bezeichnet.
„ Syntax: <% ... %>
<%
String eingabe = request.getParameter("eingabe");
if (eingabe != null) {
String ausgabe = new StringBuilder(eingabe)
.reverse().toString();
out.print(ausgabe);
}
Programmentwicklung
%>
se
39
© Holger Röder
Winter 2008/2009
Scriptlets: Implizite Variablen
„ Innerhalb von Scriptlets stehen verschiedene implizite Variablen zur
Verfügung, die ohne Deklaration verwendet werden können, z. B.
† ServletRequest request
† ServletResponse response
† JspWriter out
† HttpSession session
† ...
<%
out.println("Hallo Welt!");
Programmentwicklung
%>
se
40
© Holger Röder
„ Versteckte Kommentare (Hidden Comments)
† Syntax: <%-- Kommentar --%>
† Versteckte Kommentare können zur Dokumentation des JSPCodes verwendet werden. Sie werden von der JSP-Engine nicht
verarbeitet und deshalb auch nicht zum Client gesendet.
„ Ausgabe-Kommentare (Output Comments)
† Syntax: <!-- Kommentar -->
† Ausgabe-Kommentare sind normale HTML-Kommentare, die auch
im an den Client gesendeten HTML-Code enthalten sind.
Programmentwicklung
Winter 2008/2009
Kommentare
se
41
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Zusammenspiel von Servlets und JSPs
„ Das Servlet führt alle
Tätigkeiten aus, die durch
den Request angefordert
sind („Aufgabe 1“).
„ Die Darstellung wird an
die JSP delegiert.
„ Die JSP implementiert die
Darstellung der Folgeseite
(„Aufgabe 2“).
„ Die für die Darstellung
benötigten Daten werden
aus dem Request-Objekt
oder über JavaBeans
geholt, die ihrerseits auf
die Geschäftslogik
zugreifen.
Web Container
Request
Servlet
Geschäftslogik
JSP
JavaBeans
Response
42
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Datenübergabe Servlet Æ JSP
„ Beide Technologien – Servlets und JSPs – können kombiniert werden:
† Servlets: Bearbeitung der Anfragen (Geschäftslogik)
† JSPs: Präsentation der Antworten
„ Übergabe von Daten vom Servlet an die JSP:
1. Der Web Container ruft bei einem ankommenden Request das
Servlet auf.
2. Das Servlet bearbeitet die Anfrage.
3. Ermittelte Ergebnisse werden als Attribute im Request-Objekt
gespeichert:
request.setAttribute("gesamtsumme", summeGesamt);
4. Mittels eines Dispatching-Mechanismus wird die JSP aufgerufen
und das Request-Objekt übergeben.
5. JSP liest das Attribut aus dem Request-Objekt aus:
Double summe = request.getAttribute("gesamtsumme");
6. JSP erzeugt dynamisch die HTML-Darstellung.
7. HTML-Seite wird an den Client zurückgeschickt.
43
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Dispatching-Mechanismen
„ Um innerhalb eines Servlets eine JSP aufzurufen, muss zunächst ein
RequestDispatcher-Objekt erzeugt werden.
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/MeineJSP.jsp");
„ Anschließend existieren zwei verschiedene Aufruf-Möglichkeiten:
† include() bindet die JSP ein, anschließend fährt das Servlet mit
der Verarbeitung fort. include() kann mehrfach aufgerufen
werden.
dispatcher.include(request, response);
... // weitere Anweisungen
† forward() übergibt die Kontrolle vollständig an die JSP. Das
Servlet ist anschließend in die Bearbeitung der Anfrage nicht
mehr eingebunden. forward() kann deshalb auch nur einmal
aufgerufen werden.
dispatcher.forward(request, response);
44
Herunterladen