A JavaServer Pages (röviden JSP) egy technológia, melynek segítségével a szoftverfejlesztő dinamikusan tud generálni HTML, XML vagy egyéb dokumentumokat HTTP kérésekre reagálva. A JSP tekinthető a servlet réteg feletti absztrakciós szintnek. A JSP oldalból java servlet forráskód generálódik. A JSP 2006 májusa óta a J2EE specifikáció része.

Történet Az első hivatalos JSP specifikációt 1999 júniusában adták ki. A későbbi változatok felülről kompatibilisek ezzel az 1.0 verzióval. Szintén még 1999-ben jelent meg a JSP 1.1 verzió decemberben, amely már lehetőséget adott a custom tag libraries, magyarul elemkönyvtárak használatára. A JSP 1.2 verzió 2001 szeptemberében látott napvilágot. Ezt követte a JSP 2.0 verzió, amelyben már szerepelt a kifejezésnyelv (angolul Expression Language vagy röviden EL) és a JSPX dokumentumok támogatása is. A legfrissebb JSP specifikáció a JSP 2.1.

Szintaxis Egy JSP oldalban a következő nyelvi elemek lehetnek: statikus adat, például HTML kód direktívák szkriptelemek és változók akciók elemkönyvtárakban definiált tag-ek Direktívák A direktívák tekinthetők a JSP konténernek szóló utasításoknak is. Attribútumaik is lehetnek. A direktívák általános alakja a következő: <%@ direktívanév attr_1="érték_1" attr_2="érték_2" ... %> Három féle direktíva használható JSP oldalakban: include, page és a taglib include Az include direktívával be lehet illeszteni egy teljes fájl tartalmát az adott JSP oldalba. Ez hasonlatos a C programozási nyelv #include direktívájához. Statikus tartalmat illeszt be a fordítás előtt. (Dinamikus, futásidejű beillesztés a jsp:include akcióval lehetséges.) A beillesztett fájlok kiterjesztése általában .jspf, ami a JSP Fragment rövidítése: <%@ include file="valami_file.jspf" %>

page A page direktíva hatása a kapott opcióktól függ, melyeket az alábbiakban részletezünk:

import Stringértékű argumentum, a generált szervlet kódban import utasítássá konvertálódik: <%@ page import="java.util.*" %> contentType A tartalom típusát adja meg. Ezt akkor érdemes használni, ha a generált tartalom nem HTML vagy ha az alapértelmezett karaktertáblától különbözőt kívánunk használni: <%@ page contentType="text/html;charset=ISO-8859-2" %> errorPage Azt adja meg, hogy mely oldalra irányítódjon át a felhasználó, ha kivétel történik a HTTP kérés kezelése során: <%@ page errorPage="hibalap.jsp" %> isErrorPage Logikai értéket vehet fel. Akkor igaz az értéke, ha az adott lap hibalap: <%@ page isErrorPage=false %> isThreadSafe Logikai értéket vehet fel. Értéke akkor legyen true, ha az adott oldal szálbiztos, értve ezalatt azt, hogy ki tud szolgálni több kérést párhuzamosan. Ha értéke false, akkor a JSP container sorbaállítja a kéréseket: <%@ page isThreadSafe=true %> info String értékű argumentum, mely az oldal rövid leírását tartalmazhatja. Az így definiált leírást adja vissza a generált Servlet osztály getServletInfo() metódusa: <%@ page info="Ez itt, kéremszépen, fontos servlet információ." %> extends Azt adja meg, hogy a JSP oldalból generált osztály mely osztálynak legyen a leszármazottja. Ritkán használják, hiszen általában megfelel az alapértelmezett öröklődés. <%@ page extends="ValamiOsztaly" %> session logikai értékével azt határozható meg, hogy akar-e a szoftverfejlesztő sessiont használni. Az alapértelmezett érték true. Ha értéke false, akkor nem használható a session implicit objektum. <%@ page session=false %> buffer Megadható a kimeneti puffer minimális mérete. Az alapértelmezett érték 8kb. Értéke lehet none is, ekkor nincs pufferelés, és minden közvetlenül íródik a HTTP válasz PrintWriter objektumára: <%@ page buffer="32kb" %> <%@ page buffer="none" %> autoFlush Logikai érték, mely azt határozza meg, hogy mi történjek, ha a kimeneti puffer megtelik. Ha értéke true, akkor a puffer automatikusan ürítődik. Ha értéke false, akkor kivétel váltódik a puffer megtelése esetén. Alapértelmezett értéke true: <%@ page autoFlush=false %>

taglib A taglib direktívával JSP elemkönyvtárakat lehet használni. Paraméterként meg kell adni egy URI-t, ahol az elemkönyvtár leírófájlja található, valamint egy prefixumot, amivel később hivatkozni lehet az elemkönyvtár elemeire. Például így: <%@ taglib prefix="kedvencprefixumom" uri="taglib/kedvenc.tld" %>

