JSP - Java Server Pages

Werbung
Praktikum aus
Softwareentwicklung 2
JSP - Java Server Pages
Praktikum aus Softwareentwicklung 2
Java Praktikum – SS 2010 – [email protected]
1
Praktikum aus
Softwareentwicklung 2
Java Server Pages
•
•
•
Grundlagen
–
Syntax, Lebenszyklus, …
Java Beans
–
Formularverarbeitung, benutzerdef. Tags, …
Sonstiges
–
Alternativen zu JSPs, Zusammenfassung, Links, …
Java Praktikum – SS 2010 – [email protected]
2
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Grundlagen
•
Servlets
–
–
•
GUI mit Servlets
–
–
–
•
Dynamische Erzeugung von Web Inhalten (HTML, JPEG...)
Implementierung von Web Diensten (Wetter, Flugpläne, Börsen...)
Unübersichtlich ... out.print("<HTML>"); ...
HTML Design Tools können nicht direkt verwendet werden
Wartung von Servlet-Seiten durch Java-Programmierung
GUI mit Java Server Pages (JSP)
–
–
–
–
JSPs sind Text-Dokumente .jsp
Direkte Verwendung von HTML für GUI
Java in HTML eingebettet
Basierend auf der Servlet-Technologie
Java Praktikum – SS 2010 – [email protected]
3
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Beispiel Clock.jsp
<%@ page import="java.util.*" %>
<% GregorianCalendar clock =
GregorianCalendar.getInstance(); %>
<html>
<head>
<title>Clock</title>
</head>
<body>
Die aktuelle Zeit ist: <%= clock.getTime() %> <br>
Der Server steht in Zeitzone <%= clock.getTimeZone() %>
</body>
</html>
Hilfe zu HTML, JavaScript… siehe http://de.selfhtml.org/
Freier HTML Editor: http://www.pagebreeze.com
Java Praktikum – SS 2010 – [email protected]
4
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Lebenszyklus
•
Transparente Übersetzung in Servlets
<%@ page ...
%>
<html>
...
JSP-Seite:
Clock.jsp
Übersetzung
class Clock_jsp
extends
HttpServlet {…}
<html>
...
Ausführung
Servlet
HTML-Seite
Siehe generierte JSP Servlets (Windows Eclipse 3.4.1 Tomcat 6):
MY_WORKSPACE\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\Beispiele06\org\
apache\jsp\Clock_jsp.java
Java Praktikum – SS 2010 – [email protected]
5
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Servlet generiert aus Clock.jsp
import java.util.GregorianCalendar;
public final class Clock_jsp
extends org.apache.jasper.runtime.HttpJspBase {
…
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
{
out.write("\n");
out.write("<!DOCTYPE html PUBLIC…"); out.write("\r\n");
out.write("<html>\n"); out.write("<head>\n");
out.write("<meta http-equiv=\"Content-Type\"…");
out.write("<title>Clock</title>\n"); out.write("</head>\n");
out.write("<body>\n");
out.write("Die Zeit ist: <b>");
out.print( GregorianCalendar.getInstance().getTime() );
out.write("</b>\r\n"); …
} …
Java Praktikum – SS 2010 – [email protected]
6
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Webapplikation
•
•
•
•
•
•
JSP Container (konform zu Servlet Container)
Tomcat, WebSphere, JBoss…
Java Development Kit am Server – Compiler!
JSP Seiten, die Requests abarbeiten und dynamische Inhalt
generieren
Servlets, die Requests abarbeiten und dynamische Inhalt
generieren
Serverseitige JavaBeans Komponenten die Verhalten und Zustand
kapseln
Statische Resourcen
HTML, DHTML, XHTML, XML, Images…
Java Praktikum – SS 2010 – [email protected]
7
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Eingebetter Java-Code
•
1/3
Deklarationen
<%! ... %>
–
•
An beliebiger Stelle der JSP
Instanzvariablen des Servlet
<%! int k = 0; %>
•
Methoden des Servlet
<%! String methode1(int i) {
if ( i % 2 == 0 ) return "gerade";
else return "ungerade"; }
%>
•
Innere Klassen des Servlet
<%! class A extends Object {
... }
%>
Java Praktikum – SS 2010 – [email protected]
8
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Eingebetter Java-Code
•
2/3
Anweisungsfragmente (Scriptlets) <% ... %>
–
In HTML eingebetteter Java-Code, an beliebiger Stelle, z.B.
<% if(Calendar.getInstance().get(Calendar.AM_PM) ==
Calendar.AM) { %>
Guten Morgen
<% } else { %>
Guten Tag
<% } %>
•
•
Exceptions mit try/catch, oder an Error-JSP weiterleiten
Lokale Variablen
<% int i; %>
•
Direkte Ausgabe in die HTML-Seite: mit Variable "out"
<% if(Calendar.getInstance().get(Calendar.AM_PM) ==
Calendar.AM) {
out.print("Guten Morgen");
} else {
out.print("Guten Tag");
} %>
Java Praktikum – SS 2010 – [email protected]
9
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Eingebetter Java-Code
•
3/3
Ausdrücke <%= ... %>
–
Der Ergebnis wird in die HTML-Seite eingefügt, z.B.
<FORM>
<INPUT NAME="uid" VALUE="<%= user.getId() %>">
...
–
•
entspricht ...<% out.print( user.getId() ); %>...
Kommentare <%-- ... --%>
–
Im JSP: <%-- ... --%>
–
In Scriptlets: <% /* ... */ %>
–
HTML-Kommentare (<!-- ... -->) werden in die HTML-Seite
übernommen!
Java Praktikum – SS 2010 – [email protected]
10
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Implizite Objekte
Name
Typ
request
HttpServletRequest
response
pageContext
HttpServletResponse
javax.servlet.jsp.PageContext
session
HttpSession
application
ServletContext
out
javax.servlet.jsp.JspWriter
config
ServletConfig
page
exception
javax.servlet.jsp.JspPage (this)
Throwable
Java Praktikum – SS 2010 – [email protected]
11
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Fehlerbehandlung
•
•
•
Übersetzungsfehler
–
Ausgabe der Übersetzungsfehler
Nicht behandelte Exceptions
–
Ausgabe der Exception und des Ausführungsstack
Explizite Fehlerseite
–
Ausgangsseite:
<%@ page errorPage="fehler.jsp" %>
...
–
Im Ausnahmefall automatisches forward an die Fehlerseite,
z.B. an fehler.jsp:
<%@ page isErrorPage="true" %>
<% log("Es ist ein Fehler aufgetreten!", exception); %>
<H1>Ein Fehler ist aufgetreten</H1>
<%= exception.getMessage() %> ...
Java Praktikum – SS 2010 – [email protected]
12
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Direktiven bei JSP-Übersetzung
•
Direktive page
–
Legt die globalen Eigenschaften einer JSP-Seite fest, z.B.
<%@ page info="Meine ServerPage"
errorPage="fehler.jsp"
session="true"
import="java.util.*"%>
–
Weitere Attribute siehe:
http://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html
•
Direktive include
–
Einbinden von Seitenteilen (auch JSPs) zur Übersetzungszeit,
z.B. für Menüs oder Zugriffsberechtigungsprüfung:
<%@ include file="secure.jsp" %>
Java Praktikum – SS 2010 – [email protected]
13
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Dyn. Einbinden von Seitenteilen
•
Aktion include
–
z.B.: <jsp:include page="menu.jsp" flush="true" />
–
Pfad relativ oder absolut zum Root-Verzeichnis der WebApplikation
JSP-Server
GET doc.jsp
doc.jsp
...
<jsp:include
doc2.jsp
page="doc2.jsp"
/>
...
Java Praktikum – SS 2010 – [email protected]
14
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Dynamisches Weiterleiten
•
Aktion forward
–
z.B.: <jsp:forward page="special.jsp" />
–
–
Die bisherige Ausgabe wird gelöscht
IllegalStateException, falls der Ausgabepuffer schon voll war
JSP-Server
doc.jsp
doc2.jsp
GET doc.jsp
...
<jsp:forward
page="doc2.jsp"
/>
...
Java Praktikum – SS 2010 – [email protected]
15
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Parameter
•
Weitergabe von Parametern
–
Attribute des request-Objektes, z.B.
<% request.setAttribute("counter", "1"); %>
–
Alternative Schreibweise: Aktion param, z.B.:
<jsp:forward page="step2.jsp">
<jsp:param counter="1"/>
</jsp:forward>
•
Abfragen der Parameter
<% String i = request.getAttribute("counter"); %>
Java Praktikum – SS 2010 – [email protected]
16
Praktikum aus
Softwareentwicklung 2
Java Server Pages
•
•
•
Grundlagen
–
Syntax, Lebenszyklus, …
Java Beans
–
Formularverarbeitung, benutzerdef. Tags, …
Sonstiges
–
Alternativen zu JSPs, Zusammenfassung, Links, …
Java Praktikum – SS 2010 – [email protected]
17
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Java Beans
•
Einfache Datenobjekte ohne Programmlogik
●
Transferobjekte im DAO Pattern
●
Datenobjekte zum Anzeigen/Bearbeiten in GUI...
•
Konventionen
–
Konstruktor ohne Argumente
–
Eigenschaften (Properties) -> get/set-Methoden
–
Ereignisse (Events und EventListener)
–
Methoden
•
Unterstützung durch JSP-Tags
–
<jsp:useBean>
–
<jsp:getProperty>
–
<jsp:setProperty>
Java Praktikum – SS 2010 – [email protected]
18
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Deklaration/Scope von Java Beans
•
Deklaration
–
<jsp:useBean id="database"
class="mybeans.MySQL_DB"
scope="application" />
–
–
•
Eine lokale Variable "database" wird definiert und initialisiert
Bean-Klasse:
praktikum/WEB-INF/classes/mybeans/MySQL_DB.class
Gültikeitsbereiche (scope)
–
page - lokale Variable in _jspService (default)
–
request - Attribut des HttpServletRequest
–
session - Attribut der HttpSession
–
application - Attribut des ServletContext
Java Praktikum – SS 2010 – [email protected]
19
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Datenaustausch Servlets/JSPs
•
Zugriff auf Java Beans
–
Beans mit scope = "page": sind privat in der JSP
–
Beans mit scope = "request":
doGet(HttpServletRequest request,
HttpServletResponse response) {
...
bean = (BeanType)request.getAttribute("beanName");
–
Beans mit scope = "session":
HttpSession session = request.getSession();
bean = (BeanType)session.getAttribute("beanName");
–
Beans mit scope = "application":
bean = (BeanType)getServletContext().getAttribute("beanName");
Java Praktikum – SS 2010 – [email protected]
20
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Initialisierun von Java Beans
•
Initialisierung beim erstmaligen Zugriff auf eine Bean:
<jsp:useBean id="db" class="beans.MySQL_DB" scope="application">
<% db.setURL("jdbc:mysql://server:3306/db");
db.connect(); %>
</jsp:useBean>
•
Vorkonfigurierte Beans
–
Design Time: Bean erzeugen, konfigurieren, und
speichern (serialisieren), z.B.:
...
MySQL_DB mydb=new MySQL_DB("jdbc:mysql://server:3306/db");
ObjectOutputStream os = new ObjectOutputStream(
new FileOutputStream("mydb.ser"));
os.writeObject(mydb);
–
Run Time: Bean laden (deserialisieren), z.B.:
<jsp:useBean id="db" beanName="mydb.ser" type="beans.DB" />
Java Praktikum – SS 2010 – [email protected]
21
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Verwendung von Java Beans
•
Verwenden eines Beans in Skripten
–
•
Ausgabe einer Eigenschaft
–
•
... <%= bean.getDescription() %> ...
<jsp:getProperty name="bean" property="description"/>
Setzen von Eigenschaften
–
<jsp:setProperty name="bean"
property="description"
value="Ich bin ein Beaner" />
–
Beliebige Objekt-Werte:
<jsp:setProperty name="bean" property="date"
value="<%= new java.util.Date() %>" />
–
Eigenschaften von Request-Parametern übernehmen:
• <jsp:setProperty name="bean" property="name" param="n"/>
• <jsp:setProperty name="bean" property="name" />
• <jsp:setProperty name="bean" property="*" />
Java Praktikum – SS 2010 – [email protected]
22
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Formularverarbeitung
•
Klassisches MVC-Konzept
View
steuert
liest aus
userAction
modelChanged
Controler
Model
verändert
Java Praktikum – SS 2010 – [email protected]
23
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Formularverarbeitung
•
Typische Schritte
(1) Präsentation des Formulars
(2) Überprüfung der Eingabe (Vollständigkeit, Plausibilität)
(3) Verarbeitung der Daten durch den Server
(4) Rückmeldung (Erfolg oder Misserfolg)
•
•
MVC-Pattern mit Servlets und JSPs
●
Model enthält Formulardaten --> Java Bean, z.B. User.java
●
View zeigt die Model-Daten an --> JSP, z.B. UserEditor.jsp
●
Controller verarbeitet die Eingaben --> Servlet oder JSP, z.B.
UserUpdate.jsp
Vereinfachtes Modell:
– Controller und View sind in einem JSP vereint
Java Praktikum – SS 2010 – [email protected]
24
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Formularverarbeitung
:UserUpdate.jsp
(2) Eingaben verarbeiten
<jsp:useBean
id="user"
class="beans.User"
scope="request" />
...
<jsp:setProperty
name="user"
property="*" />
Controller
...
(1) Eingabeformular erzeugen
:UserEditor.jsp
(3) Zustand anpassen
<jsp:useBean
id="user"
class="beans.User"
scope="request" />
Zustand abfragen
...
<jsp:getProperty
name="user"
property="name" />
...
user:User
nr=1
name="Hugo"
pass="zzz"
...
View
Java Praktikum – SS 2010 – [email protected]
Model
25
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Benutzerdefinierte Tags
•
•
•
Vordefinierte Tags
–
<jsp:useBean>, <jsp:getProperty>, <jsp:setProperty>,
<jsp:include>
–
Komplexere Funktionen nur mit Java-Skripten
Erweiterte Funktionalität durch benutzerdefinierte Tags
–
z.B. Datenbankzugriff, Berechtigungsprüfung, ...
–
Tag kann ohne Programmierkenntnisse verwendet werden
Java Beans zur Implementierung von Tags
–
Interface javax.servlet.jsp.tagext.Tag, etc.
–
Tag-Attribut => Bean-Property
–
Einfache Tags können auf Beans zugreifen, HTML ausgeben, etc.
–
Komplexe Tags realisieren Schleifen, deklarieren Variablen, ...
Java Praktikum – SS 2010 – [email protected]
26
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Custom Tags
•
•
Verwendung in JSP:
●
<currenttime timeZone="Pacific/Fiji"/>
Implementierung:
public class CurrentTime extends SimpleTagSupport {
private SimpleDateFormat dateFormat =
new SimpleDateFormat("yyyy.MMMMM.dd - hh:mm aaa");
private String timeZone;
@Override
public void doTag() throws JspException, IOException {
PageContext pageContext = (PageContext) getJspContext();
JspWriter out = pageContext.getOut();
...
dateFormat.setTimeZone(tz);
out.print(dateFormat.format(new Date()));
}
public void setTimeZone(String timeZone) {this.timeZone = timeZone;}
public String getTimeZone() {return timeZone;}
}
Java Praktikum – SS 2010 – [email protected]
27
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Tag-Bibliotheken
•
Deklaration der verwendete Tag Libraries
●
•
<%@ taglib uri="/WEB-INF/mytaglib.tld" prefix="t" %>
Definition im Tag Library Descriptor, z.B.: security.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0"
<tlib-version>1.0</tlib-version>
<short-name>demo</short-name>
<uri>DemoTags</uri>
<tag>
<name>currenttime</name>
<tag-class>bsp.tags.CurrentTime</tag-class>
<body-content>empty</body-content>
<attribute>
<name>timeZone</name>
<!-- runtime expression values allowed: "${param['timeZone']}" -->
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute> </tag>
</taglib>
Java Praktikum – SS 2010 – [email protected]
28
Praktikum aus
Softwareentwicklung 2
Java Server Pages
•
•
•
Grundlagen
–
Syntax, Lebenszyklus, …
Java Beans
–
Formularverarbeitung, benutzerdef. Tags, …
Sonstiges
–
Alternativen zu JSPs, Zusammenfassung, Links, …
Java Praktikum – SS 2010 – [email protected]
29
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Alternativen zu JSP
•
•
•
Einfachere Skript-Sprachen als Java
–
Servlet-basierte Skriptsprachen: WebMacro, Tea, Velocity, ...
siehe http://www.servlets.com/tools/index.html
–
PHP: http://www.php.net/
–
Ruby: http://www.ruby-lang.org/de/
Java Web-Application Frameworks
–
Struts: http://struts.apache.org/
–
Cocoon „XML publishing framework“: http://cocoon.apache.org/
–
Java Server Faces: http://java.sun.com/javaee/javaserverfaces/
–
Grails: http://grails.codehaus.org/
ASP mit .NET (Microsoft)
Java Praktikum – SS 2010 – [email protected]
30
Praktikum aus
Softwareentwicklung 2
Java Server Pages
Zusammenfassung und Links
•
Java Server Pages
–
–
–
–
–
–
•
HTML-Dokumente (statische Fragmente)
Eingebettete Java-Skripte (dynamische Fragmente)
Automatische Übersetzung in Servlets
Verwendung von Java-Beans
MVC-Pattern
Syntax Reference
http://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html
Links
–
–
–
–
http://www.jsptutorial.org/
http://www.servlets.com/index.tea
http://www.jsp-develop.de/
http://de.wikipedia.org/wiki/Model_View_Controller
Java Praktikum – SS 2010 – [email protected]
31
Praktikum aus
Softwareentwicklung 2
Ende der 6. Übung
Java Praktikum – SS 2010 – [email protected]
32
Herunterladen