$KK(Implizite JSP Variablen) $R(Objective) Given a design goal, write JSP code using the appropriate implicit objects: (a) request, (b) response, (c) out, (d) session, (e) config, (f) application, (g) page, (h) pageContext, and (i) exception. $R\ $KKK(Übersicht) Die JSP Maschine legt in der Methode _jspService() automatisch einige Variablen an. Hier eine Übersicht der möglichen impliziten Variablen $T(caption,lll,15.45.40) Identifier name | Klasse oder Interface | Beschreibung || application | interface javax.servlet.ServletContext | Zeigt auf die die Umgebung der Applikation || session | interface javay.servlet.http.HttpSession | Beinhaltet die Session eines Benutzers || request | interface javax.servlet.http.HttpServletRequest | Enthält die Anfrage auf die Seite || response | interface javax.servlet.http.HttpServletResponse | Zum Senden der Antwort an den Client || out | class javax.servlet.jsp.JspWriter | Enthält den Output Stream der aktuellen Seite || page | class java.lang.Object | Ist die Servlet Instanz der aktuellen Seite || pageContext | class javax.servlet.jsp.PageContext | Umgebung der aktuellen Seite || config | interface javax.servlet.ServletConfig | Konfiguration eines Servlet || exception | class java.lang.Throwable | Benutzt für Fehlerbehandlung || $T\ Das folgende Listing zeigt wie diese impliziten Variablen in die Methode _jspService() eingebaut wird $R(Source) public void _jspService( HttpServletRequest request, HttpServletResponse response throws java.io.IOException, ServletException { ... other code PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; ... other code pageContext = .... // getIt from Somewhere session = pageContext.getSession(); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); out = pageContext.getOutput() ... other code } $R\ $KKK(Implizite Variablen) request, response Dies sind HttpServletRequest bzw. HttpServletResponse Objekte die bei einer Anfrage, an die _jspService Methode übergeben werden. Sie haben genau dieselbe Funktionalität wie bei den Servlets. out Diese ist vom Typ javax.servlet.jsp.JspWriter. Man benutzt die print() bzw. println() Methode von out, um an die Antwort die zum Clienten gesendet wird Objekte bzw. Text anzuhaengen.JspWriter ist eine Unterklasse vom java.io.Writer Objekt und versteht all die print() bzw println() Methoden um z.B boolesche oder numerische Werte auszugeben. session Diese Variable existiert nicht falls mit einer page-direktive das Attribut session auf false gesetzt wird ( <%@ page session="true" %>) Ansonsten besteht die implizite Variable session aus dem HTTP Session Objekt, das man auch durch den Befehl request.getSession() bekommt. config Diese Variable besteht aus dem ServletConfig() Objekt, mit dessen Hilfe man die Initialien Parameter aus der Deployment Descriptor Datei auslesen kann. application application entspricht dem javax.servlet.ServletContext Objekt der WebApplikation. page Page wird sehr selten verwendet, und entspricht der aktuellen Servlet Instanz. Es ist identisch mit $S() Object page = this //this refers to the instance of this Servlet $\ Beachte das page vom Typ Object ist, und deshalb nicht direkt die Servlet Methoden kennt. $S() <%= page.getServletInfo() %> Ergibt einen Fehler <%= ((Servlet) page).getServletInfo() %> Mit Casten ist es Ok <%= this.getServletInfo() %> Auch ok $S\ pageContext pageContext enthält ein konkrete Unterklasse von javax.servlet.jsp.PageContext(). Diese hat folgende Aufgaben * Sie ist ein Container für viele der implizite Variablen $S() session = pageContext.getSession(); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); out = pageContext.getOut(); $S\ * Enthält Methoden um Attribute in verschieden Scopes zu speichern. Die Scopes einer JSP Seite werden weiter unten erläutert * Beinhaltet Methoden um Anfragen an eine andere Ressource weiterzuleiten $T(caption,ll,35.65) Methode | Beschreibung || void include(String relativeURL) | Die Ausgabe einer anderen Ressource wird in die aktuelle Seite eingebunden. Dies ist identisch mit aServletRequest.getRequestDispatcher().include() || void forward(String relativeURL) | Leitet die Anfrage an eine andere Ressource weiter. Dies ist identisch mit aServletRequest.getRequestDispatcher().forward() || $T\ exception Diese implizite Variable ist nur sichtbar falls die aktuelle Seite als errorPage deklariert ist. exception ist vom Typ java.lang.Throwable und enthält Informationen über die geworfene Exception. $KKK(Die Page Scopes) Die folgende Abbildung verdeutlicht die Scopes einer JSP Seite $B(Bilder,pageScopes.gif,Scopes einer JSP) Es existieren die 4 folgenden Scope $T(caption,ll,25.75) Scope Name | Gültigkeit || application | Gültig innerhalb einer Web-Application || session | Limitiert zu einer Session eines einzelnen Benutzers || request | Limitiert zu einer einzelnen Anfrage ggf. ueber mehrere Seiten || page | Limitiert zu einer einzelnen Seite und einer einzelnen Anfrage || $T\ Mit Hilfe dem PageContext Objekt lassen sich die Attribute für einen Scope setzen bzw. auslesen. Dazu sind einige Integer-Konstanten für die einzelnen Scopes definiert * static final int APPLICATION_SCOPE * static final int SESSION_SCOPE * static final int REQUEST_SCOPE * static final int PAGE_SCCOPE Folgende Methoden dienen zum Setzen von Attributen in einem Scope * void setAttribtue(String name, Object object, int scope); * Object getAttribute(String name, int scope); * void removeAttribute(String name, int scope); * Enumeration getAttributeNamesInScope(int scope); Es gibt auch Methoden zum Auffinden Attribute wenn man nicht weiss in welchen Scope sie definiert sind $T(simple,ll,30.60) Object findAttribut( String name ) | sucht ein Attriubut zuerst in page, dann request, dann session (falls gültig) dann application Scope. || int getAttributesScope( String name ) | Gibt den Scope zurück in der ein Attribut definiert ist || $T\