1 Fejlett Programozási Technikák 2. 15/10
Fejlett Programozási Technológiák 2. 2 Az előző előadás tartalma Java Servlet Servlet Interfész Servlet Context Request Response Filter Session Web Application
Fejlett Programozási Technológiák 2. 3 Irodalom Tutorial/ Tutorial/ 2EETutorial.pdf 2EETutorial.pdf Hans Bergsten: Java Server Pages 4summerWestminster/Presentations/java%20s erver%20faces.pdf 4summerWestminster/Presentations/java%20s erver%20faces.pdf
Fejlett Programozási Technológiák 2. 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
Fejlett Programozási Technológiák 2. 5 Probléma a Java Servlet-tel MVC ? Println(” ”) 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
Fejlett Programozási Technológiák 2. 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
Fejlett Programozási Technológiák 2. 7 JSP 1.0 Hello <% if (request.getParameter("name") == null) { out.println("Hello World"); } else { out.println("Hello, " + request.getParameter("name")); } %>
Fejlett Programozási Technológiák 2. 8 Velocity Hello #if ($request.getParameter("name") == null) Hello World #else Hello, $request.getParameter("name") #end
Fejlett Programozási Technológiák 2. 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
Fejlett Programozási Technológiák Elemei Oldal direktíva Akció elem direktíva Akció elemek JSP elemek (Expression Language) Szkript elemek
Fejlett Programozási Technológiák Példa Minta fájl
Fejlett Programozási Technológiák A JSP oldal életciklusa Konvertálás Servletté Fordítás Futtatás Bufferelés
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák Java Bean-nek használata ${bookDB.bookDetails.title}
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák Példák Core... ${item.quantity}... URL <x:parse doc="${xml}" var="booklist" scope="application" /> SQL select * from PUBLIC.books where id = ?
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák Attribútumok Elem attribútumok: Egyszerű Darab (Fragment) egy JSP kód darabot kap attribútumként Dinamikus Nincs specifikálva, menet közben derül ki
Fejlett Programozási Technológiák Törzs (Body) Egy elem más elemeket és HTML tartalmat is tartalmazhat You just cleared your shopping cart! jsp:body
Fejlett Programozási Technológiák Elemek közötti kommunikáció Megosztott objektumok segítségével kommunikálnak (oldal környezet) Az egymásba ágyazott elemek a privát változókat is használhatják
Fejlett Programozási Technológiák Példa Tag fájl JSP kódot tartalmaz (WEB-INF/tags, WEB-INF/lib) ${greeting}, ${name}! Használata: Hello
Fejlett Programozási Technológiák 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 present condpkg.IfSimpleTag scriptless... test true...
Fejlett Programozási Technológiák 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()); }
Fejlett Programozási Technológiák Iterátor Tag Departments Departments <tlt:iterator var="departmentName" type="java.lang.String" group="${myorg.departmentNames}"> ${departmentName}
Fejlett Programozási Technológiák 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(); }
Fejlett Programozási Technológiák 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; } %>
Fejlett Programozási Technológiák Cél
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák 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)
Fejlett Programozási Technológiák Hogyan működik
Fejlett Programozási Technológiák Kérés feldolgozási életciklus
Fejlett Programozási Technológiák Tipikus JSF alkalmazás Java Bean-ek Esménykezelők Validátorok JSP oldalak Szerver oldali segéd osztályok Facesconfig.xml
Fejlett Programozási Technológiák Példa Jsf.jsp
Fejlett Programozási Technológiák Navigáció definiálása /greeting.jsp success /response.jsp /response.jsp success /greeting.jsp <h:commandButton id="submit" action="success" value="Submit" />
Fejlett Programozási Technológiák 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."; }
Fejlett Programozási Technológiák Menedzselt Bean A támogató babot regisztrálnunk kell UserNumberBean guessNumber.UserNumberBean session minimum long 0 maximum long 10
Fejlett Programozási Technológiák Fejlesztési lépések 1. Modell objektumok fejlesztése 2. Ezek hozzárendelése menedzselt babként 3. Web oldalak létrehozása UI komponensekkel 4. Navigáció definiálása 5. Web.xml konfigurálása
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák A következő előadás tartalma JNDI Corba RMI