A JavaServer Pages (JSP) Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 03. 27. JSP
Harmadik generáci ciós s WEB szerver A dinamikus lap a tipikus Dinamikus HTML, újabban XML Microsoft Active Server Pages (ASP) Nem szabványos megoldás: Visual Basic nyelv csak Windows-os környezetben működik rendesen az OLE, ActiveX és Windows lehetőségeinek teljes kihasználása JSP JSP / 2
Harmadik generáci ciós s WEB szerver (folyt.) Microsoft: a.net koncepció új nyelv bevezetése (C#) plattformhoz kötött JavaServer Pages (JSP) Olyan WEB-es fejlesztő és futtató környezet, ami tudja mindazt, amit az ASP, de platform és szállító független JSP JSP / 3
A JavaServer Pages Lehetővé teszi dinamikus weboldalak készítését Java alapú, tehát ez is platform független Felhasználói felület és tartalom elkülönül egymástól Új kiterjesztés:.jsp Működéséhez egy container szükséges Ez szabványos felületen igényelhető szolgáltatásokat nyújt A container általában egy Web szerver része JSP JSP / 4
A JSP technológia főbb vonásai Nyelv: JSP oldalak fejlesztésének eszköze Szöveg alapú dokumentumok, melyek leírják hogyan dolgozza fel a kérelmeket és milyen választ (válaszokat) hozzon ehhez létre. Szerkezetek Segítségükkel elérhetőek a kiszolgáló oldali objektumok is (ez által az összes Java eszköz és technológia, korlátok nélkül. pl. adatbázis kapcsolatok, xml feldolgozás stb.) JSP JSP / 5
A JSP technológia főbb vonásai (folyt.) Mechanizmusok A JSP nyelv bővíthető A JSP technológia tartalmazza a web containerek fejlesztéséhez szükséges API-t is. JSP JSP / 6
Egy JSP lap szöveges részei Statikus rész (HTML) A már jól megszokott HTML tag-ek használhatók Nem kell a statikus részt elkülöníteni a dinamikustól Dinamikus rész (JSP elemek) Jellemzően <% %> között szerepelnek a JSP direktívák <% %> között tetszőleges (érvényes )Java kód megadható JSP JSP / 7
Mi is a JSP? A JSP nem futtatható kód A JSP egy servlet definíciójának tekinthető, a JSPból egy servlet készül, amit le lehet fordítani. A JSP - servlet konverzió automatikus JSP JSP / 8
Egy JSP oldal életciklusa I. Mivel a JSP oldalból egy servlet készül, ezért az életciklust a Java Servlet technológia határozza meg Kérés (request) menete A container összehasonlítja a JSP oldal életkorát az őt megvalósító servlet-ével. A JSP újabb: a JSP oldalt servlet-té alakítja, majd lefordítja A JSP régebbi: továbbítja a kérést a servlet-nek JSP JSP / 9
Egy JSP oldal életciklusa I. (folyt.) Nagy előny: A fenti mechanizmus automatikus. A fejlesztéshez elegendő egy text fájlt szerkeszteni, kézzel nem kell fordítani. Nem kell figyelni arra, hogy változott-e a JSP. JSP JSP / 10
JSP oldal életciklusa II. (A fordítás után) Ha a JSP oldalhoz tartozó servlet már létezik, akkor a container: betölti a JSP oldal szervlet osztályát példányosítja a szervlet osztályt inicializálja a szervlet tartalmát, meghívja a jspinit metódust. A container meghívja a _jspservice metódust, átadja neki a kérés (request) és a válasz (response) objektumot JSP JSP / 11
JSP oldal életciklusa II. (folyt.) Ha a containernek meg kell szüntetnie a JSP oldalhoz tartozó szervletet, akkor meghívja a jspdestroy metódust. JSP JSP / 12
JSP oldal inicializáci ciója és befejezése A jspinit felüldefiniálásával beállíthatjuk az inicializációt. A jspdestroy metódussal tudjuk a lefoglalt eroforrásokat felszabadítani. Ezekben a JSP deklarációt kell alkalmaznunk! JSP JSP / 13
Statikus tartalom készítésese Statikus tartalmat bármely leíró nyelvben írhatunk, ilyenek a HTML, WML és az XML Az alap formátum a HTML Ha mást akarunk használni, akkor az oldal direktíváknál kell megadni. Pl. WML-t akarunk használni, akkor ezt a direktívát kell beszúrni: <%@page contenttype= text/vnd.wap.wml %> JSP JSP / 14
Dinamikus tartalom készítésese I. Objektumok használata JSP oldalakon Számtalan objektum, Enterprise Bean és JavaBean komponens használható a JSP oldalon. A JSP technológia automatikusan elérhetővé tesz néhány objektumot Hozzáférhetünk alkalmazás specifikus (saját) objektumokhoz Hozzáférhetünk alaposztályok objektumaihoz JSP JSP / 15
Dinamikus tartalom készítésese II. Implicit objektumok Ezeket az objektumokat a Web container szolgáltatja. Számos kérelemmel, oldallal és alkalmazással kapcsolatban tartalmaznak információt. Néhány implicit objektum: application javax.servlet.servletcontext Config javax.servlet.servletconfig PageContext javax.servlet.jsp.pagecontext session javax.servlet.http.httpsession response javax.servlet.servletresponse JSP JSP / 16 JSP
Javaslat Dinamikus tartalom készítésese III. Alkalmazás specifikus objektumok Ha lehetséges, akkor az oldal viselkedését próbáljuk meg teljesen objektumokkal leírni. Így a laptervezőknek a kivitelezésre kell csak ügyelniük. JSP JSP / 17
Dinamikus tartalom készítésese III. Alkalmazás specifikus objektumok (folyt.) Négyféleképpen hozhatunk létre és használhatunk objektumokat JSP oldalon: A JSP oldal servlet-ének tartalom és osztály változói, melyeket deklarációban hozunk létre és szkriptekben ill. kifejezésekben hivatkozunk rájuk. A JSP oldal servlet-ének helyi változói, melyeket szkriptekben és kifejezésekben használunk ill. hozunk létre. Látható objektumok attribútumai (scope objects) JavaBeans komponensek JSP JSP / 18
Dinamikus tartalom készítésese IV. Osztott (shared) objektumok A JSP biztosít lehetőséget osztott objektumok kezelésére alap gond: szinkronizáció, lockolás... A WEB-container felé jelezni kell, hogy hogyan is kezelje az osztott használatot: <%@ page isthreadsafe="true false" %> Default: true JSP JSP / 19
Dinamikus tartalom készítésese IV. Osztott (shared) objektumok (folyt.) Ha isthreadsafe="true", akkor a container "synchronized" hozzáférést biztosít az osztott objektumokhoz oldal szinten (page level) Ha isthreadsafe="false", akkor a container csak egyszeres (one at a time) hozzáférést biztosít az objektumhoz JSP JSP / 20
Használható: JSP script elemek I. Objektumok létrehozására Vezérlési elemek beiktaására Az olvashatóságot rontja Minden olyan Java elem használható, amit a container képes értelmezni Már volt: <% %>... JSP JSP / 21
JSP script elemek II. Page direktíva I. Oldal direktíva, az oldalra vonatkozó beállításokat tartalmazza Formája: <%@page... %>... lehet: JSP JSP / 22
JSP script elemek III. page direktíva II. <%@ page [language="java"] [extends="package.class"] [import="{package.class package.*},..."] [session="true false"] [buffer="none 8kb size_kb"] [autoflush="true false"] [isthreadsafe="true false"] [info="text"] [errorpage="relative_url"] [iserrorpage="true false"] [contenttype="{mimetype [; charset=characterset] text/html; charset=iso-8859-1}"] [pageencoding="{characterset ISO-8859-1}"] %> JSP JSP / 23
JSP script elemek IV. További elemek I. Comment: (Dokumentálja a JSP file-t, de a válaszba nem épül be) <%-- comment --%> Deklaráció: (Deklarálja az oldalon érvényesen használható változókat vagy metódusokat) <%! deklaráció; [deklaráció;]+... %> Kifejezés: (Tartalmazza az oldalon használható szkript nyelv kifejezéseit) <%= kifejezés %> JSP JSP / 24
JSP script elemek V. További elemek II. Script: (Egy kódrészletet tartalmaz, mely érvényes az adott oldal nyelvezetében) <% kód részlet %> Include direktívák: (Beépíti a file-t, és elemzi a file JSP elemeit) <%@ include file="relativ URL" %> JSP JSP / 25
JSP script elemek VI. Egyszerű példa <%@page contenttype="text/html;charset=utf-8" %> <%@page import="java.util.hashtable" %> <html> <head> <title>pelda</title> </head> <%-- Deklaracio --%> <%! String[] myarray = {"Miau", "Chickenf", "Rabbit"}; %> <% // Szinten deklaracio! Hashtable stat = new Hashtable(); %> stat.put("miau", new Integer(10)); stat.put("ramrod", new Integer(4)); //! stat.put("rabbit", new Integer(6)); stat.put("chickenf", new Integer(2)); JSP JSP / 26
JSP script elemek VII. Egyszerű példa folyt. <body> <table border="1"cellspacing="0" cellpadding="0" width="100%"> <tr><td align="center"><b>name</b></td> <td align="center"><b>count</b></td></tr> <% for (int i = 0; i < myarray.length; i++) { %> <tr><td align="center"><%=myarray[i]%></td> <td align="center"><%=stat.get(myarray[i]) %></td> </tr> <% } // for %> </table> </body> JSP JSP / 27
JSP script elemek VIII. Taglib direktívák I. Definiálja a tag könyvtárakat, és a JSP oldalon előtagokat az egyedi tagokhoz Formája: <tagprefix:name> Így érhetjük el az egyedi tag-ek funkcióit: <tagprefix:name attribute="ertek"+... /> <tagprefix:name attribute="ertek"+... > más tag-ok és adatok </tagprefix:name> JSP JSP / 28
JSP script elemek IX. Taglib direktívák II. Taglib direktívák (teljesség igénye nélkül): <jsp:forward> (Továbbítja a kérelmet a web-es erőforráshoz) <jsp:getproperty> (Beszúrja a bean tulajdonság értékét az eredménybe) <jsp:setproperty> (Beállítja a Bean property értékét, értékeit) <jsp:include> (Beépít egy statikus file-t vagy egy másik web-es komponens eredményét) <jsp:plugin> (Egy applet vagy egy Bean végrehajtását eredményezi) JSP JSP / 29
Linkek http://java.sun.com/products/jsp/ http://jakarta.apache.org/ http://www.jettyserver.org/jetty/index.html http://java.sun.com /webservices/docs/1.2/tutorial/doc/index.html JSP JSP / 30
JSP JSP / 31