softwaretechnik - perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10...

35
20.07.10 Thomas Perschke Softwaretechnik Servlets / JSP

Upload: others

Post on 18-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10 Thomas Perschke

Softwaretechnik

Servlets / JSP

Page 2: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Rückblick

Servlets– Einfache Servlets– Auswerten von Form-Daten

Page 3: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Heute

JSP

Page 4: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Servlet - JSP

HTML-Code wird im Servlet-Code erzeugt– Darstellung und Logik vereint– Java und HTML-Know-How notwendig– Änderung der Darstellung hat Änderung des Servlet-Codes

zur Folge– Keine Nutzung von HTML-Entwicklungstools möglich– Langer Entwicklungszyklus

Lösung: JSP

Page 5: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

JSP – Java Server Pages

Technologie für die Entwicklung dynamischer Web-Seiten Kein Produkt, sondern offene Spezifikation Ermöglicht die Auslagerung der HTML-Formatierung Trennung

von Businesslogik und Darstellung Ermöglicht das Einbetten von speziellem Code in eine HTML-

Seite anstelle der Einbettung von HTML-Code in den Programmcode

JSP-Seiten bestehen aus– HTML-Code– Eingebettete JSP-Elemente

JSP-Elemente werden serverseitig aufgelöst, bevor die Ergebnisseite zurück gesendet wird

JSP-Seiten liegen auf dem Server compiliert vor Gutes Zusammenspiel von JSP und Servlets Voraussetzung: JDK, JSP-fähiger Web-Server

Page 6: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Konkurrierende Technologien

ASP– Ermöglicht das Integrieren von Programmcode in eine HTML-Seite

(VBScript, JScript)– Ermöglicht das Einbinden und Aufrufen von ActiveX-Komponenten– Datenbankzugriff, andere Komponenten von Drittanbietern – Funktionsweise wie bei JSP– Microsoft-spezifische Funktionen, nur limitierter Support für andere

Plattformen PHP

– Open Source Web Scripting Language– C-ähnliche Syntax mit einigen Features von Perl, C++ und Java– Große Anzahl an vordefinierten Funktionen (DB-Zugriff, LDAP,

generieren von PDF-Dokumenten und Bilder)– Funktionsweise wie bei JSP– Unterstützt eine große Anzahl von Plattformen

Page 7: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Beispiel einer JSP-Seite

<%@ page language="java" contentType="text/html" %> <html> <head><title>Meine JSP-Seite</title></head> <body> <h1>Meine erste JSP-Seite</h1> <% java.util.Date clock = new java.util.Date() %> <% if(clock.getHours()<12){ %> <h2>Guten Morgen</h2> <% } else if(clock.getHours()<18) { %> <h2>Guten Tag</h2> <% } else { %> <h2>Guten Abend</h2> <% } %> </body> </html>

<html><head><title>Meine JSP-Seite</title></head> <body> <h1>Meine erste JSP-Seite</h1> <h2>Guten Tag</h2> </body></html>

<html><head><title>Meine JSP-Seite</title></head> <body> <h1>Meine erste JSP-Seite</h1> <h2>Guten Tag</h2> </body></html>

Page 8: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

JSP-Elemente

Direktive– beschreibt Informationen über die Seite selbst– Ändern sich nicht zwischen zwei Seitenaufrufen– Direktive Elemente

<%@ page ... %>Seitenabhängige Attribute wie Script-Sprache, Fehlerseite

<%@ include ... %>Einbindung von Dateien währende der Übersetzungsphase

<%@ taglib ... %>Deklaration von Tag Libraries

<%@ page errorPage=„errorpage.jsp“ %><%@ page isErrorPage=„true“ %>

Page 9: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

JSP-Elemente

Standard Action Elemente– Dienen zum Ausführen von Aktionen– Basieren meist auf weiteren Informationen (Request-

Parameter, Informationen von externen Systemen,...)– Das Ergebnis der Aktion kann von Aufruf zu Aufruf