Szkriptelemek Háromféleképpen lehet java forráskódot elhelyezni a JSP oldalban: deklarációk, szkriptrészletek és kifejezések formájában: Deklarációk A deklarációs tag-ben definiált kód teljes egészében bemásolódik a generált java servlet osztály forráskódjába. Például adattagokat lehet vele definiálni: <%! int serverInstanceVariable = 1; %> A deklarációs tag metódust is tartalmazhat, amely szintén a generált szervlet osztályba kerül be: <%! public void increaseServerInstanceVariable() { serverInstanceVariable++;

%>

Szkriptrészletek A szkriptrészlet (angolul scriptlet) tagben megadott kódrészlet a generált servlet osztály _jspService() metódusába másolódik be.

Szintaxisa: <% java forráskód %> Példa: <% int lokalisValtozo = 6 * 7 ; out.println("Hatszor hét az " + lokalisValtozo + "."); %>

Kifejezések A kifejezés tag-ben megadott kifejezés futási időben értékelődik ki és az értéke kerül a webszerver által visszaadott HTML kódba. Az alábbi példa közelítő értékét generálja: <%= Math.sqrt(2) %> Implicit objektumok Léteznek ún. implicit objektumok, melyeket a JSP container láthatóvá tesz a JSP oldalak számára. Ezekre hivatkozhat a szoftverfejlesztő a JSP kódban: out A JSPWriter osztály példánya, a HTTP válasz üzenettörzs részét reprezentálja. page Maga a generált java servlet objektum. pageContext A javax.servlet.jsp.PageContext osztály példánya. Az egész oldalra vonatkozó adatokat tartalmaz. request Egy javax.servlet.http.HttpServletRequest objektum, amely a HTTP kérést reprezentálja. response A HTTP válasz objektum. session A HTTP session objektum, mely felhasználói információk megőrzésére használható. config A servlet konfigurációs adatait tartalmazó ServletConfig objektum. Értéke megegyezik a servlet objektum getServletConfig() metódusának visszatérési értékével. application Alkalmazásadatokat tartalmazó objektum. exception A dobott kivétel objektumot tartalmazza, amennyiben az adott JSP oldal hibalap, azaz isErrorPage="true". Megjegyzések A megjegyzés tag-ek formátuma az alábbi: <%-- Megjegyzés szövege --%>

Akciók A JSP tartalmaz standard akciókat is, de a JSP 1.1 verziója óta lehetséges a saját akciók definiálása is saját elemkönyvtárak (angolul custom tag libraries) használatával. Az alábbi lista mutatja a JSP standard akcióit: jsp:include Hasonlatos a szubrutinhíváshoz. Hatására a servlet átadja a HTTP kérés kezelését egy másik oldalnak. Ha a megadott oldal válaszolt, akkor visszakerül a vezérlés a hívó oldalhoz. Ezzel az akcióval az egyszer megírt kód újrahasználható, s így nem kell azt duplikálni. Az a különbség az include direktíva és a jsp:include akció között, hogy míg a direktíva statikusan illeszti be egy másik oldal tartalmát fordítás előtt, addig a jsp:include akció dinamikusan, a HTTP kérés kezelésekor fut le és így dinamikusan generált tartalmat is be tud illeszteni. jsp:param A jsp:include, jsp:forward vagy jsp:params blokkok belsejében használható. A megadott paraméter hozzáadódik a kérés paraméterlistájába jsp:forward Segítségével a HTTP kérés továbbadódik egy másik URL-re. Ellentétben a jsp:include akcióval, itt a hívó oldalhoz soha nem kerül vissza a vezérlés. jsp:plugin A Netscape Navigator és az Internet Explorer korábbi verziói különböző html tag-eket használtak a java appletek beillesztésére. Ez az akció legenerálja a megfelelő böngészőspecifikus tag-et. jsp:fallback A megjelenítendő tartalom abban az esetben, ha a böngésző nem támogatja az appleteket. jsp:getProperty Lekérdez egy tulajdonságot a megadott JavaBean-től. jsp:setProperty Beállítja a megadott JavaBean egy tulajdonságát. jsp:useBean Létrehoz illetve újrafelhasznál egy JavaBeant.

Elemkönyvtárak A JSP 1.1 és az azt követő verziókban lehetséges a saját elemkönyvtárak használata. A fejlesztőnek meg kell írnia egy java osztályban az akció kódját, továbbá kell készítenie egy elemkönyvtárleíró XML fájlt, angolul tag library desciptor-t. Az ilyen fájlok kiterjesztése jellemzően .tld. Az alábbi példában feltesszük, hogy létezik egy krumpli.tld elemkönyvtárleíró fájl és a hozzá tartozó implementáció. A JSP oldalban először hivatkozni kell a leírófájlra és meg kell adni a használni kívánt prefixumot a taglib direktíva segítségével, majd használhatóak az akciók: <%@ taglib uri="krumpli.tld" prefix="trallala" %> ... <trallala:izgalmasakcio> <%-- a nyitó tag %> ... </trallala:izgalmasakcio> <%-- a záró tag %> ...

További információk JSR 245 (JSP 2.1) JSR 152 (JSP 2.0) JSR 53 (JSP 1.2) Ingyenes JSP oktató és gyakorló anyagok angolul Gyors JSP bevezető angol nyelven Angol nyelvű JSP bevezető

Kategória:Webfejlesztés Kategória:Java API-k