JavaServer Pages
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ĂŠkefalse
, akkor nem hasznĂĄlhatĂł asession
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ĂĄlaszPrintWriter
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ĂŠkefalse
, akkor kivĂŠtel vĂĄltĂłdik a puffer megtelĂŠse esetĂŠn. AlapĂŠrtelmezett ĂŠrtĂŠketrue
: <%@ 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 objektumgetServletConfig()
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 ArchivĂĄlva 2007. januĂĄr 19-i dĂĄtummal a Wayback Machine-ben
- Gyors JSP bevezetĹ angol nyelven
- Angol nyelvĹą JSP bevezetĹ