unterschiedlich sein– Action Elemente

<jsp:useBean>Ermöglicht den Zugriff auf JavaBeans

<jsp:getProperty>, <jsp:setProperty>Holt/Setzt den Wert eines bestimmten Attributes eines Beans

<jsp:forward>Leitet die Bearbeitung eines Requests an eine JSP-Seite oder an eine Servlet weiter

Page 10: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

JSP-Elemente

Scripting Elements– Ermöglichen das Einbetten kleiner Code-Fragmente in eine

JSP-Seite (if, while,...)– Scripting Elements:

<% ... %>Scriptlet, dient zur Einbindung von ScriptingCode

<%= ... %>Expression, dient zur Einbindung von Java-Ausdrücken, bei denen das Ergebnis der Seite hinzugefügt werden soll

<%! ... %>Deklaration, dient zur Deklaration von Instanzvariablen und Methoden in einer JSP-Seite

Page 11: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

JSP Processing

Page 12: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Hello-World Servlet

Page 13: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Hello World JSP-Seite

Page 14: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Von JSP-Seite generiertes Servlet

Page 15: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Einschub: JavaBeans

JavaBeans sind alle Javaklassen, die folgenden Bedingungen genügen:

– Implementieren das Interface „java.io.Serializable“– Verfügen über einen leeren Konstruktor– Für den Zugriff auf die Attribute stehen get- und set-Methoden

zur Verfügung, die einer Namenskonvention genügen: Die get-/set-Methoden beginnen mit get/set und Enden mit dem

Attributname, wobei der erste Buchstabe des Attributes groß geschrieben ist

Beispiel:– Attribute: String name– Get-Methode: public String getName()...– Set-Methode: public void setName(String newName)...

Page 16: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Einschub: JavaBean - Beispiel

public class Person { private String name; private String fname; private String email; private String pwd; public Person(){ } public void setName(String newName){ name = newName; } public String getName(){ return name; } ... }

Page 17: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Beispiel: Person

<%@ page language="java" contentType="text/html" %> <html> <head><title>Aktuelle Uhrzeit</title></head>

<body> <jsp:useBean id="person" class=„Person"></jsp:useBean> Die Daten der Person sind: <ul> <li>Name: <jsp:getProperty name="person" property="name"></jsp:getProperty> <li>Vorname: <jsp:getProperty name="person" property="fname"></jsp:getProperty> <li>Email: <jsp:getProperty name="person" property="email"></jsp:getProperty> <li>Kennwort: <jsp:getProperty name="person" property="pwd"></jsp:getProperty> </ul> </body> </html>

Page 18: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Übergabe von Parametern (1)

<html> <head><title>Zeit eingeben</title></head>

<body> Geben Sie das aktuelle Datum ein: <form method="post" action="zeit2.jsp"> <input type="text" name="hours" size="2">:&nbsp; <input type="text" name="minutes" size="2"> <br><input type="submit" value="go"> </form> </body> </html>

Page 19: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Übergabe von Parametern (2)

<%@ page language="java" contentType="text/html" %> <html> <head><title>Eingegebene Uhrzeit</title></head>

<body> <jsp:useBean id="clock" class="java.util.Date„ scope=„request“> <jsp:setProperty name="clock" property="*"></jsp:setProperty> </jsp:useBean> Die eingegebene Zeit ist: <br>Stunden: <jsp:getProperty name="clock" property="hours"></jsp:getProperty> <br>Minuten: <jsp:getProperty name="clock" property="minutes"></jsp:getProperty> </body> </html>

Page 20: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Implizite JSP-Objekte

Request– Instanz der Klasse javax.servlet.http.HttpServletRequest– Ermöglicht Zugriff auf alle Informationen des Requests

Response– Instanz der Klasse javax.servlet.http.HttpServletResponse– Ermöglicht Zugriff auf alle Informationen des Response

Exception– Nur in Fehlerseiten verfügbar– Liefert Informationen zum aufgetretenen Fehler

