Struts2 keretrendszer

Hasonló dokumentumok
MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

Java servlet technológia 1 / 40

MVC desktop alkalmazás esetén. MVC Model-View-Controller. eredete: Model View Controller (MVC) elv Java EE Java alapú Web alkalmazások

Java servlet technológia. Web alkalmazások. Servlet-et használni érdemes, ha. JSP-t használni érdemes, ha. Servlet-JSP kombináció (MVC) szükséges, ha

Web-fejlesztés NGM_IN002_1

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet

Java Web technológiák

Bevezető. Servlet alapgondolatok

A JSP életciklusa Szkript elemek Dinamikus tartalom létrehozása Kifejezés nyelv Tartalom újrafelhasználása Vezérlés átadása Visszatekintés

JSP életciklusa Szkript elemek, implicit objektumok, bean-ek, EL include, (forward) Visszatekintés MVC

JavaServer Pages (JSP) (folytatás)

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

JAVA webes alkalmazások

JEE tutorial. Zsíros Levente, 2012

JSP technológia. A JSP elemek kétféle szintaxissal használhatók: A JSP

A JSP életciklusa Szkript elemek Dinamikus tartalom létrehozása Kifejezés nyelv Tartalom újrafelhasználása Vezérlés átadása Visszatekintés

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Java Servlet technológia

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Szervlet-JSP együttműködés

Biztonság java web alkalmazásokban

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java szervlet technológia

A Web réteg architektúrája A JSF web alkalmazás keretrendszer. Bakay Árpád dr. NETvisor kft (30)

MVC. Model View Controller

Bevezető MVC tervezési minta Struts folyamatvezérlés. Struts keretrendszer

Java Programozás 11. Ea: MVC modell

Programozási nyelvek Java

A Java Server Pages technológia. JSP és JSP elemkönyvtárak, JSTL alapok

A JavaServer Pages (JSP)

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Osztott rendszerek, Java EE. Általános bevezető

Az Apache Wicket keretrendszer

Programozási nyelvek II.: JAVA

Java technológiák - ANTAL Margit. komponensek. A HTTP protokoll. Webkonténerek és szervletek. Egyszerű HTTP. ANTAL Margit.

Webalkalmazás fejlesztés Java EE környezetben NetBeans segítségével: JavaServer Faces 1.2 AJAX

Model View Controller alapú alkalmazásfejlesztés

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

JAVA PROGRAMOZÁS 2.ELŐADÁS

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Java programozási nyelv 4. rész Osztályok II.

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

OOP #14 (referencia-elv)

C#, OOP. Osztályok tervezése C#-ban

A JavaServer Pages (JSP)

A JavaServer Pages (JSP)

10.óra CodeIgniter Framework #3. Gyimesi Ákos

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Áttekintés. Tartalom. Mi is az a Bean?

Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Web programoz as

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat

JSP (Java Server Pages) technológia

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Bevezetés Működési elv AJAX keretrendszerek AJAX

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Web-fejlesztés NGM_IN002_1

Java és web programozás

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Web-fejlesztés NGM_IN002_1

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Stateless Session Bean

A Java EE 5 plattform

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Kivételkezelés, naplózás. Exception handling, logging

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

OOP: Java 8.Gy: Abstract osztályok, interfészek

Szerver oldali Java programozás /II. 1. óra. Elemkönyvtárak. Elemkönyvtárak használata Saját elemkönyvtár készítése.

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Collections. Összetett adatstruktúrák

Osztályok. 4. gyakorlat

Már megismert fogalmak áttekintése

BME IK 2 JAVA SERVER FACES UML-1 20/11/2013. Apache Struts. Spring MVC. Java Server Faces. Google Web Toolkit. Képességek

Objektumorientált programozás C# nyelven

Utolsó módosítás:

Modellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Java IX. telkezelés a Java-ban

Symfony kurzus 2014/2015 I. félév. Controller, Routing

A TANTÁRGY ADATLAPJA

WWW Kliens-szerver Alapfogalmak Technológiák Terv. Web programozás 1 / 31

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java programozási nyelv 5. rész Osztályok III.

