jsp - java server pages · java server pages webapplikation • jsp container (konform zu servlet...
Post on 13-Jul-2020
23 Views
Preview:
TRANSCRIPT
Praktikum aus Softwareentwicklung 2
1Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
JSP - Java Server Pages
Praktikum aus Softwareentwicklung 2
Praktikum aus Softwareentwicklung 2
2Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server Pages
• Grundlagen– Syntax, Lebenszyklus, …
• Java Beans– Formularverarbeitung, benutzerdef. Tags, …
• Sonstiges– Alternativen zu JSPs, Zusammenfassung, Links, …
Praktikum aus Softwareentwicklung 2
3Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesGrundlagen
• Servlets– Dynamische Erzeugung von Web Inhalten (HTML, JPEG...)– Implementierung von Web Diensten (Wetter, Flugpläne, Börsen...)
• GUI mit Servlets– 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
Praktikum aus Softwareentwicklung 2
4Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesBeispiel 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
Praktikum aus Softwareentwicklung 2
5Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesLebenszyklus
• Transparente Übersetzung in Servlets
Übersetzung Ausführung
<%@ page ... %><html>...
class Clock_jsp extends HttpServlet {…}
JSP-Seite:Clock.jsp
Servlet
<html>...
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
Praktikum aus Softwareentwicklung 2
6Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
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 Server Pages Servlet generiert aus Clock.jsp
Praktikum aus Softwareentwicklung 2
7Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesWebapplikation
• 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 ResourcenHTML, DHTML, XHTML, XML, Images…
Praktikum aus Softwareentwicklung 2
8Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesEingebetter 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 { ... }
%>
Praktikum aus Softwareentwicklung 2
9Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesEingebetter 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"); } %>
Praktikum aus Softwareentwicklung 2
10Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesEingebetter 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!
Praktikum aus Softwareentwicklung 2
11Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesImplizite Objekte
Name Typ
request HttpServletRequest
response HttpServletResponse
pageContext javax.servlet.jsp.PageContext
session HttpSession
application ServletContext
out javax.servlet.jsp.JspWriter
config ServletConfig
page javax.servlet.jsp.JspPage (this)
exception Throwable
Praktikum aus Softwareentwicklung 2
12Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesFehlerbehandlung
• Ü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() %> ...
Praktikum aus Softwareentwicklung 2
13Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesDirektiven 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" %>
Praktikum aus Softwareentwicklung 2
14Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesDyn. Einbinden von Seitenteilen
• Aktion include– z.B.: <jsp:include page="menu.jsp" flush="true" />– Pfad relativ oder absolut zum Root-Verzeichnis der Web-Applikation
JSP-Server doc.jsp
doc2.jspGET doc.jsp
...
<jsp:include
page="doc2.jsp"
/>
...
Praktikum aus Softwareentwicklung 2
15Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesDynamisches 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"
/>
...
Praktikum aus Softwareentwicklung 2
16Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesParameter
• 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"); %>
Praktikum aus Softwareentwicklung 2
17Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server Pages
• Grundlagen– Syntax, Lebenszyklus, …
• Java Beans– Formularverarbeitung, benutzerdef. Tags, …
• Sonstiges– Alternativen zu JSPs, Zusammenfassung, Links, …
Praktikum aus Softwareentwicklung 2
18Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesJava 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>
Praktikum aus Softwareentwicklung 2
19Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesDeklaration/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
Praktikum aus Softwareentwicklung 2
20Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesDatenaustausch 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");
Praktikum aus Softwareentwicklung 2
21Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesInitialisierun 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" />
Praktikum aus Softwareentwicklung 2
22Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesVerwendung von Java Beans
• Verwenden eines Beans in Skripten– ... <%= bean.getDescription() %> ...
• Ausgabe einer Eigenschaft– <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="*" />
Praktikum aus Softwareentwicklung 2
23Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesFormularverarbeitung
• Klassisches MVC-Konzept
View
Controler Model
liest aus
verändert
modelChangeduserAction
steuert
Praktikum aus Softwareentwicklung 2
24Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesFormularverarbeitung
• 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
Praktikum aus Softwareentwicklung 2
25Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesFormularverarbeitung
Zustand abfragen
user:User
nr=1
name="Hugo"
pass="zzz"...
(3) Zustand anpassen
Model
<jsp:useBean id="user" class="beans.User" scope="request" />
...
<jsp:getProperty name="user" property="name" />
...
(1) Eingabeformular erzeugen
View
:UserEditor.jsp
<jsp:useBean id="user" class="beans.User" scope="request" />
...
<jsp:setProperty name="user" property="*" />
...
(2) Eingaben verarbeiten
Controller
:UserUpdate.jsp
Praktikum aus Softwareentwicklung 2
26Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesBenutzerdefinierte 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, ...
Praktikum aus Softwareentwicklung 2
27Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesCustom 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;}}
Praktikum aus Softwareentwicklung 2
28Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
• 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 Server PagesTag-Bibliotheken
Praktikum aus Softwareentwicklung 2
29Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server Pages
• Grundlagen– Syntax, Lebenszyklus, …
• Java Beans– Formularverarbeitung, benutzerdef. Tags, …
• Sonstiges– Alternativen zu JSPs, Zusammenfassung, Links, …
Praktikum aus Softwareentwicklung 2
30Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesAlternativen 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)
Praktikum aus Softwareentwicklung 2
31Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Java Server PagesZusammenfassung 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 Referencehttp://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
Praktikum aus Softwareentwicklung 2
32Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com
Ende der 6. Übung
top related