Page 21: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Beispiel: Request-Informationen

<%@ page language="java" contentType="text/html" %> <html> <head><title>Eingegebene Uhrzeit</title></head>

<body> <h1>Request-Informationen</h1>s Remote-Host: <%= request.getRemoteHost() %> <br>Remote-Addr: <%= request.getRemoteAddr() %> <br>Browserkennung: <%= request.getHeader("User-Agent") %> <br>Protocol: <%= request.getProtocol() %> <br>Parameter1: <%= request.getParameter("param1") %> <br>Parameter2: <%= request.getParameter("param2") %> </body> </html>

Page 22: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Datenaustausch zwischen JSP und Servlets

ScopeBestimmt, wie lange und für welche User gemeinsame Informationen gültig sind

– PageSichtbar nur innerhalb der Seite

– RequestSichtbar innerhalb aller Seiten, die den gleichen eines Request abarbeiten

– SessionSichtbar innerhalb einer Session, u.U. über mehrere Requests hinweg

– ApplicationSichtbar innerhalb der Applikation, also sichtbar für alle User der gleichen Applikation

Page 23: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Beispiel: Datenaustausch ServletJSP (1)

private synchronized void handleGetPersonAction( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

Person person = new Person(); person.setName("Perschke"); person.setFirstname("Thomas"); person.setEmail("[email protected]"); person.setPassword("tp");

request.setAttribute("p1", person); RequestDispatcher rd = request.getRequestDispatcher("person.jsp"); rd.forward(request, response); }

Page 24: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Beispiel: Datenaustausch ServletJSP (2)

... <body> ... <jsp:useBean id="p1" scope="request" class=„Person" />

<p>Angaben zur Person: <br>Name: <%= p1.getName() %> <br>Vorname: <%= p1.getFirstname() %> <br>Email: <%= p1.getEmail() %> ... <p>Passwort: <jsp:getProperty name="p1" property=„password“ %>

</jsp:getProperty> ...

Page 25: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Beispiel: Datenaustausch ServletJSP (3)

... <body> ... <jsp:useBean id=„personen" scope="request" class=„java.util.Vector" />

<% for(int i=0; i<personen.size; i++){ %> <% Person einePerson = (Person)personen.elementAt(i); %> <p>Angaben zur Person <%= (i+1) %>: <br>Name: <%= einePerson.getName() %> <br>Vorname: <%= einePerson.getFirstname() %> <br>Email: <%= einePerson.getEmail() %> ... <p>Passwort: <jsp:getProperty name=„einePerson“ property=„password“ %>

</jsp:getProperty> ... <% }//end of for %>

...

Page 26: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

JSP-Tags

Problem: – Grundlegende Java-Kenntnisse notwendig- Mangelnde Portierbarkeit durch Bindung an Servlet

- Lösung:- Erzeugen eigener Tags zur Kapselung oft benötigter

Funktionen- Ziel:

- Vollständige Befreiung der JSP von Java-Code- Leichtere Wiederverwendung- Nutzung von Tag-Bibliotheken (JSP Standard Tag Library,...)

Page 27: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

JSP-Tags: Beispiel iterator-Tag

Der iterator-Tag soll dazu dienen, bestimmte HTML-Fragmente zu vervielfältigen.

Vorher:

<%@ page language="java" [...] %><html> [...] <body> <% for(int i=0; i<3; i++){ %> <p>Carpe Diem: Genieße den Tag!</p> <% } %> </body></html>

Nachher:

<%@ taglib uri=“[...]“ prefix=“mytags“ %><html> [...] <body> <mytags:iterate times=“3“> <p>Carpe Diem: Genieße den Tag!</p> </mytags:iterate> </body></html>

Page 28: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Ein eigenes Tag

Vorgehensweise:

1. Erstellen der Java-Klasse2. Konfiguration des Tag-Handlers3. Einbinden der Tag-Bibliothek4. Verwenden des Tags in einer JSP