Adatbányászat és Perszonalizáció architektúra

Java IX. telkezelés a Java-ban

Bevezetés J2EE komponensek Java2EE API-k Web alkalmazások Dokumentáció Fejlesztői környezet. JAVA technológiák - bevezető

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Üdvözli Önöket A PGY3 tantárgy! Bakay Árpád dr. NETvisor kft (30) arpad.bakay@netvisor.hu

Átírás:

Áttekintés Struts2 keretrendszer Bevezetés Struts2 keretrendszer Action osztály Interceptor-ok OGNL 1 / 26 2 / 26 Már a megjelenésük kezdetén bebizonyosodott a Servletek hasznos volta. A CGI-vel szemben gyorsabbak voltak, hatékonyabbak, hordozhatók és bővíthetők. A HTML kód beágyazása println() metódusokon keresztül fárasztó volt és problematikus. A választ erre a JSP adta meg, mely a nézet-generálást jelentős módon megkönnyítette. A fejlesztők simán keverhették a HTML kódot Java kóddal, megtartva a Servlet összes előnyét. A java alapú Web-alkalmazások először JSP-központúak lettek, azaz keveset tettek a vezérlés megoldására. Más modellre volt szükség. Rájöttek, hogy a JSP-k és Serveltek együtt jól használhatók a Web-alkalmazásokban: a Serveletek gondoskodnak a vezérlésről a JSP-k pedig a megjelenítésről. Ezt a modellt nevezték el Model2-nek (A JSP-k kizárólagos alkalmazása volt a Model1). Ez a Model2 nagyon hasonĺıt a klasszikus MVC modellhez (Model-View-Controller), és ma már ugyanarra a modellre mindkét nevet használják. A Struts2 keretrendszer megvalósítja az MVC elvet. 3 / 26 4 / 26

Keretrendszerek két véglet: semmiféle rendszer káosz túl merev struktúra nem enged sok szabadságot a programozónak egy jó keretrendszer jellemzője: egy bizonyos struktúra betartására kötelez anélkül, hogy túlzottan korlátozná a programozó lehetőségeit Struts2: a Struts és a WebWork ötvözete http://struts.apache.org/2.x/ Az MVC elvet illetően a Struts2 a vezérlés réteget valósítja meg a megjelenítés réteget saját elemkönyvtárakkal segíti. a modell réteg megvalósítása a Struts2 szempontjából lényegtelen. a Web-es keretrendszerek bizonyos alaposztályok használatára ösztönöznek, elemkönvtárakat kínálnak fel 5 / 26 6 / 26 Struts2 vezérlés: A Struts2 több komponenst biztosít a kontroller réteg megvalósítására: egy kontroller Servletet (konfigurációs állomány alapján bekonfigurált) a fejlesztő által megírt kérés kezelőket (Action osztályok) interceptor-ok (előre definiált vagy a fejlesztő által megírt) Struts2 nézet: A Struts2-s elemkönyvtár közvetlen módon támogatja a nézet réteget (tipikusan JSP). Természetesen más elemkönyvtárakat (pl. JSTL) is használhatunk a Struts2-vel. A JSP-n kívül más nézet-technológiák is használhatók Struts2-vel, (pl. FreeMarker, Velocity, JasperReports, XSLT, stb.). Modell: A modell réteg mindig projekt-specifikus. A modell lehet: az Action osztályokban megvalósított logika (nem ajánlott) külön üzleti logika réteg: üzleti logika osztályok EJB-k (bonyolultabb üzleti logika esetén) 7 / 26 8 / 26

