1 / 18

Java 2 Enterprise Edition (J2EE)

Java 2 Enterprise Edition (J2EE). Sascha Baumeister Software Architect Specification Lead JSR086 IBM Deutschland Entwicklung GmbH sbaumei@de.ibm.com. Teil IV – JSP / JSTL / ViewBeans. Java ServerPages (JSP) JSP Standard Tag Library (JSTL) ViewBeans. JSP.

karl
Download Presentation

Java 2 Enterprise Edition (J2EE)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java 2 Enterprise Edition (J2EE) Sascha Baumeister Software Architect Specification Lead JSR086 IBM Deutschland Entwicklung GmbH sbaumei@de.ibm.com

  2. Teil IV – JSP / JSTL / ViewBeans • Java ServerPages (JSP) • JSP Standard Tag Library (JSTL) • ViewBeans

  3. JSP • Java ServerPages (JSP) ist eine Erweiterung von HTML für das Design von dynamischen Web-Seiten  View • JSP-Seiten bestehen aus standard HTML, JSP Direktiven, JSP Scrips, und JSP Aktionen • JSPs werden mittels eines JSP-Compilers in Java Servlets übersetzt  „verkehrte“ Servlets

  4. Wichtigste JSP Direktiven • JSP Direktiven teilen dem JSP-Compiler für die Übersetzungsphase relevante Information mit. • Syntax: <%@ Direktive %> • Eine Page-Direktive teilt dem JSP-Compiler Meta-Information über die JSP-Seite mit: Threadsicherheit, Servlet-Superklasse, etc. • Eine TagLib-Direktive erlaubt die Verwendung von benutzerdefinierten Tags in einer JSP-Seite • Eine Include-Direktive weist den JSP-Compiler an den Inhalt eines Files in das zu generierende Servlet aufzunehmen.

  5. JSP Direktiven - Beispiel <HTML> <HEAD> <TITLE>JSP Direktiven</TITLE> <%@ page buffer=”none” isThreadSafe=”no” errorPage=”/fehler.jsp” %> </HEAD> <BODY> <%@ taglib uri=”http://www.myserver.com/customtags” prefix=”custom” /> <%@ include file=”Seiteninhalt.html” %> </BODY> </HTML>

  6. JSP Scripting • JSP Scripting erlaubt die direkte Verbindung von Java Code mit HTML • Deklarationen deklarieren Methoden und Variablen für das zu generierende Servlet  Syntax: <%! Deklaration %> • Scriptlets sind Java-Codefragmente, die der JSP Compiler in die Service-Methode des zu generierenden Servlets einbauen soll  Syntax: <% Scriptlet %> • Expressions sind Java-Ausdrücke, deren Evaluierungs-Ergebnis der JSP Compiler in das zu generierenden Servlet einbauen soll  Syntax: <%= Expression %>

  7. JSP Scripting - Beispiel <HTML> <HEAD> <TITLE>JSP Scripting</TITLE> </HEAD> <BODY> Millisekunden seit 1970: <%= System.currentTimeMillis() %> <P> <%! private int timesThree(int multiplier) { return multiplier * 3; } %> Vielfache von 3: <P> <% for (int index =0; index < 10; index++) { %> <%= index %>.Vielfaches: <%= this.timesThree(index) %> <P> <% } %> </BODY> </HTML> zur Laufzeit Evaluierungs- Ergebnis in HTML einfügen Definition einer Servlet-Methode Iteration Aufruf der neuen Servlet-Methode

  8. JSP Scripting - Übersetzung package de.ba; import javax.servlet.*;import javax.servlet.http.*;import java.io.*; public class GeneratedJSPServlet extends HttpServlet { private int timesThree(int multiplier) { return multiplier * 3; } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.getWriter().println("<HTML><HEAD><TITLE>JSP Scripting</TITLE></HEAD><BODY>"); response.getWriter().println("Millisekunden seit 1970: „ + Integer.toString(System.currentTimeMillis())); response.getWriter().println(„Vielfache von 3:"); for (int index =0; index < 10; index++) { response.getWriter().println(Integer.toString(index) + „.Vielfaches: „ + Integer.toString(this.timesThree(index))); } response.getWriter().println(„</BODY></HTML>“); } } Einfügen der Methoden-Deklaration Einfügen der Expression Einfügen der Iteration

  9. JSP Aktionen • JSP Aktionen sind Tags, die in Java-Code übersetzt werden und ähnlich wie Scriptlets/Expressions in die Service-Methode des zu generierenden Servlets einfließen • 6 Standard Aktionen werden von jedem JSP Compiler ünterstützt, benutzerdefinierte Aktionen sind über die Include-Direktive einbindbar • JSR 052 definiert zusätzlich eine umfangreiche Standard Tag Library für JSPs (JSTL). Die Spezifikation ist zur Zeit beim JCP als Proposed Final Draft verfügbar, Jakarta beheimatet die bisher einzige JSTL-Implementierung.

  10. Wichtigste JSP Standard- Aktionen • Die <jsp:useBean> Aktion assoziiert ein neues oder übergebenes Java-Objekt mit einem Namen • Die <jsp:getProperty> Aktion liest ein Property aus einem Java-Objekt per Java Introspection aus, konvertiert den Wert in einen String und fügt das Ergebnis in die HTML-Ausgabe ein • Die <jsp:setProperty> Aktion modifiziert ein Property aus einem Java-Objekt aus, indem es den gegebenen String in den passenden Java-Typ konvertiert

  11. JSP Aktionen - Beispiel <HTML> <HEAD> <TITLE>JSP Aktionen</TITLE> </HEAD> <BODY> <jsp:useBean id=„datum“ class=„java.util.Date“ scope=„session“ /> Stunde: <jsp:getProperty name=„datum“ property=„hours“ /> <P> Minute: <jsp:getProperty name=„datum“ property=„minutes“ /> <P> Sekunde: <jsp:getProperty name=„datum“ property=„seconds“ /> <P> </BODY> </HTML> der Tagidentifikator für JSP Standard-Aktionen

  12. JSP Standard Tag Library (JSTL) • Die Verwendung von Java-Scripts in JSPs führt zu unlesbarem Code  Tag-Libs verwenden! • Die Erstellung von Custom-Taglibs ist aufwendig und führt ebenfalls zu schwer wartbarem Code! • JSTL bietet einen umfangreichen Satz von vielfältig einsetzbaren Tags • JSTL bietet ebenso Tags zur Einbindung von XML, SQL und Expressions • JSTL ist in JSR 052 definiert worden

  13. JSTL Beispiel <HTML><HEAD><TITLE>JSTL Sample</TITLE></HEAD> <BODY> <%-- JSTL Core Tags --%> <%@ taglib uri="/WEB-INF/tld/c-rt.tld" prefix="c_rt" %> <%-- JSTL I18N Formatting Tags--%> <%@ taglib uri="/WEB-INF/tld/fmt-rt.tld" prefix="fmt_rt" %> <%-- JSTL SQL Tags --%> <%@ taglib uri="/WEB-INF/tld/sql-rt.tld" prefix="sql_rt" %> <%-- JSTL XML Tags --%> <%@ taglib uri="/WEB-INF/tld/x-rt.tld" prefix="x_rt" %> <c_rt:if test='<%= request.getParameter("param") != null%>'> Parameter Value: <%= request.getParameter("param") %> </c_rt:if> </body> </html> Tagidentifikator definiert für JSTL Core-Tags

  14. ViewBeans • ViewBeans sind benutzerdefinierte Java-Klassen, die dem JavaBean Layout entsprechen • ViewBeans sollten nur Properties besitzen, die Java Basis-Typen oder Strings sind  leichte Konvertierbarkeit für JSP Aktionen! • ViewBeans werden aus Modell-Daten erzeugt, Exceptions beim Konvertieren werden in Servlets bearbeitet • ViewBeans werden JSPs zur Darstellung/Modifikation übergeben  Komponenten-Vertrag zwischen Servlets und JSPs

  15. Applikations-Architektur Datenbank-Modellierer J2EE-Entwickler JNDI rufe Model Servlet JDBC erzeuge ViewBeans rufe View, übergebe ViewBeans JSP Web-Designer Model - View - Controller

  16. Beispiel - JSP <HTML> <HEAD> <TITLE>Artikel-Details</TITLE> </HEAD> <BODY> <jsp:useBean id="artikel" class=„de.ba.ArtikelViewBean" scope="session" /> Name: <jsp:getProperty name="artikel" property="name" /> <P> Bestand: <jsp:getProperty name="artikel" property="quantity" /> <P> </BODY> </HTML> wichtig bei Übergabe von ViewBeans an JSPs unter diesem Namen muß ein Servlet das ViewBean übergeben File: jsp/ArtikelView.jsp

  17. Beispiel - ViewBean package de.ba; public class ArtikelViewBean { private final String name; private final int quantity; public ArtikelViewBean(String name, int quantity) { this.name = name; this.quantity = quantity; } public String getName() { return this.name; } public int getQuantity() { return this.quantity; } }

  18. Beispiel - Servlet package com.ibm.ba; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class ArtikelAbfrageServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { try { String name = request.getParameter("name"); int quantity = String.parseInt(request.getParameter("name")); ArtikelViewBean artikel = new ArtikelViewBean(name, quantity); request.getSession(true).setAttribute("artikel", artikel); this.getServletConfig().getServletContext().getRequestDispatcher("jsp/ArtikelView.jsp").forward(request, response); } catch (Throwable exception) { exception.printStackTrace(response.getWriter()); } } } im JSP definierter Name das Servlet übergibt das ViewBean im Session-Context, daher scope=session im JSP!

More Related