Page 29: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Ein eigenes Tag – Erstellen der Java-Klasse

Erstellen der benötigten Java-Klasse, die die Funktionalität aufnimmt (Tag-Handler)

Java stellt dabei im Paket javax.servlet.jsp.tagext verschiedene Interfaces bereit. Kürzer: Verwendung der Klassen „TagSupport“ und „BodyTagSupport“ und überschreiben der Methoden

[...] public class IterationTag extends BodyTagSupport

implements BodyTag { [...] }

Page 30: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Ein eigenes Tag – Erstellen der Java-Klasse

Lebenszyklus eines Tags

<html>

[...]

[...]

</html>

<tag>

</tag>

[...]z.B. Text oder weitere Tags[...]

Rumpf

Hier wird die MethodedoStartTag() aufgerufen

Hier wird die MethodedoInitBody() aufgerufen

Hier wird die MethodedoAfterBody() aufgerufen

Hier wird die MethodedoEndTag() aufgerufen

Hier beginnt die Bearbeitung des nächsten Tags

Ende des Dokuments

EVAL_BODY_INCLUDE

SKIP_BODY

SKIP_PAGE

SKIP_BODY

EVAL_BODY_AGAIN

Page 31: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Ein eigenes Tag – Erstellen der Java-Klasse

Beispiel: Iterator-Tag

public class IterationTag extends BodyTagSupport [...] { private int iterations = 0; public void setTimes(Integer value){ iterations = value; } public int doAfterBody(){ BodyContent body = getBodyContent(); JspWriter out = body.getEnclosingWriter(); try{ for(int i=0; i<iterations; i++){ out.print(body.getString()); } }catch(IOException e){[...]}; return SKIP_BODY; } }

Page 32: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Ein eigenes Tag – Erstellen der Java-Klasse

Viele Servlet-Container verwalten ihre Tags über einen Pool. Aus diesem Grund sollten Tag-Handler, die einen zustand besitzen, über die Methode release() in den Ausgangszustand zurückgesetzt werden. Die Methode release() wird vom Servlet-Container nach Beendigung des Tag-Lebenszyklus aufgerufen.

public class IterationTag extends BodyTagSupport [...] { [...] public void release(){ iterations = 0; } }

Page 33: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Ein eigenes Tag – Konfiguration des Tag-Handlers

Dem Servlet-Container muss nun mitgeteilt werden, für welcher Tag-Handler für welches Tag zuständig ist. Was bei den Servlets der Deployment-Descriptor ist, wird in Tag-bibliotheken Tag Library Descriptor genannt (TLD).

<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE taglib PUBLIC [...] >

<taglib> [...] <tag> <name>iterate</name> <tag-class>IterationTag</tag-class> <attribute> <name>times</name> <required>true</required> <type>java.lang.Integer</type> </attribute> </tag> [...]</taglib>

Page 34: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Ein eigenes Tag – Einbinden der Tag-Bibliothek

Der TLD wird üblicherweise unterhalb des Verzeichnisses „web-inf“ im Dateisystem abgelegt

Im Web-Deployment-Descriptor wird der TLD dann verfügbar gemacht

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC [...]>

<web-app> [...] <taglib> <taglib-uri>/mytags</taglib-uri> <taglib-location>/WEB-INF/tlds/mytags.tld</taglib-location> </taglib> [...]</web-app>

Page 35: Softwaretechnik - Perschkeperschke.info/dhbwvs9363/sonst/java_jsp.pdf · 2016. 10. 13. · 20.07.10 Einschub: JavaBeans JavaBeans sind alle Javaklassen, die folgenden Bedingungen

20.07.10

Ein eigenes Tag – Verwendung in der JSP

<%@ taglib uri=“[...]“ prefix=“mytags“ %><html> [...] <body> <mytags:iterate times=“3“> <p>Carpe Diem: Genieße den Tag!</p> </mytags:iterate> </body></html>