Fejlett Programozsi Technikk 2 1510 1 Fejlett Programozsi

  • Slides: 40
Download presentation
Fejlett Programozási Technikák 2. 15/10 1

Fejlett Programozási Technikák 2. 15/10 1

Fejlett Programozási Technológiák 2. Az előző előadás tartalma n Java Servlet ¨ Servlet Interfész

Fejlett Programozási Technológiák 2. Az előző előadás tartalma n Java Servlet ¨ Servlet Interfész ¨ Servlet Context ¨ Request ¨ Response ¨ Filter ¨ Session ¨ Web Application 2

Fejlett Programozási Technológiák 2. Irodalom http: //www. apl. jhu. edu/~hall/java/Servlet. Tutorial/ n http: //java.

Fejlett Programozási Technológiák 2. Irodalom http: //www. apl. jhu. edu/~hall/java/Servlet. Tutorial/ n http: //java. sun. com/j 2 ee/1. 4/docs/tutorial/doc/J 2 EETutorial. pdf n Hans Bergsten: Java Server Pages n http: //web. princeton. edu/sites/isapps/jasig/200 4 summer. Westminster/Presentations/java%20 s erver%20 faces. pdf n 3

Fejlett Programozási Technológiák 2. A mai előadás tartalma n n n Probléma a Java

Fejlett Programozási Technológiák 2. A mai előadás tartalma n n n Probléma a Java Servlettel Template eszközök Java Server Pages ¨ ¨ ¨ ¨ n Á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 4

Fejlett Programozási Technológiák 2. Probléma a Java Servlet-tel n n n MVC ? Println(”<HTML></HTML>”)

Fejlett Programozási Technológiák 2. Probléma a Java Servlet-tel n n n 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ő n n 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 5

Fejlett Programozási Technológiák 2. Megoldások n Template engine-k használata ¨ Magasabb szintű funkciók ¨

Fejlett Programozási Technológiák 2. Megoldások n Template engine-k használata ¨ Magasabb szintű funkciók ¨ Bővíthető építőelem készlet n Népszerűbb template motorok-k: ¨ JSP ¨ Velocity ¨ Free. Marker ¨… n Ezekre épülő keretrendszerek: ¨ Java Server Faces ¨ Struts ¨ Turbine 6

Fejlett Programozási Technológiák 2. JSP 1. 0 <html> <head><title>Hello</title></head> <body> <h 1> <% if

Fejlett Programozási Technológiák 2. JSP 1. 0 <html> <head><title>Hello</title></head> <body> <h 1> <% if (request. get. Parameter("name") == null) { out. println("Hello World"); } else { out. println("Hello, " + request. get. Parameter("name")); } %> </h 1> </body></html> 7

Fejlett Programozási Technológiák 2. Velocity <html> <head><title>Hello</title></head> <body> <h 1> #if ($request. get. Parameter("name")

Fejlett Programozási Technológiák 2. Velocity <html> <head><title>Hello</title></head> <body> <h 1> #if ($request. get. Parameter("name") == null) Hello World #else Hello, $request. get. Parameter("name") #end </h 1> </body> </html> 8

Fejlett Programozási Technológiák 2. A JSP áttekintése Bármilyen XML oldalon lehet n XML szintakszis

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

Fejlett Programozási Technológiák 2. Elemei n n Oldal direktíva ¨ <%@ page content. Type="text/html;

Fejlett Programozási Technológiák 2. Elemei n n Oldal direktíva ¨ <%@ page content. Type="text/html; charset=UTF-8" %> Akció elem direktíva ¨ <%@ taglib uri=http: //java. sun. com/jsp/jstl/core prefix="c" %> Akció elemek ¨ <jsp: use. Bean id="locales" scope="application„ class="mypkg. My. Locales"/> JSP elemek (Expression Language) ¨ n <c: set var="selected. Flag” value="${!empty selected. Locale. String}" /> Szkript elemek ¨ <%java kód%> 10

Fejlett Programozási Technológiák 2. Példa n Minta fájl 11

Fejlett Programozási Technológiák 2. Példa n Minta fájl 11