Hogyan működik mindez együtt: Inicializáláskor a kontroller Servlet feldolgozza (parse) a konfigurációs fájlt (struts.xml), Ennek alapján tudni fogja, hogy melyik URL esetén melyik Action osztályhoz irányítson. Még mielőtt meghívódik az Action osztály megfelelő metódusa (tipikusan execute()), meghívódnak az interceptor-veremben lévő interceptor-ok a megfelelő sorrendben Az Action különböző ellenőrzések, illetve az üzleti logika meghívásának eredményeképpen a megfelelő nézethez továbbít. Az Action a hibakezelésre és a vezérlésátadásra koncentrál. Nem implementál üzleti logikát, csak meghívja azt. A felhasználó által bevitt adatok az Action osztály mezőit (ezek lehetnek pl. JavaBean-ek) álĺıtják be. Ellenőrzési hiba esetén a Struts2-nek van egy mechanizmusa a megfelelő hibagenerálásra ill. annak a megmutatására a JSP-ben. web.xml konfigurálása <web-app > <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.filterdispatcher</filterclass> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/ </url-pattern> </filter-mapping> </web-app> 9 / 26 10 / 26 struts.xml struts.xml örökölheti a struts-default.xml-ben előre definiált elemeket: result-típusok interceptorok előre definiált interceptor-vermek definiálhatók: új (nézetre vonatkozó) result-típusok új interceptorok interceptor-vermek action-ok Pl. <?xml version="1.0" encoding="utf-8"?> <struts> <package name="struts" namespace="/" extends="struts-default"> <action name="updatestudent" class="edu.prg.studentaction"> <result name="success" type="redirectaction"> studentlist </result> <result name="input">student.jsp</result> <interceptor-ref name="paramsprepareparamsstack"/> </action> </package> </struts> 11 / 26 12 / 26

