1 / 40

Fejlett Programoz ási Technikák 2.

Fejlett Programoz ási Technikák 2. 15 / 10. Az előző előadás tartalma. Java Servlet Servlet Interfész Servlet Context Request Response Filter Session Web Application. Irodalom. http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/

wilmer
Download Presentation

Fejlett Programoz ási Technikák 2.

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. Fejlett Programozási Technikák 2. 15/10

  2. Az előző előadás tartalma • Java Servlet • Servlet Interfész • Servlet Context • Request • Response • Filter • Session • Web Application

  3. Irodalom • http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/ • http://java.sun.com/j2ee/1.4/docs/tutorial/doc/J2EETutorial.pdf • Hans Bergsten: Java Server Pages • http://web.princeton.edu/sites/isapps/jasig/2004summerWestminster/Presentations/java%20server%20faces.pdf

  4. A mai előadás tartalma • Probléma a Java Servlettel • Template eszközök • Java Server Pages • Áttekintés • Elemei • Életciklusa • Objektumok • Java Beanek használata • Java Standard Tag Library • Custom Tag Library • Java Server Faces • Feladata • Elemei • Navigáció • Támogató Bean

  5. Probléma a Java Servlet-tel • MVC ? • Println(”<HTML></HTML>”) • Nem különülnek el a feladatok • HTML tervező • Felhasználói interfész logika fejlesztő • Üzleti logika fejlesztő • Komponens fejlesztő • Alkalmazás tervező • A fejlesztő hozzáfér a teljes Servlet API-hoz (html programoz is !) • Nehézkes RAD eszözöket vagy WYSIWYG eszközöket alkalmazni

  6. Megoldások • Template engine-k használata • Magasabb szintű funkciók • Bővíthető építőelem készlet • Népszerűbb template motorok-k: • JSP • Velocity • FreeMarker • … • Ezekre épülő keretrendszerek: • Java Server Faces • Struts • Turbine

  7. JSP 1.0 <html> <head><title>Hello</title></head> <body> <h1> <% if (request.getParameter("name") == null) { out.println("Hello World"); } else { out.println("Hello, " + request.getParameter("name")); } %> </h1> </body></html>

  8. Velocity <html> <head><title>Hello</title></head> <body> <h1> #if ($request.getParameter("name") == null) Hello World #else Hello, $request.getParameter("name") #end </h1> </body> </html>

  9. A JSP áttekintése • Bármilyen XML oldalon lehet • XML szintakszis • Elvileg megvalósíthatja az MVC-t vagy Model 2-architektúrát • Model: Java Bean • View: JSP • Controler: Servlet • Azonban tipikusan Model 1 architekúra • Az üzleti logika és a megjelenítés nincs szeparálva

  10. Elemei • Oldal direktíva • <%@ page contentType="text/html; charset=UTF-8" %> • Akció elem direktíva • <%@ taglib uri=http://java.sun.com/jsp/jstl/core prefix="c" %> • Akció elemek • <jsp:useBean id="locales" scope="application„ class="mypkg.MyLocales"/> • JSP elemek (Expression Language) • <c:set var="selectedFlag” value="${!empty selectedLocaleString}" /> • Szkript elemek • <%java kód%>

  11. Példa • Minta fájl

  12. A JSP oldal életciklusa • Konvertálás Servletté • Fordítás • Futtatás • Bufferelés

  13. Objektumok • Implicit • A tároló hozza létre őket • Request, … • Alkalmazás specifikus • Tipikusan Java Bean-ben tárolódnak • Megosztott objektumok • Szálak között (I/N) • Kötődhetnek: • Laphoz – pageContext • Alkalmazáshoz - servletContext • Viszonyhoz – session • Kéréshez – request • Válaszhoz – response

  14. Java Bean-nek használata • <jsp:useBean id=" bookDB” scope="application” class="mypkg. bookDB "/> • <c:set var="bid" value="${param.bookId}"/> • <jsp:setProperty name="bookDB" property="bookId” value="${bid}" /> • <jsp:setProperty name="bookDB" property=”*”/> • ${bookDB.bookDetails.title} • <jsp:getProperty name="beanName" property="propName"/>

  15. Java Server Pages Standard Tag Library • Standard, gyakran használt elemek összegyűjtve • Típusai • Alap (c) • Változó támogatás • Folyam vezérlés • URL manipulálás • Egyéb • XML (x) • Alap • Folyam vezérlés • Transzformáció • I18n (fmt) • Lokalitás • Üzenet formázás • Szám, dátum formázás • Adatbázis (sql) • SQL • Egyébb (fn) • Gyűjtemény hossz • String manipulálás

  16. Példák • Core <c:set var="foo" scope="session" value="..."/> <c:forEach var="item" items="${sessionScope.cart.items}"> ... <tr> <td align="right" bgcolor="#ffffff"> ${item.quantity} </td> ... </c:forEach> • URL <acme:transform> <jsp:include page="/exec/employeesList"/> <acme:transform/> <c:import url="/books.xml" var="xml" /> <x:parse doc="${xml}" var="booklist" scope="application" /> • SQL <c:set var="bid" value="${param.Add}"/> <sql:query var="books" > select * from PUBLIC.books where id = ? <sql:param value="${bid}" /> </sql:query>

  17. Saját Elem Könyvtár • Újrahasznosítható komponensek • Felhasználó által definiált JSP komponens • Könyvtárakba gyűjtik a hasonló funkciókat, egy-egy funkciót megvalósító kód az elem kezelő (Tag Handler) • Logika/Megjelenítés elkülönül • Lehetőségek: • Paraméterek átadása • Értékek visszaadása • Minden objektumot elér a JSP oldalon • Kommunikálhatnak egymással • Egymásba ágyazhatóak • Két típus: • Egyszerű (Nem lehet benne szkript elem) • Klasszikus • Tag fájl JSP vagy Java kód, a tároló fordítja le

  18. Attribútumok • Elem attribútumok: • Egyszerű • <pelda:p attr = ”érték”/> • <pelda:p attr = ”${object.Value}”/> • Darab (Fragment) egy JSP kód darabot kap attribútumként <sc:catalog bookDB ="${bookDB}" color="#cccccc"> <jsp:attribute name="normalPrice"> <fmt:formatNumber value="${price}" type="currency"/> </jsp:attribute> <jsp:attribute name="onSale"> <strike><fmt:formatNumber value="${price}” type="currency"/></strike><br/> <font color="red"><fmt:formatNumber value="${salePrice}” type="currency"/></font> </jsp:attribute> </sc:catalog> • Dinamikus • Nincs specifikálva, menet közben derül ki

  19. Törzs (Body) • Egy elem más elemeket és HTML tartalmat is tartalmazhat <c:if test="${param.Clear}"> <font color="#ff0000" size="+2"><strong> You just cleared your shopping cart! </strong><br>&nbsp;<br></font> </c:if> • jsp:body

  20. Elemek közötti kommunikáció • Megosztott objektumok segítségével kommunikálnak (oldal környezet) <c:set var="aVariable" value="aValue" /> <tt:anotherTag attr1="${aVariable}" /> • Az egymásba ágyazott elemek a privát változókat is használhatják

  21. Példa • Tag fájl • JSP kódot tartalmaz (WEB-INF/tags, WEB-INF/lib) <%@ attribute name="greeting" required="true" %> <%@ attribute name="name" required="true" %> <h2><font color="black">${greeting}, ${name}!</font></h2> • Használata: <%@ taglib tagdir="/WEB-INF/tags" prefix="h" %> <html> <head><title>Hello</title></head> <body bgcolor="white"> <c:set var="greeting" value="Hello" /> <form method="get"> <input type="text" name="username" size="25"> <p></p> <input type="submit" value="Submit"> <input type="reset" value="Reset"> </form> <h:response greeting="${greeting}” name="${param.username}"/>

  22. Tag Library Descriptor • Amennyiben Java-ban írjuk meg az elemkészletünket akkor szükséges • Információt tartalmaz az elem gyűjteményről és az elemekről is <tag> <name>present</name> <tag-class>condpkg.IfSimpleTag</tag-class> <body-content>scriptless</body-content> ... <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> ... </tag>

  23. Java Tag • SimpleTag, interfészt kell megvalósítani • doTag • get/set • javax.servlet.jsp.JspContext • getJspBody() • … public HelloWorldSimpleTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { getJspContext().getOut().write("Hello, world."); } } public class SimpleWriter extends SimpleTagSupport { public void doTag() throws JspException, IOException { StringWriter sw = new StringWriter(); jspBody.invoke(sw); jspContext(). getOut().println(sw.toString().toUpperCase()); } }

  24. Iterátor Tag <%@ taglib uri="/tlt" prefix="tlt" %> <html> <head> <title>Departments</title> </head> <body bgcolor="white"> <jsp:useBean id="myorg" class="myorg.Organization"/> <table border=2 cellspacing=3 cellpadding=3> <tr> <td><b>Departments</b></td> </tr> <tlt:iterator var="departmentName" type="java.lang.String" group="${myorg.departmentNames}"> <tr> <td><a href="list.jsp?deptName=${departmentName}"> ${departmentName}</a></td> </tr> </tlt:iterator> </table> </body> </html>

  25. Iterátor Tag public void doTag() throws JspException, IOException { if (iterator == null) return; while (iterator.hasNext()) { getJspContext().setAttribute(var, iterator.next()); getJspBody().invoke(null); } } public void setVar(String var) { this.var = var; } public void setGroup(Collection group) { this.group = group; if(group.size() > 0) iterator = group.iterator(); }

  26. Szkriptek használata • JSP oldalakon Java kódot is használhatunk • Nem célszerű használnunk mert eléggé átláthatatlan lesz az oldal • Biztonsági kockázata is van (a servlet kontextushoz is hozzáférhet mindenki) <%! private BookDBAO bookDBAO; public void jspInit() { bookDBAO = (BookDBAO)getServletContext().getAttribute("bookDB"); if (bookDBAO == null) System.out.println("Couldn’t get database."); } %> <%! public void jspDestroy() { bookDBAO = null; } %>

  27. Cél

  28. Java Server Faces • Szerver oldali web komponens felhasználói felületek létrehozására • Model 2, MVC • A logika és a megjelenítés elkülönül • Hasonló lehetőségeket biztosít a fejlesztőknek mint a Desktop GUI fejlesztése • A Servlet API-ra épül -> független a JSP-től

  29. JSF • Elemei: • API az UI komponensek reprezentálására és állapotuk kezelésére, validálásra, navigációra, … • JSP Elem könyvtárak • Segítségével • A felhasználói eseményeket a szerver oldali kódhoz köthetjük • Az UI komponensek adatait szerver oldali adattárolókhoz köthetjük • UI készítés újrafelhasználható elemekkel • UI állapot elmentése és betöltése • Folyamatokat definiálhatunk

  30. Komponens modell • UIComponent-ek (UIComponentBase) melyek leírják az UI komponensek állapotát és viselkedését • Renderelő modell mely leírja a megjelenését • Kódolás, Dekódolás • Esemény kezelő (JavaBean tervezési mintát követi) • ActionEvent • ValueChangedEvent • Konverziós modell • Validációs modell (egy vagy több üzenetet gyártanak) <h:inputText id="userNo” value="#{UserNumberBean.userNumber}” validator_length minimum=”6” maximum='10” />

  31. Hogyan működik

  32. Kérés feldolgozási életciklus

  33. Tipikus JSF alkalmazás • Java Bean-ek • Esménykezelők • Validátorok • JSP oldalak • Szerver oldali segéd osztályok • Facesconfig.xml

  34. Példa • Jsf.jsp

  35. Navigáció definiálása <navigation-rule> <from-view-id>/greeting.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/response.jsp</to-view-id> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/response.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/greeting.jsp</to-view-id> </navigation-case> </navigation-rule> <h:commandButton id="submit" action="success" value="Submit" />

  36. Támogató Bean • Feladata az oldalon lévő elemek adatainak tárolása és az eseménykezelők, validálók, … megvalósítása Integer userNumber = null; ... public void setUserNumber(Integer user_number) { userNumber = user_number; } public Integer getUserNumber() { return userNumber; } public String getResponse() { if(userNumber != null && userNumber.compareTo(randomInt) == 0) { return "Yay! You got it!"; } else { return "Sorry, "+userNumber+" is incorrect."; } }

  37. Menedzselt Bean • A támogató babot regisztrálnunk kell <managed-bean> <managed-bean-name>UserNumberBean</managed-bean-name> <managed-bean-class> guessNumber.UserNumberBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>minimum</property-name> <property-class>long</property-class> <value>0</value> </managed-property> <managed-property> <property-name>maximum</property-name> <property-class>long</property-class> <value>10</value> </managed-property> </managed-bean>

  38. Fejlesztési lépések • Modell objektumok fejlesztése • Ezek hozzárendelése menedzselt babként • Web oldalak létrehozása UI komponensekkel • Navigáció definiálása • Web.xml konfigurálása

  39. A mai előadás tartalma • Probléma a Java Serlettel • Template eszközök • Java Server Pages • Áttekintés • Elemei • Életciklusa • Objektumok • Java Beanek használata • Java Standard Tag Library • Custom Tag Library • Java Server Faces • Feladata • Elemei • Navigáció • Támogató Bean

  40. A következő előadás tartalma • JNDI • Corba • RMI

More Related