JSP segédlet - MintaZH megoldás

A feladatok megoldásához az Oracle JDeveloper 10g használata, illetve ismerete javasolt!

  1. Hozzunk létre egy új alkalmazást: File > New…

    step_1_1

    Válasszuk az Generic Application lehetőséget, majd a következő ablakban adjuk meg az alkalmazás nevét, illetve a mentési útvonalat! A következő ablakban egyelőre csak egy projektet tudunk hozzáadni, ez legyen most 1_feladat.

    step_1_2
  2. Célszerű most hozzáadni a többi projektet is, itt majd ugyanazt az ablakot látjátok, mint az első két esetben. A másik két projekt neve 2_feladat és 3_feladat legyen!

    step_2_1

    (Ha az Application Navigator-t nem látod, a View > Application Navigator menüpontban be tudod kapcsolni!)

  3. 1_feladat

  4. Az Overview ablakban adjunk hozzá egy JSP oldalt.

    step_3_1
    step_3_2
    step_3_3

    (Itt bárki kénye kedve szerint „bedobálhatja” az elemeket Designerből, de inkább azt javaslom, hogy a Source nézetben dolgozzatok, így nem kell ide-oda kattintgatni!)

    step_3_4
  5. Amit most látunk, az egy statikus HTML oldal, ettől csak egyetlen sor különbözteti meg, mégpedig a !DOCTYPE után levő

    sor. Ez alá másoljuk be a következő sort

    mellyel a Core TagLibrary használatát engedélyezzük az oldalon. Ezután észrevehetjük, hogy a kódszerkesztő bal margóján egy piros felkiáltójel jelenik meg, erre rákattintva az Install JSP Taglibrary után felugró ablakban a JSTL Core 1.2-t választva a JDeveloper automatikusan csatolja az egész alkalmazáshoz a library-t. Immár nekikezdhetünk a tényleges feladatmegoldásnak!

  6. Mivel a JSP-ben nincs IF-ELSE támogatás, a „k” paraméter vizsgálatát a következőképpen kell elvégezni

    A következő EL kifejezés alapján döntjük el, hogy „k”-nak van, vagy nincs értéke, és ennek alapján írjuk meg a <c:choose> igaz illetve hamis ágát:

  7. Az igaz ágban lévő kód logikája a következő: szükségünk lesz „k” értékének megfelelő számú oszlopra és sorra, szükségünk lesz két ciklusra; egyre, melyben megadjuk az oszlopok számát, és mégegyre, melyben a sorok számát. A színezést egyelőre hagyjuk ki!

  8. Térjünk át a színezésre. A két ciklus mindegyikének lefutása alatt van egy értéke, ezek i és j. A feladat: a cellák színe váltokozzon. Erre a legegyszerűbb megoldás, ha nézzük i és j kettővel való osztás utáni maradékának eredményét, ergo, hogy páros, vagy páratlan-e. A következő kifejezés pont erre szolgál:

    Így a kódunk a következőre módosul:
  9. Egyetlen dolog maradt hátra, a <table> tag-nek megadni a border="1" attribútumot, illetve css-ben megadni a cellák magasságát illetve szélességét.

  10. Íme, a teljes fájl:

  11. 2_feladat

  12. Először is, adjunk hozzá a 2_feladat projektünkhöz egy Bean-t. (Ezt a projekt nevén jobb gombbal kattintva tehetjük meg, a New... lehetőséggel. Ezután válasszük a Generic lehetőségből a Java-t, ott pedig a Bean-t. A felugró ablakban állítsuk be a Package: mozi és a Name: jegy értékeket!) Ide fogjuk írni a feladat által megadott szabályokat, restrikciókat. Mivel a feladat része az is, hogyha bármilyen adatot helytelenül töltünk ki, a "Nem megfelelő adatok" üzenet jelenjen meg a kimeneten, a felsoroltakon kívül szükségünk lesz még egy Boolean változóra is. A szükséges változók:

  13. A változók deklarálása után a szükséges propertyk megírása következik, a feladat kiírása alapján. Propertyből kétféle létezik: az egyik az éppen kívánt változó értékét állítja be, míg ennek a "párja", amelyik ezt az értéket visszadja. Akit bővebben érdekel: <http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html>

    Ezek a propertyk az előbb deklarált 'nev' változót érintik. A 'getNev()' visszadja az értékét, a 'setNev()' pedig beállítja az attribútumként megadott értéket. Figyeljük meg, hogy különbözik az objektum típusa! Az első esetben előbb megadjuk, hogy szöveges változót kívánunk visszaadni, míg a második esetben attríbutumként adjuk meg, hogy a várt változó szöveges lesz (természetesen megadhatnánk teljesen eltérő változót is, de most a feladat szempontjából így a legegyszerűbb). A this operátor csupán arra utal, hogy nem az attribútum értékét kívánjuk változtatni - illetve visszaadni -, hanem az osztályban deklarált változóét!

  14. Egészítsük ki most a feladatban megadott feltétellel kódunkat, mégpedig, hogy a név nem lehet üres, ha mégis, akkor pedig írjuk ki a "Nem megfelelő adatokat" a képernyőre. Ehhez szükségünk lesz az error get Property-jére is!

    Ha ezzel megvagyunk, már csak az összes többire kell ugyanezt megtennünk, értelemszerűen a feladatból vett feltételekkel kiegészítve a set propertyket a teljes fájl így fog kinézni:

    Mivel a feladatban az is szerepelt, hogy a fizetendő összegből kedvezményt is tudjunk adni, ezért amikor beállítjuk a jegyszámot, meghívjuk a fizetendő változót set propertyjét, így ha később kedvezményt akarunk adni, majd a jsp fájlunkból megtehetjük, ha azonban nem szeretnénk adni, be sem kell majd állítani ezt, hiszen a jegyszám beírásával ugyanezt az eredményt érjük el.

  15. Kész van a Bean-ünk, mostmár csak használni kell! Adjunk hozzá a projekthez egy jsp fájlt is! Ebben fogjuk beállítani az egyes változókhoz tartozó értéket, illetve itt fogjuk megjeleníteni is azokat. Ahhoz, hogy mindezt megtehessük, a fájlban bárhova - érdemes a <%@ page %> után -, a következő sort illeszük be:

    ez fogja jelezni scriptünknek, hogy melyik bean-t használja, illetve annak milyen nevet adunk (id). Állítsuk be a nev változónak az Anonymous értéket!

    Nem szorul túl nagy magyarázásra, eléggé beszélő a parancs, de: a name változó hivatkozik a useBean parancs id attribútumára, ergo itt mondjuk meg, hogy melyik bean-ben lévő változót szeretnénk beállítani, a property a változó nevére vonatkozik, míg a value annak értékét állítja be. Legyenek most a válatozók a következők:

    Szándékosan nem fogjuk most megadni a fizetendő végösszeget. Annyi maradt hátra, hogy ezeket az értékeket ki is írassuk a kimenetre, ezeket EL segítségél fogjuk megtenni, egy listában:

    Utolsóként az adatok ellenőrzése maradt, tehát meg kell vizsgálnunk az error változó értékét, hogy hamis-e, mert ha nem, hibával dolgozunk, így ki kell írnunk a Nem megfelelő adatok tájékoztatást a böngészőbe!

  16. A teljes fájl:

  17. 3_feladat

  18. A két kapott fájlt másoljuk be a projektbe: az AddCookieTag.java fájlt az src/zh/AddCookieTag.java útvonalra, a sutitad.jsp fájlt pedig a public_html/sutitad.jsp helyre. Ha ezzel megvagyunk megírhatjuk a tagkönyvtárat. Jobb gomb a 3_feladat projekten, New...

    step_tld_1
    step_tld_2
    step_tld_3
    step_tld_4
    step_tld_5

    Ha mindent jól csináltatok, akkor a következő kód fog fogadni titeket:

    Nézzük meg az AddCookieTag.java fájlt. A tagkönyvtáraknak egy kötött struktúrájuk van, csak úgy mint az RSS csatornáknak, vagy az egyes verziókövetési programoknak. Ezért a .tld fájlunkban szereplő XML kód még nem elég, itt fel kell sorolnunk legalább a következőket: a nevet, a class-t és a változókat. Erre egyszerűen csak a következő kódot fogjuk beírni a taglib.tld-be:

    A teljes fájl pedig így néz ki:

  19. Source

  20. A megoldást zipelve innen, illetve a tantárgy oldaláról tölthetitek le