Az Action-t implementáló osztály ActionSupport osztály az ActionSupport az alábbi interfészeket implementálja: követelmény: a Struts2 action osztályai a com.opensymphony.xwork2.action interfészt kell implementálják. az alapértelmezés szerint meghívott metódus fejléce: public String execute() throws Exception (bármilyen más nevű, de hasonló fejlécű metódus is használható) Validatable egy validate() metódust bocsát rendelkezésre, mely a meghívódik, ha a workflow interceptor része az interceptor-veremnek ValidationAware hibakezelést szolgáló metódusokat bocsát rendelkezésre (pl. addfielderror(), addactionerror()) TextProvider a nyelvi beálĺıtásnak megfelelő szöveg erőforrásfájlokból való kinyerését segíti elő gettext() metódusokkal LocaleProvider getlocale() metódus a locale lekérdezésére segédosztály: az Action implementálása helyett tipikusan az ActionSupport osztályt bővítjük ki. az action osztály további opcionális interfészeket implementálhat, melyek különböző interceptorokkal működnek együtt. Pl. Preparable a prepare interceptorral működik együtt; SessionAware, RequestAware a servletconfig interceptorral működnek együtt 13 / 26 14 / 26 Modell objektumok A felhasználó által bevitt adatok beálĺıtják az Action osztály mezőit (melyek lehetnek pl. JavaBean-ek): Amennyiben params interceptor része az interceptor-veremnek, meg fognak hívódni az action osztály megfelelő set/get metódusai Pl. tekintsük az alábbi form-ot <s:form> <s:textfield name= user.firstname label= Firstname /> <s:textfield name= user.lastname label= Lastname /> <s:submit value= Submit action= setuser /> </s:form> submit-ra meghívódnak az action osztály alábbi metódusai: getuser().setfirstname( ); getuser().setlastname( ); az action osztály: public class SetUserAction extends ActionSupport{ private UserBean user; public UserBean getuser();{ return user; public void setuser(userbean user);{ this.user=user; automatikus típuskonverzió történik, ahol szükséges 15 / 26 16 / 26

Hozzáférés a szesszióhoz, illetve más Servlet-specifikus adatokhoz hozzáférés a szesszió attribútumokhoz ActionContext osztályon keresztül: Map session = ActionContext.getContext().getSession(); session.put( user, user); kérés objektum lekérése ActionContext ctx= ActionContext.getContext(); HttpServletRequest req = ctx.get(servletactioncontext.http REQUEST); HttpSession session = req.getsession(); ajánlottabb ehelyett a SessionAware illetve ServletRequestAware interfészek kiterjesztése hozzáférés a szesszió attribútumokhoz a SessionAware interfész segítségével: public class SetUserAction extends ActionSupport implements SessionAware { Map session; public void setsession(map session){ this.session=session; public String execute() throws Exception { //uzleti logika meghívás if(hiba){ return INPUT; else session.put( user,user); return SUCCESS; 17 / 26 18 / 26 Interceptorok Az interceptorok a Servlet-nél használt szűrőkhöz (filter) hasonĺıthatóak ugyanaz a logika szerint hívódnak meg elő-/utófeldolgozást végeznek az action osztály meghívása előtt/után tipikus feladatok: pl. adatellenőrzés, paraméterek beálĺıtása, stb. előre definiált interceptorok: logger naplózást végez az action lefutása előtt és után params a kérés paraméterek alapján beálĺıtja az action osztály tulajdonságait (megfeleltetés a név alapján, az értékek a megfelelő típusra lesznek konvertálva) set/get metódushívások conversionerror egy field error üzenetet ad az action osztályhoz minden egyes sikertelen típuskonverzió esetén előre definiált interceptorok (folyt.): servletconfig beálĺıtja az action osztályban a HttpServletRequest, HttpServletResponse, parameter map, session map illetve application map-et, amennyiben az implementálja a ServletRequestAware, ServletResponseAware, ParameterAware, SessionAware, illetve ApplicationAware interfészeket. workflow egy alapértelmezett munkamenetet határoz meg az action-ok számára. Ha az action implementálja a Validatable interfészt, az interceptor meghívja a validate() metódust. Ha implementálja a ValidationAware interfészt, ellenőrzi, hogy az action osztályban be van-e álĺıtva valamilyen hibaüzenet a haserrors() metódus segítségével. Ha van valamilyen hiba, akkor az interceptor az input-ra irányít, anélkül, hogy az action végrehajtódna. prepare meghívja a prepare() metódust az action-re, amennyiben az implementálja a Preparable interfészt. 19 / 26 20 / 26

Előre definiált interceptor vermek interceptorok valamilyen sorozatához nevet rendelhetünk: interceptor-verem a struts-default.xml tartalmaz néhány előre definiált interceptor vermet pl. lásd struts-default.xml: defaultstack (alapértelmezett) basicstack paramsprepareparamsstack lehetőség saját interceptor megírására: kódismétlés kiküszöbölése pl. annak ellenőrzése, hogy be van-e jelentkezve a felhasználó vagy megvannak-e a megfelelő jogai AroundInterceptor osztály kibővítésével állapot nélküli <interceptor-stack name= stackname > <interceptor-ref name= interceptor1 /> <interceptor-ref name= interceptor2 /> </interceptor-stack> 21 / 26 22 / 26 OGNL OGNL Object Graph Navigation Language http://commons.apache.org/ognl/ a Struts2 kényelmes hozzáférést biztosít az action által előkészített adatokhoz ennek alapja egy kifejezés-nyelv (OGNL), melynek segítségével könnyen hivatkozhatunk JavaBean-ek tulajdonságaira, kollekciókra, metódusokra OGNL kifejezések használata: a Struts2 elemkönyvtár elemeiben: %{ ha bizonyos Struts2 tag-ek által bevitt, illetve nyilvános hatókörben tárolt objektumokra hivatkozunk, akkor:%{# (pl. %{#session.user.name ) az OGNL érték-vermében egy konkrét elemre az alábbi szintaxissal hivatkozhatunk: %{[level]. (pl. %{[1].name ) kontextus-al dolgozik a Struts2 esetében ez megegyezik az ActionContext objektummal kontextus gyökér tartalma: általunk létrehozott lokális objektumok, nyilvános hatókörű objektumok, érték-verem (value stack) 23 / 26 24 / 26

JavaBean tulajdonságokhoz való hozzáférés: a JavaBean tulajdonságok alakja: getxxx(), setxxx(), isxxx(), hasxxx() (utóbbi kettő boolean tulajdonságok esetén) az ezekhez való hozzáférés xxx-el történik Struts2 tag-ek-ről bővebben: http://struts.apache.org/2.x/docs/struts-tags.html OGNL-ben haszálhatjuk a Java-ból ismert matematikai operátorokat metódushívás: meghívhatunk bármilyen metódust, nem csak get vagy set metódusokat 25 / 26 26 / 26