se Einführung Java 2 Enterprise Edition (J2EE)

Werbung
© 2004-2006, Rainer Schmidberger, ISTE
Einführung Java 2
Enterprise Edition (J2EE)
Rainer Schmidberger
[email protected]
se
‰
‰
‰
‰
‰
‰
‰
‰
‰
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
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
J2EE Inhalt
Quelle: Sun Microsystems
se
Folie 134
‰ Standardisiertes Architekturmodell für serverbasierte
Java-Anwendungen
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
J2EE application model
Quelle: Sun Microsystems
se
Folie 135
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Java Anwendungsarten
se
Java-Application
SwingOberfläche
Java-Applet
SwingOberfläche
als Applet
AnwendungsLogik
Java VM
Laden der
Anwendung von
Lokales
Laufwerk
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
Folie 136
‰ Statisch abgelegte Dokumente wie z.B. HTML-Seiten
werden von Web Server an den User übermittelt
HTTP request
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Statisches Web
HTTP response
Statische
Dokumente
(HTML)
se
Web Server
Browser
User
Folie 137
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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
Programmentwicklung,
Vorlesungsskript
Beispiel für einen
Servlet-Container:
se
Servlet
oder JSP
Datenbank
http://jakarta.apache.org/tomcat/index.html
Application
Server, ServletContainer
Folie 138
‰ Der Web-Browser sendet Parameter im Request
über den Servlet-Container zum Servlet
Servlet-Container
Request
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Request-Response Prinzip
se
Servlet
Geschäftslogik:
Implementierung
in „Standard“
Java
Response
‰ Das Servlet erstellt die Folgeseite und liefert
diese im Response an den Browser zurück
Folie 139
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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), ...
se
Folie 140
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Aufgaben des Servlet
se
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
Folie 141
© 2004-2006, Rainer Schmidberger, ISTE
doGet und doPost
‰ Parameterübergabe per „get“
doGet
01.02.2006
Ö Parameter sind in der URL
des Aufrufs enthalten
Ö Aufruf kann mit den
Parametern
„gebookmarked“ werden
Request
Programmentwicklung,
Vorlesungsskript
‰ Parameterübergabe per „post“
se
Ö Parameter sind nicht in
der URL des Aufrufs
sondern als Tabelle
eingebettet im Request
enthalten
Ö Nur für Formulare
verwendbar
Request
doPost
Folie 142
Request
Servlet
void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Implementierung des Servlet
se
// … request-Objekt auswerten:
String parameter1 = request.getParameter("parameter1")
// response-Objekt befüllen
response.getWriter().println("Hello World");
}
Response
Folie 143
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Interface Servlet
se
<<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
Besonders wichtige
Methoden:
‰ doPost
‰ doGet
Folie 144
© 2004-2006, Rainer Schmidberger, ISTE
Interface ServletRequest
<<Interface>>
ServletRequest
(from servlet)
(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
01.02.2006
Programmentwicklung,
Vorlesungsskript
<<Interface>>
HttpServletRequest
Ö Bitte beachten: Spezifiziert sind
hier nur Interface. Die
Implementierung ist Sache des
Application-Server Herstellers.
se
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
Folie 145
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Interface ServletResponse
se
<<Interface>>
ServletResponse
<<Interface>>
HttpServletResponse
(from http)
(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
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.
Folie 146
import
import
import
import
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");
}
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
"Hello World" Servlet
Programmentwicklung,
Vorlesungsskript
}
‰ Zusammenhang zwischen HTTPAdresse und Servlet-Klassenname
wird über eine Konfigurationsdatei
(web.xml) hergestellt
se
Folie 147
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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
‰
‰
‰
‰
se
‰ Aufruf des Servlets
und Parameterübergabe
‰ Die Folge-Seite
wird vom
aufgerufenen
Servlet wieder
produziert
Folie 148
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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();
}
se
Folie 149
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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)
se
Ö Methode void destroy ()
Folie 150
‰ Paket: javax.servlet.http
‰ Enthält Informationen über die übergebenen
Parameter und den aufrufenden Client
‰ Parameter Informationen
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Request Objekt (1)
se
Ö 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.
Folie 151
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.
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Request Objekt (2)
se
Folie 152
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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
se
Ö Setzen von Cookies
Ö Weiterleiten von Anfragen
Ö Senden von Fehlerseiten
Folie 153
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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
se
Folie 154
‰ Cookies werden über seinen Namen identifiziert
(Methode getName())
‰ Der Inhalt eines Cookie ist vom Typ String
(Methode getValue())
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Cookies (2)
se
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);
}
Folie 155
‰ 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
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Sitzungen
se
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.");
}
// ...
Folie 156
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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
se
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
...
</web-app>
Folie 157
‰ Problematik bei Servlets
Ö Vermischung von Präsentation und Verarbeitungslogik
Ö Designer-Werkzeuge für HTML nicht verwendbar
‰ Abhilfe: Java Server Pages (JSP)
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Java Server Page
se
Ö 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
Folie 158
<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");
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Einfache JSP
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>
se
Folie 159
‰ 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
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
JSP und JavaBeans
se
<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>
Folie 160
// die Bean-Klasse:
public class JSPTestBean {
String eingabe = "";
public String getEingabe() {
return eingabe;
}
public void setEingabe(String s) {
eingabe = s;
}
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
JavaBean
public String getReverseEingabe() {
return
ServletTest.reverse(eingabe);
}
Programmentwicklung,
Vorlesungsskript
}
se
‰ 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
Folie 161
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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>
se
‰ Die Properties
eines JavaBeans
können fest mit
den Parametern
des RequestObjektes
verbunden
werden
‰ Feste PropertyBenennung oder
"*" für alle
Properties
Folie 162
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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
se
Ö Syntax: <%@ taglib uri=“TagBibliothekURI“
prefix=“tagPräfix“ %>
Ö Definiert Bibliothek für eigene Tags und des dabei
verwendeten Präfix
Folie 163
‰ 1. Deklarationen
Ö
Ö
Ö
Ö
Programmentwicklung,
Vorlesungsskript
Syntax: <%! ... %>
Dient zur Deklaration von Variablen und Methoden
Jede Deklaration wird durch ein Semikolon abgeschlossen
Beispiel:
<%! int i = 0; %>
‰ 2. Ausdrücke (engl. Expressions)
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
JSP – Scripting Elements
se
Ö
Ö
Ö
Ö
Ö
Ö
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 %>
Folie 164
‰ Scriptlets
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
JSP – Scripting Elements (Forts.)
Ö 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:
<%
Programmentwicklung,
Vorlesungsskript
eingabe = request.getParameter("eingabe");
se
if(eingabe != null) {
ausgabe = ServletTest.reverse(eingabe);
out.println(ausgabe);
}
%>
Folie 165
‰ Variablen, die ohne Deklaration in Scripting-Elementen
verwendbar sind
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Implizite Variablen
Ö request (Unterklasse von javax.servlet.ServletRequest)
•
Ö response (Unterklasse von javax.servlet.ServletResponse)
•
Programmentwicklung,
Vorlesungsskript
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)
•
se
Anfrage des Client (enthält Parameterliste)
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)
•
•
Exception, die von der JSP-Seite nicht gefangen wurde.
Wird nur in der Fehlerseite des JSPs sichtbar
Folie 166
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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)
se
Ö 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
Folie 167
‰ 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
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Servlet/JSP–Request/Response (1)
se
Servlet-Container
Request
Servlet
JSP
Geschäftslogik
Bean
Response
Folie 168
‰ Kombination beider Technologien
Ö Servlets: Bearbeitung der Anfragen (Geschäftslogik)
Ö JSPs: Präsentation der Antworten
‰ Ablauf
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
Servlet/JSP–Request/Response (2)
se
Ö 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
Folie 169
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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()
se
Ö
Ö
Ö
Ö
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);
Folie 170
Programmentwicklung,
Vorlesungsskript
01.02.2006
© 2004-2006, Rainer Schmidberger, ISTE
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)
se
Folie 171
Herunterladen