se - Institut für Softwaretechnologie

Werbung
se
Einführung Java 2
Enterprise Edition (J2EE)
Rainer Schmidberger
[email protected]
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
PE Teil J2EE WS 03/04
se
‰
‰
‰
‰
‰
‰
‰
‰
‰
J2EE Inhalt
Servlets und JSP (Java Server Page)
Enterprise JavaBeans (EJB)
Java Naming and Directory InterfaceTM API
JDBCTM API
JavaMailTM API
CORBA Compliance
Java Transaction API
XML Deployment Descriptors
Java Message Service
Quelle: Sun Microsystems
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
2
1
PE Teil J2EE WS 03/04
se
J2EE application model
‰ Standardisiertes Architekturmodell für
serverbasierte Java-Anwendungen
Quelle: Sun Microsystems
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
3
PE Teil J2EE WS 03/04
se
Java Anwendungsarten
Java-Application
SwingOberfläche
SwingOberfläche
als Applet
AnwendungsLogik
Java VM
Laden der
Anwendung von
Lokales
Laufwerk
09.02.2004
Java-Applet
AnwendungsLogik
Sandbox im Browser
J2EE: Java-Servlet / JSP
HTMLOberfläche
Browser
Servlet/JSP
AnwendungsLogik
Web-Server
Laden der
Anwendung von
Laden der
Anwendung von
WebServer
WebServer
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
4
2
PE Teil J2EE WS 03/04
se
Statisches Web
‰ Statisch abgelegte Dokumente wie z.B. HTMLSeiten werden von Web Server an den User
übermittelt
HTTP request
HTTP response
Statische
Dokumente
(HTML)
09.02.2004
Web Server
Browser
User
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
5
PE Teil J2EE WS 03/04
se
Dynamisches Web
‰ Web Seiten werden im Application-Server
dynamisch, d.h. im Moment der Anfrage, erzeugt
Web Server
HTTP request
HTTP response
Statische
Dokumente
(HTML)
HTTP request:
Parameter
HTTP response:
Dynamischer
Inhalt
Browser
Beispiel für einen
Servlet-Container:
Servlet
oder JSP
Datenbank
http://jakarta.apache.org/tomcat/index.html
Application
Server, ServletContainer
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
6
3
PE Teil J2EE WS 03/04
se
Request-Response Prinzip
‰ Der Web-Browser sendet Parameter im Request
über den Servlet-Container zum Servlet
Servlet-Container
Request
Servlet
Geschäftslogik:
Implementierung
in „Standard“
Java
Response
‰ Das Servlet erstellt die Folgeseite und liefert
diese im Response an den Browser zurück
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
7
PE Teil J2EE WS 03/04
se
Was sind Servlets?
‰ Servlets sind Objekte, deren Klasse das Interface
javax.servlet.Servlet implementiert
‰ Servlets werden innerhalb eines Servlet-Containers (oder auch
Servlet Engine) instanziert und gestartet
‰ Häufigste Verwendung als HTTPServlet, das auf BrowserAnfragen (Request) antwortet
‰ Servlets bekommen vom Client (dem Browser) Parameter im
Request-Objekt übergeben
‰ Servlets erzeugen HTML-Code, der als Response zum Client
zurückgeliefert wird
‰ Servlet-Container sind Application-Server, die die J2EE
Spezifikation erfüllen. Bekannte Hersteller hierfür sind Bea
(WebLogic), IBM (WebSphere), Apache (Tomcat, JBoss, OpenSource), Enterprise Server (Borland), ...
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
8
4
PE Teil J2EE WS 03/04
se
Aufgaben des Servlet
Request
Servlet-Aufgabe Teil 1:
‰ Ausführen der Tätigkeiten, die durch den Request
angefordert sind
‰ Z.B. Geschäftslogik starten, Daten speichern usw...
Servlet-Aufgabe Teil 2:
‰ Erzeugen der folgenden HTML-Seite
‰ Dieses Erzeugen findet über das ResponseObjekt statt
Response
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
9
PE Teil J2EE WS 03/04
se
doGet und doPost
‰ Parameterübergabe per „get“
Ö Parameter sind in der URL
des Aufrufs enthalten
Ö Aufruf kann mit den
Parametern
„gebookmarked“ werden
Request
doGet
‰ Parameterübergabe per „post“
Ö Parameter sind nicht in
der URL des Aufrufs
sondern als Tabelle
eingebettet im Request
enthalten
Ö Nur für Formulare
verwendbar
09.02.2004
Request
doPost
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
10
5
PE Teil J2EE WS 03/04
se
Implementierung des Servlet
Request
Servlet
void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// … request-Objekt auswerten:
String parameter1 = request.getParameter("parameter1")
// response-Objekt befüllen
response.getWriter().println("Hello World");
}
Response
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
11
PE Teil J2EE WS 03/04
se
Interface Servlet
<<Interface>>
Servlet
(from servlet)
destroy() : void
getServletConfig() : ServletConfig
getServletInfo() : String
init(servletconfig : ServletConfig) : void
service(servletrequest : ServletRequest, servletresponse : ServletResponse) : void
GenericServlet
(from servlet)
<<Interface>>
JspPage
GenericServlet()
destroy() : void
getInitParameter(name : String) : String
getInitParameterNames() : Enumeration
getServletConfig() : ServletConfig
getServletContext() : ServletContext
getServletInfo() : String
getServletName() : String
init() : void
init(config : ServletConfig) : void
log(msg : String) : void
log(message : String, t : Throwable) : void
service(servletrequest : ServletRequest, servletresponse : ServletResponse) : void
(from jsp)
jspDestroy() : void
jspInit() : void
<<Interface>>
Serializable
(from io)
HttpServlet
(from http)
HttpServlet()
<<ServletdoDelete>> doDelete(req : HttpServletRequest, resp : HttpServletResponse) : void
<<ServletdoGet>> doGet(req : HttpServletRequest, resp : HttpServletResponse) : void
<<ServletdoOptions>> doOptions(req : HttpServletRequest, resp : HttpServletResponse) : void
<<ServletdoPost>> doPost(req : HttpServletRequest, resp : HttpServletResponse) : void
<<ServletdoPut>> doPut(req : HttpServletRequest, resp : HttpServletResponse) : void
<<ServletdoTrace>> doTrace(req : HttpServletRequest, resp : HttpServletResponse) : void
getLastModified(req : HttpServletRequest) : long
<<ServletService>> service(req : ServletRequest, res : ServletResponse) : void
<<ServletService>> service(req : HttpServletRequest, resp : HttpServletResponse) : void
09.02.2004
Besonders wichtige
Methoden:
‰ doPost
‰ doGet
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
12
6
PE Teil J2EE WS 03/04
se
Interface ServletRequest
<<Interface>>
ServletRequest
(from servlet)
<<Interface>>
HttpServletRequest
(from http)
getAttribute(s : String) : Object
getAttributeNames() : Enumeration
getCharacterEncoding() : String
getContentLength() : int
getContentType() : String
getInputStream() : ServletInputStream
getLocale() : Locale
getLocales() : Enumeration
getParameter(s : String) : String
getParameterNames() : Enumeration
getParameterValues(s : String) : String[]
getProtocol() : String
getReader() : BufferedReader
getRealPath(s : String) : String
getRemoteAddr() : String
getRemoteHost() : String
getRequestDispatcher(s : String) : RequestDispatcher
getScheme() : String
getServerName() : String
getServerPort() : int
isSecure() : boolean
removeAttribute(s : String) : void
setAttribute(s : String, obj : Object) : void
Ö Bitte beachten: Spezifiziert sind
hier nur Interface. Die
Implementierung ist Sache des
Application-Server Herstellers.
09.02.2004
getAuthType() : String
getContextPath() : String
getCookies() : Cookie[]
getDateHeader(s : String) : long
getHeader(s : String) : String
getHeaderNames() : Enumeration
getHeaders(s : String) : Enumeration
getIntHeader(s : String) : int
getMethod() : String
getPathInfo() : String
getPathTranslated() : String
getQueryString() : String
getRemoteUser() : String
getRequestURI() : String
getRequestedSessionId() : String
getServletPath() : String
getSession() : HttpSession
getSession(flag : boolean) : HttpSession
getUserPrincipal() : Principal
isRequestedSessionIdFromCookie() : boolean
isRequestedSessionIdFromURL() : boolean
isRequestedSessionIdFromUrl() : boolean
isRequestedSessionIdValid() : boolean
isUserInRole(s : String) : boolean
Besonders wichtige Methoden:
‰ getParameter
‰ getCookies
‰ getSession
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
13
PE Teil J2EE WS 03/04
se
Interface ServletResponse
<<Interface>>
ServletResponse
(from servlet)
flushBuffer() : void
getBufferSize() : int
getCharacterEncoding() : String
getLocale() : Locale
getOutputStream() : ServletOutputStream
getWriter() : PrintWriter
isCommitted() : boolean
reset() : void
setBufferSize(i : int) : void
setContentLength(i : int) : void
setContentType(s : String) : void
setLocale(locale : Locale) : void
<<Interface>>
HttpServletResponse
(from http)
addCookie(cookie : Cookie) : void
addDateHeader(s : String, l : long) : void
addHeader(s : String, s1 : String) : void
addIntHeader(s : String, i : int) : void
containsHeader(s : String) : boolean
encodeRedirectURL(s : String) : String
encodeRedirectUrl(s : String) : String
encodeURL(s : String) : String
encodeUrl(s : String) : String
sendError(i : int) : void
sendError(i : int, s : String) : void
sendRedirect(s : String) : void
setDateHeader(s : String, l : long) : void
setHeader(s : String, s1 : String) : void
setIntHeader(s : String, i : int) : void
setStatus(i : int) : void
setStatus(i : int, s : String) : void
Besonders wichtige Methoden:
‰ getWriter
‰ addCookie
Ö Bitte beachten: Spezifiziert sind hier nur Interface. Die
Implementierung ist Sache des Application-Server Herstellers.
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
14
7
PE Teil J2EE WS 03/04
se
import
import
import
import
"Hello World" Servlet
javax.servlet.*;
javax.servlet.http.*;
java.io.*;
java.util.*;
public class ServletTest extends HttpServlet {
public void init() throws ServletException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
‰ Zusammenhang zwischen HTTPAdresse und Servlet-Klassenname
wird über eine Konfigurationsdatei
(web.xml) hergestellt
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
15
PE Teil J2EE WS 03/04
se
Formulare
<html>
<head><title>ServletTest</title></head>
<body>
<form method=post action=servlettest>
Eingabe:
<input type=text name=Eingabe />
<br>
Ausgabe:
... Hier berechneten Wert einsetzen
<br>
<br>
<input type=submit name=Submit />
</form>
</body></html>
Typisch sind Formulare zur Dateneingabe
HTML-Tag: <form ..> ... </form>
HTML kann beliebig zur Gestaltung genutzt werden
Inhalte der Eingabefelder werden i. Allg. per "post" an
den Server übermittelt und können dort aus dem
Request-Objekt ausgewertet werden
‰ Absenden mit "Submit" Button
‰ Das unter "action=" festgelegte Servlet wird gestartet
‰
‰
‰
‰
09.02.2004
‰ Aufruf des Servlets
und Parameterübergabe
‰ Die Folge-Seite
wird vom
aufgerufenen
Servlet wieder
produziert
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
16
8
PE Teil J2EE WS 03/04
se
Methode "doPost"
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
String ausgabe = request.getParameter("Eingabe");
// post-Parameter
if(ausgabe == null) ausgabe = "";
// auswerten
out.println("<html>");
out.println("<head><title>ServletTest</title></head><body>");
out.println("<form method=post>");
out.println("Eingabe:");
out.println("<input type=text name=Eingabe />");
// Parametername
out.println("<br>Ausgabe:");
// definieren
out.println(reverse(ausgabe));
out.println("<br><br>");
out.println("<input type=submit name=Submit />");
out.println("</form></body></html>");
out.close();
}
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
17
PE Teil J2EE WS 03/04
se
Lebenszyklus
‰ Server lädt und kreiert Instanz von ServletTest
Ö Methode void init ()
‰ Interaktion mit Clients (Behandlung von Anfragen)
Ö GenericServlet
• void service (ServletRequest, ServletResponse)
Ö HttpServlet
• void doGet (HttpServletRequest, HttpServletResponse)
• void doPost (HttpServletRequest, HttpServletResponse)
‰ Server entfernt Servlet-Instanz
(beim Stoppen des Servers)
Ö Methode void destroy ()
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
18
9
PE Teil J2EE WS 03/04
se
Request Objekt (1)
‰ Paket: javax.servlet.http
‰ Enthält Informationen über die übergebenen
Parameter und den aufrufenden Client
‰ Parameter Informationen
Ö String getParameter (String)
Liefert den Wert eines konkreten Parameters.
Ö Enumeration getParameterNames ()
Liefert die Namen sämtlicher Parameter, die im requestObjekt mitgeliefert wurden.
Ö String[] getParameterValues (String)
Diese Methode ist für Parameter geeignet, die mehr als
einen Wert enthalten können. Zurückgeliefert wird ein
ganzes Array von Werten des benannten Parameters.
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
19
PE Teil J2EE WS 03/04
se
Request Objekt (2)
Client Informationen
Ö String getRemoteAddr ()
Liefert die IP-Adresse des Client.
Ö String getRemoteHost ()
Damit wird der voll qualifizierte Name des Client bestimmt.
Ö Das Interface javax.servlet.http.HttpServletRequest enthält
weitere häufig benutzte Methoden zur Behandlung von
HTTP-Anfragen.
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
20
10
PE Teil J2EE WS 03/04
se
Das Response-Objekt
‰ Paket: javax.servlet.http
‰ Kapselt die gesamte Kommunikation zum Client
Ö Response-Objekt wird vom Servlet-Container generiert
‰ Zugriff auf
Ö Header
Ö OutputStream- bzw. Writer-Objekte
•
•
Writer für textbasierte Daten
OutputStream für binäre Daten
‰ Möglichkeit zum
Ö Setzen von Cookies
Ö Weiterleiten von Anfragen
Ö Senden von Fehlerseiten
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
21
PE Teil J2EE WS 03/04
se
Cookies (1)
‰ Ein Server kann Daten in ein "Cookie" speichern und
dieses zum Client senden.
‰ Bei jedem Client-Request werden die Cookies vom
Browser zurück an den Server gesendet, insofern die
URL die gleiche ist.
‰ Ein Cookie dient zur Identifizierung des Clients oder
der Sitzung
‰ Cookies haben im wesentlichen einen Namen und
einen Inhalt (z.B. Name: "UserID", Wert: "007")
‰ Die Klasse javax.servlet.http.Cookie im Servlet
API bietet unterstützung bei der Verwendung von
Cookies
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
22
11
PE Teil J2EE WS 03/04
se
Cookies (2)
‰ Cookies werden über seinen Namen identifiziert
(Methode getName())
‰ Der Inhalt eines Cookie ist vom Typ String
(Methode getValue())
Cookie cookies[] = request.getCookies();
for(int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if(cookie.getName().equals("Erste Eingabe")) {
out.println("<br>Erste Eingabe: " + cookie.getValue());
}
}
if(cookies.length == 0 && ausgabe != null) {
Cookie cookie = new Cookie("Erste Eingabe", ausgabe);
response.addCookie(cookie);
}
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
23
PE Teil J2EE WS 03/04
se
Sitzungen
‰ Jeder Benutzer erhält ein javax.servlet.http.HttpSession
Objekt in dem Daten pro Sitzung gespeichert werden können.
‰ Daten (Object) werden über einen Namen (String) in die Session
gespeichert und über diesen Namen wieder gelesen.
‰ Basisdatentypen wie z.B. int werden über die zugeordnete
Klasse behandelt
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// ...
HttpSession session = request.getSession();
if(session.isNew()) {
out.println("Willkomen, Sie sind ein neuer User");
session.setAttribute("AmountVisited", new Integer(1));
} else {
Integer i = (Integer)session.getAttribute("AmountVisited");
session.setAttribute("AmountVisited", new Integer(i.intValue() + 1));
out.println("Sie sind zum " + i + ". mal auf dieser Seite.");
}
// ...
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
24
12
PE Teil J2EE WS 03/04
se
Deployment
‰ Eine Web Applikation ist ein Sammlung von Servlets, JSP Seiten,
HTML Dokumenten, Bilder sowie die Konfigurationsdatei web.xml
‰ Alle Dateien einer Web Applikation können in einem WebArchive (war-Datei) zusammen gefasst werden.
‰ Die Datei web.xml wird als Deployment Descriptor bezeichnet.
‰ web.xml enthält Konfigurations Informationen für den Server
über die Web Applikation.
‰ web.xml wird im folgenden Verzeichnis gespeichert:
server_root/webapps/<myWebApp>/WEB-INF
‰ Die Struktur von web.xml entspricht dem XML Standard
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
...
</web-app>
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
25
PE Teil J2EE WS 03/04
se
Java Server Page
‰ Problematik bei Servlets
Ö Vermischung von Präsentation und Verarbeitungslogik
Ö Designer-Werkzeuge für HTML nicht verwendbar
‰ Abhilfe: Java Server Pages (JSP)
Ö Konzipiert für Web-Seiten mit dynamisch generiertem Inhalt
Ö Weiterentwicklung von Servlets
Ö Striktere Trennung von fachlicher Logik und Präsentation
Ö Änderungen im Inhalt unabhängig von Verarbeitungslogik
Ö Vereinfachung der Seitenentwicklung durch Tags
Ö Funktionalität für dynamische Inhalte ist in Tags gekapselt
Ö Verwendung wiederverwendbarer Komponenten
Ö Komponenten (z.B. JavaBeans) realisieren fachliche
Verarbeitung
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
26
13
PE Teil J2EE WS 03/04
se
Einfache JSP
<html><head><title>JSPTest</title></head>
<h1>Spiegel Java Server Page</h1>
<body>
<form method="post">
Eingabe: <input type=text name=eingabe />
<br>Ausgabe:
<%! // eine Deklaration
String eingabe, ausgabe; %>
<%
// hier steht nun Java-Code ...
eingabe = request.getParameter("eingabe");
Was fällt soweit auf?
‰ Aussehen ähnlich einem
statischen HTML-Dokument.
‰ Einbettung von Java-Code
über <% ... %>
‰ Deklarationen über <%! ... %>
‰ out und request stehen ohne
Deklaration zur Verfügung.
if(eingabe != null) {
ausgabe = ServletTest.reverse(eingabe);
out.println(ausgabe);
}
// Ende des Java-Codes
%>
<input type=submit name=Submit />
</form></body></html>
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
27
PE Teil J2EE WS 03/04
se
JSP und JavaBeans
‰ Zu einer JSP kann es ein JavaBean geben. Die Verbindung
wird mit dem Tag <jsp:useBean ... /> vorgenommen.
‰ Die Lebensdauer einer Bean-Instanz legt scope=
"page|request|session|application" fest
‰ Die Instanzierung erfolgt mit dem ersten Öffnen der JSP
<html><head><title>JSPTest</title></head>
<h1>Spiegel Java Server Page</h1>
<jsp:useBean id="jspTestBean" scope="session" class="JSPTestBean" />
<body>
<form method="post">
Eingabe:
<input type=text name=eingabe />
<br>
Ausgabe:
<%! String ausgabe; %>
<% jspTestBean.setEingabe(request.getParameter("eingabe"));
ausgabe = jspTestBean.getReverseEingabe();
out.println(ausgabe); %>
<br><br>
<input type=submit name=Submit />
</form></body></html>
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
28
14
PE Teil J2EE WS 03/04
se
JavaBean
// die Bean-Klasse:
public class JSPTestBean {
String eingabe = "";
public String getEingabe() {
return eingabe;
}
public void setEingabe(String s) {
eingabe = s;
}
public String getReverseEingabe() {
return
ServletTest.reverse(eingabe);
}
}
09.02.2004
‰ Ist eine "normale" Java-Klasse
‰ Kann in einem beliebigen Paket
liegen
‰ Kann in einer beliebigen
Vererbungshierarchie sein
‰ Hat jeweils eine setAbc und eine
getAbc-Methode, wobei der
Name des Property "abc" ist
‰ Beispiel: setEingabe/getEingabe
ergeben das Property "eingabe"
(Achtung: kleiner Anfangsbuchstabe)
‰ Weitere Methoden können
beliebig hinzugefügt werden
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
29
PE Teil J2EE WS 03/04
se
JSP und JavaBeans (2)
<html><head><title>JSPTest</title></head>
<h1>Spiegel Java Server Page</h1>
<jsp:useBean id="jspTestBean" scope="session"
class="JSPTestBean" />
<jsp:setProperty name="jspTestBean" property="*"/>
<body>
<form method="post">
Eingabe:
<input type=text name=eingabe />
<br>
Ausgabe:
<%! String ausgabe;
%>
<%
ausgabe = jspTestBean.getReverseEingabe();
out.println(ausgabe);
%>
<br>Eingabe war: <jsp:getProperty name="jspTestBean"
property="eingabe"/>
<br><br>
<input type=submit name=Submit />
</form></body></html>
09.02.2004
‰ Die Properties
eines JavaBeans
können fest mit
den Parametern
des RequestObjektes
verbunden
werden
‰ Feste PropertyBenennung oder
"*" für alle
Properties
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
30
15
PE Teil J2EE WS 03/04
se
Weitere Direktiven
‰ Include Direktive
Ö Syntax: <%@ include file="relativeURL" %>
Ö Fügt Inhalt einer statischen oder dynamischen Datei in JSPDatei ein
‰ Forward Direktive
Ö Syntax: <jsp:forward page=“{ relativeURL | <%=
Ausdruck %> }“ />
Ö Leitet Client-Anfrage an HTML-Datei, JSP-Datei oder Servlet
zur Verarbeitung weiter
‰ Taglib Direktive
Ö Syntax: <%@ taglib uri=“TagBibliothekURI“
prefix=“tagPräfix“ %>
Ö Definiert Bibliothek für eigene Tags und des dabei
verwendeten Präfix
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
31
PE Teil J2EE WS 03/04
se
JSP – Scripting Elements
‰ 1. Deklarationen
Ö
Ö
Ö
Ö
Syntax: <%! ... %>
Dient zur Deklaration von Variablen und Methoden
Jede Deklaration wird durch ein Semikolon abgeschlossen
Beispiel:
<%! int i = 0; %>
‰ 2. Ausdrücke (engl. Expressions)
Ö
Ö
Ö
Ö
Ö
Ö
09.02.2004
Syntax: <%= ... %>
Kann beliebige (gültige) Ausdrücke enthalten
Ausdrücke werden nicht durch ein Semikolon abgeschlossen
Werden zur Laufzeit ausgewertet und durch Wert ersetzt
Der ermittelte Wert wird immer in einen String konvertiert
Beispiel:
a + b = <%= a + b %>
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
32
16
PE Teil J2EE WS 03/04
se
JSP – Scripting Elements (Forts.)
‰ Scriptlets
Ö Syntax: <% ... %>
Ö Scriptlets können jeden beliebigen (gültigen) Java-Code
enthalten
Ö Ausdrücke werden durch ein Semikolon abgeschlossen
Ö Dienen zur Implementation der fachlichen Logik von JSPs
Ö Es stehen implizite Variablen zur Verfügung
Ö Beispiel:
<%
eingabe = request.getParameter("eingabe");
if(eingabe != null) {
ausgabe = ServletTest.reverse(eingabe);
out.println(ausgabe);
}
%>
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
33
PE Teil J2EE WS 03/04
se
Implizite Variablen
‰ Variablen, die ohne Deklaration in Scripting-Elementen
verwendbar sind
Ö request (Unterklasse von javax.servlet.ServletRequest)
•
Anfrage des Client (enthält Parameterliste)
Ö response (Unterklasse von javax.servlet.ServletResponse)
•
Antwort der JSP-Seite an den Client
Ö out (javax.servlet.jsp.JspWriter)
•
Servlet Output Writer (Ausgaben an den Client-Browser)
Ö session (javax.servlet.http.HttpSession)
•
HTTP Session Objekt, das mit Anfrage assoziiert wird
Ö application (javax.servlet.ServletContext)
•
Servlet Context Objekt (Kommunikation mit dem Servlet Container)
Ö config (javax.servlet.ServletConfig)
•
Das ServletConfig Objekt für die JSP-Seite (enthält z.B. Initialisierungsparameter)
Ö exception (java.lang.Throwable)
•
•
09.02.2004
Exception, die von der JSP-Seite nicht gefangen wurde.
Wird nur in der Fehlerseite des JSPs sichtbar
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
34
17
PE Teil J2EE WS 03/04
se
Kommentare
‰ Versteckte Kommentare (Hidden Comment)
Ö Syntax: <%-- Kommentar --%>
Ö Zum Dokumentieren des Quellkodes
Ö Wird von der JSP-Engine nicht verarbeitet und wird somit
auch nicht zum Client gesendet
‰ Ausgabe Kommentar (Output Comment)
Ö Syntax: <!-- Kommentar [<%= Ausdruck %>] --!>
Ö Wird von der JSP-Engine verarbeitet und das Ergebnis
taucht in der gesendeten HTML-Quelldatei auf
Ö Der im Kommentar enthaltene Ausdruck wird dynamisch
zur Laufzeit bei jedem Aufruf evaluiert
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
35
PE Teil J2EE WS 03/04
se
Servlet/JSP–Request/Response (1)
‰ Das Servlet führt alle
Tätigkeiten, die durch
den Request
angefordert sind, aus.
‰ Das Servlet übernimmt
keine Darstellungsaufgaben sondern leitet
diese an die JSP weiter
‰ Die JSP implementiert
die Darstellung der
Folgeseite.
‰ Die Daten zur Darstellung
werden dem Bean
entnommen, das selbst
auf die Geschäftslogik
zugreift
09.02.2004
Servlet-Container
Request
Servlet
JSP
Geschäftslogik
Bean
Response
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
36
18
PE Teil J2EE WS 03/04
se
Servlet/JSP–Request/Response (2)
‰ Kombination beider Technologien
Ö Servlets: Bearbeitung der Anfragen (Geschäftslogik)
Ö JSPs: Präsentation der Antworten
‰ Ablauf
Ö Eingehende Anfrage wird von Servlet Engine auf Servlet abgebildet
Ö Servlet bearbeitet Anfrage
Ö Ermittelte Ergebnisse werden als Attribute in request-Objekt
gespeichert
Bsp.: request.setAttribute("eingabe", einString);
Ö Request-Objekt wird mittels Dispatching-Mechanismus an JSP
weitergereicht
Ö JSP-Seite liest Attribute aus request-Objekt aus
Bsp.: eingabe = (String)request.getAttribute("eingabe");
Ö JSP-Seite bereitet Ergebnisse graphisch auf
Ö Erzeugte HTML-Seite wird an Client zurückgeliefert
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
37
PE Teil J2EE WS 03/04
se
Servlet/JSP - Dispatching
‰ Servlets können JSPs auf zwei Arten aufrufen
‰ 1. dispatcher.include()
Ö include() ruft eine JSP-Seite auf und wartet auf diese, um mit
der Verarbeitung fortzufahren
Ö Kann innerhalb eines Servlets mehrmals aufgerufen werden
Ö Mechanismus:
RequestDispatcher =
getServletContext().getRequestDispatcher(“JSP-URI“);
dispatcher.include(request, response);
‰ 2. dispatcher.forward()
Ö
Ö
Ö
Ö
09.02.2004
forward() gibt Kontrolle an aufgerufene JSP-Seite weiter
Servlet ist danach an Client-Interaktionen nicht mehr involviert
Kann innerhalb eines Servlets nur einmal aufgerufen werden
Mechanismus:
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(“JSP-URI“);
dispatcher.forward(request, response);
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
38
19
PE Teil J2EE WS 03/04
se
Framework Jakarta Struts
‰ Jakarta Struts ist ein Framework, das viele
Standardaufgaben von JSP/Servlet-Anwendungen
bereits enthält
‰ So besteht Unterstützung für
Ö Mehrsprachigkeit, Internationalisierung
Ö Fehlerbehandluch
Ö Einfacher Zugriff auf Request Parameter
Ö Viele spezielle HTML-Tags für Formulare
‰ Umfangreiche Konfigurierungsmöglichkeiten (aber
viele XML Dokumente, teilweise nicht einfach
bedienbar)
‰ Jakarta Struts ist ein Open Source Produkt
(http://jakarta.apache.org/struts)
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
39
20
Herunterladen