Fejlett Programozási Technológiák 2. A JSP oldal életciklusa Konvertálás Servletté n Fordítás n Futtatás

Fejlett Programozási Technológiák 2. A JSP oldal életciklusa Konvertálás Servletté n Fordítás n Futtatás n Bufferelés n 12

Fejlett Programozási Technológiák 2. Objektumok n Implicit ¨ A tároló hozza ¨ Request, …

Fejlett Programozási Technológiák 2. Objektumok n Implicit ¨ A tároló hozza ¨ Request, … n Alkalmazás specifikus ¨ Tipikusan n Java Bean-ben tárolódnak Megosztott objektumok ¨ Szálak n létre őket között (I/N) Kötődhetnek: ¨ Laphoz – page. Context ¨ Alkalmazáshoz - servlet. Context ¨ Viszonyhoz – session ¨ Kéréshez – request ¨ Válaszhoz – response 13

Fejlett Programozási Technológiák 2. Java Bean-nek használata <jsp: use. Bean id=" book. DB” scope="application”

Fejlett Programozási Technológiák 2. Java Bean-nek használata <jsp: use. Bean id=" book. DB” scope="application” class="mypkg. book. DB "/> n <c: set var="bid" value="${param. book. Id}"/> n <jsp: set. Property name="book. DB" property="book. Id” value="${bid}" /> n <jsp: set. Property name="book. DB" property=”*”/> n ${book. DB. book. Details. title} n <jsp: get. Property name="bean. Name" property="prop. Name"/> n 14

Fejlett Programozási Technológiák 2. Java Server Pages Standard Tag Library n n Standard, gyakran

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

Fejlett Programozási Technológiák 2. Példák n Core <c: set var="foo" scope="session" value=". . .

Fejlett Programozási Technológiák 2. Példák n Core <c: set var="foo" scope="session" value=". . . "/> <c: for. Each var="item" items="${session. Scope. cart. items}">. . . <tr> <td align="right" bgcolor="#ffffff"> ${item. quantity} </td>. . . </c: for. Each> n URL <acme: transform> <jsp: include page="/exec/employees. List"/> <acme: transform/> <c: import url="/books. xml" var="xml" /> <x: parse doc="${xml}" var="booklist" scope="application" /> n SQL <c: set var="bid" value="${param. Add}"/> <sql: query var="books" > select * from PUBLIC. books where id = ? <sql: param value="${bid}" /> </sql: query> 16

Fejlett Programozási Technológiák 2. Saját Elem Könyvtár n n n Újrahasznosítható komponensek Felhasználó által

Fejlett Programozási Technológiák 2. Saját Elem Könyvtár n n n Ú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: ¨ ¨ ¨ n Két típus: ¨ ¨ n Paraméterek átadása Értékek visszaadása Minden objektumot elér a JSP oldalon Kommunikálhatnak egymással Egymásba ágyazhatóak Egyszerű (Nem lehet benne szkript elem) Klasszikus Tag fájl JSP vagy Java kód, a tároló fordítja le 17

Fejlett Programozási Technológiák 2. Attribútumok n Elem attribútumok: ¨ Egyszerű n n ¨ <pelda:

Fejlett Programozási Technológiák 2. Attribútumok n Elem attribútumok: ¨ Egyszerű n n ¨ <pelda: p attr = ”érték”/> <pelda: p attr = ”${object. Value}”/> Darab (Fragment) egy JSP kód darabot kap attribútumként <sc: catalog book. DB ="${book. DB}" color="#cccccc"> <jsp: attribute name="normal. Price"> <fmt: format. Number value="${price}" type="currency"/> </jsp: attribute> <jsp: attribute name="on. Sale"> <strike><fmt: format. Number value="${price}” type="currency"/></strike><br/> <font color="red"><fmt: format. Number value="${sale. Price}” type="currency"/></font> </jsp: attribute> </sc: catalog> ¨ Dinamikus n Nincs specifikálva, menet közben derül ki 18

Fejlett Programozási Technológiák 2. Törzs (Body) n Egy elem más elemeket és HTML tartalmat

Fejlett Programozási Technológiák 2. Törzs (Body) n Egy elem más elemeket és HTML tartalmat is tartalmazhat <c: if test="${param. Clear}"> <font color="#ff 0000" size="+2"><strong> You just cleared your shopping cart! </strong>   </font> </c: if> n jsp: body 19

Fejlett Programozási Technológiák 2. Elemek közötti kommunikáció n Megosztott objektumok segítségével kommunikálnak (oldal környezet)

Fejlett Programozási Technológiák 2. Elemek közötti kommunikáció n Megosztott objektumok segítségével kommunikálnak (oldal környezet) <c: set var="a. Variable" value="a. Value" /> <tt: another. Tag attr 1="${a. Variable}" /> n Az egymásba ágyazott elemek a privát változókat is használhatják 20

Fejlett Programozási Technológiák 2. Példa n Tag fájl ¨ n JSP kódot tartalmaz (WEB-INF/tags,

Fejlett Programozási Technológiák 2. Példa n Tag fájl ¨ n JSP kódot tartalmaz (WEB-INF/tags, WEB-INF/lib) <%@ attribute name="greeting" required="true" %> <%@ attribute name="name" required="true" %> <h 2><font color="black">${greeting}, ${name}!</font></h 2> 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}"/> 21

Fejlett Programozási Technológiák 2. Tag Library Descriptor n n Amennyiben Java-ban írjuk meg az

Fejlett Programozási Technológiák 2. Tag Library Descriptor n n 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. If. Simple. Tag</tag-class> <body-content>scriptless</body-content>. . . <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute>. . . </tag> 22

Fejlett Programozási Technológiák 2. Java Tag n Simple. Tag, interfészt kell megvalósítani ¨ ¨

Fejlett Programozási Technológiák 2. Java Tag n Simple. Tag, interfészt kell megvalósítani ¨ ¨ n do. Tag get/set javax. servlet. jsp. Jsp. Context get. Jsp. Body() … public Hello. World. Simple. Tag extends Simple. Tag. Support { ¨ ¨ public void do. Tag() throws Jsp. Exception, IOException { get. Jsp. Context(). get. Out(). write("Hello, world. "); } } public class Simple. Writer extends Simple. Tag. Support { public void do. Tag() throws Jsp. Exception, IOException { String. Writer sw = new String. Writer(); jsp. Body. invoke(sw); jsp. Context(). get. Out(). println(sw. to. String(). to. Upper. Case()); } } 23

Fejlett Programozási Technológiák 2. Iterátor Tag <%@ taglib uri="/tlt" prefix="tlt" %> <html> <head> <title>Departments</title>

Fejlett Programozási Technológiák 2. Iterátor Tag <%@ taglib uri="/tlt" prefix="tlt" %> <html> <head> <title>Departments</title> </head> <body bgcolor="white"> <jsp: use. Bean id="myorg" class="myorg. Organization"/> <table border=2 cellspacing=3 cellpadding=3> <tr> <td><b>Departments</b></td> </tr> <tlt: iterator var="department. Name" type="java. lang. String" group="${myorg. department. Names}"> <tr> <td><a href="list. jsp? dept. Name=${department. Name}"> ${department. Name}</a></td> </tr> </tlt: iterator> </table> </body> </html> 24

Fejlett Programozási Technológiák 2. Iterátor Tag public void do. Tag() throws Jsp. Exception, IOException

Fejlett Programozási Technológiák 2. Iterátor Tag public void do. Tag() throws Jsp. Exception, IOException { if (iterator == null) return; while (iterator. has. Next()) { get. Jsp. Context(). set. Attribute(var, iterator. next()); get. Jsp. Body(). invoke(null); } } public void set. Var(String var) { this. var = var; } public void set. Group(Collection group) { this. group = group; if(group. size() > 0) iterator = group. iterator(); } 25

Fejlett Programozási Technológiák 2. Szkriptek használata n n n JSP oldalakon Java kódot is

Fejlett Programozási Technológiák 2. Szkriptek használata n n n 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 Book. DBAO book. DBAO; public void jsp. Init() { book. DBAO = (Book. DBAO)get. Servlet. Context(). get. Attribute("book. DB"); if (book. DBAO == null) System. out. println("Couldn’t get database. "); } %> <%! public void jsp. Destroy() { book. DBAO = null; } %> 26

Fejlett Programozási Technológiák 2. Cél 27

Fejlett Programozási Technológiák 2. Cél 27

Fejlett Programozási Technológiák 2. Java Server Faces Szerver oldali web komponens felhasználói felületek létrehozására

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

Fejlett Programozási Technológiák 2. JSF n Elemei: ¨ API az UI komponensek reprezentálására és

Fejlett Programozási Technológiák 2. JSF n 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 n 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 29

Fejlett Programozási Technológiák 2. Komponens modell n n UIComponent-ek (UIComponent. Base) melyek leírják az

Fejlett Programozási Technológiák 2. Komponens modell n n UIComponent-ek (UIComponent. Base) 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, n Dekódolás Esemény kezelő (Java. Bean tervezési mintát követi) ¨ Action. Event ¨ Value. Changed. Event n n Konverziós modell Validációs modell (egy vagy több üzenetet gyártanak) <h: input. Text id="user. No” value="#{User. Number. Bean. user. Number}” validator_length minimum=” 6” maximum='10” /> 30

Fejlett Programozási Technológiák 2. Hogyan működik 31

Fejlett Programozási Technológiák 2. Hogyan működik 31

Fejlett Programozási Technológiák 2. Kérés feldolgozási életciklus 32

Fejlett Programozási Technológiák 2. Kérés feldolgozási életciklus 32

Fejlett Programozási Technológiák 2. Tipikus JSF alkalmazás Java Bean-ek n Esménykezelők n Validátorok n

Fejlett Programozási Technológiák 2. Tipikus JSF alkalmazás Java Bean-ek n Esménykezelők n Validátorok n JSP oldalak n Szerver oldali segéd osztályok n Facesconfig. xml n 33

Fejlett Programozási Technológiák 2. Példa n Jsf. jsp 34

Fejlett Programozási Technológiák 2. Példa n Jsf. jsp 34

Fejlett Programozási Technológiák 2. 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>

Fejlett Programozási Technológiák 2. 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> <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: command. Button id="submit" action="success" value="Submit" /> 35

Fejlett Programozási Technológiák 2. Támogató Bean n Feladata az oldalon lévő elemek adatainak tárolása

Fejlett Programozási Technológiák 2. Támogató Bean n Feladata az oldalon lévő elemek adatainak tárolása és az eseménykezelők, validálók, … megvalósítása Integer user. Number = null; . . . public void set. User. Number(Integer user_number) { user. Number = user_number; } public Integer get. User. Number() { return user. Number; } public String get. Response() { if(user. Number != null && user. Number. compare. To(random. Int) == 0) { return "Yay! You got it!"; } else { return "Sorry, "+user. Number+" is incorrect. "; } } 36

Fejlett Programozási Technológiák 2. Menedzselt Bean A támogató babot regisztrálnunk kell <managed-bean> <managed-bean-name>User. Number.

Fejlett Programozási Technológiák 2. Menedzselt Bean A támogató babot regisztrálnunk kell <managed-bean> <managed-bean-name>User. Number. Bean</managed-bean-name> <managed-bean-class> guess. Number. User. Number. Bean </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> <property-name>maximum</property-name> <property-class>long</property-class> <value>10</value> </managed-property> </managed-bean> n 37

Fejlett Programozási Technológiák 2. Fejlesztési lépések 1. 2. 3. 4. 5. Modell objektumok fejlesztése

Fejlett Programozási Technológiák 2. Fejlesztési lépések 1. 2. 3. 4. 5. 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 38

Fejlett Programozási Technológiák 2. A mai előadás tartalma n n n Probléma a Java

Fejlett Programozási Technológiák 2. A mai előadás tartalma n n n Probléma a Java Serlettel Template eszközök Java Server Pages ¨ ¨ ¨ ¨ n Á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 39

Fejlett Programozási Technológiák 2. A következő előadás tartalma JNDI n Corba n RMI n

Fejlett Programozási Technológiák 2. A következő előadás tartalma JNDI n Corba n RMI n 40