Java szerver oldalak

JSP
Kiterjesztés .jsp
MIME típusú alkalmazás/jsp
Fejlesztő Eclipse Alapítvány
Legutolsó kiadás 3.1.0 (2022. május 15. ) ( 2022-05-15 )
Formátum típusa fájlformátum , sablonmotor és műszaki specifikáció
Szabvány(ok) JSR 245
Weboldal project.eclipse.org/… ​(  angol)
 Médiafájlok a Wikimedia Commons oldalon

A JSP ( JavaServer Pages ) egy olyan technológia, amely lehetővé teszi a webfejlesztők számára, hogy statikus és dinamikus összetevőket is tartalmazó tartalmat hozzanak létre. A JSP-oldal kétféle szöveget tartalmaz: statikus forrásadatokat, amelyek a HTML , SVG , WML vagy XML szövegformátumok egyikében lehetnek , valamint JSP elemeket, amelyek dinamikus tartalmat hoznak létre. Ezenkívül a JSP címkekönyvtárak, valamint az Expression Language (EL) használható Java kód beágyazására a JSP-oldalak statikus tartalmába.

A JSP oldalkódot a Jasper JSP oldalfordítója Java szervlet kódra fordítja , majd Java Virtual Machine ( JVM ) bájtkódba fordítja . A JSP-oldalak végrehajtására képes szervlet -tárolók platformfüggetlen Java nyelven vannak megírva. A JSP-k a kiszolgálóra töltődnek be, és egy speciális Java-kiszolgáló csomagstruktúrából, a Jakarta EE Web Application-ból kezelhetők. Az oldalak általában .war és .ear fájlarchívumba vannak csomagolva .

A JSP technológia egy platformfüggetlen, hordozható és könnyen bővíthető technológia webes alkalmazások fejlesztéséhez .

Verziók

Az 1.2-es verzió óta a JavaServer Pages fejlesztése a Java Community Process keretében zajlik . A JSR 53 a JSP 1.2 és a Servlet 2.3 szabványt, míg a JSR 152 a JSP 2.0 specifikációt határozza meg. 2006 májusában a 2.1 JSP specifikáció JSR 245 alatt jelent meg a Java EE 5 részeként . 2009. december 10-én megjelent a JSP 2.2 specifikáció a JSR 245 kiadás tartalmaként .

JSP 1.0 és JSP 1.1

Ezek a verziók alapvetően különböznek az előző verzióktól, amelyeket a Java válaszaként fogtak fel az ASP -re . A korábbi verziók néhány alapvető funkciója (például a címkekönyvtárak fejlesztésének lehetősége) a kód és a tartalom szétválasztásának elvével összhangban eltávolítva vagy lecserélésre került. Mivel nagy mennyiségű forráskódban nehéz eligazodni és elválasztani a tartalmat magától a kódtól , felmerült az ötlet, hogy ezeket JSP címkékkel, például <jsp:useBean/>. Az ötlet megvalósítása érdekében a JSP-címkéket három logikai csoportra osztották: direktívákra, szkriptelemekre és műveletekre.

JSP 1.2

A JSP 1.2 a következőképpen bővíti ki a JavaServer Pages 1.1 (JSP 1.1) specifikációját:

JSP 2.0

A JSP specifikáció új verziója a következő funkciókkal egészíti ki:

Hello , $ { param . látogató } <%-- hasonló ehhez : Hello , <%= kérés . getParameter ( "látogató" ) %> --%>

JSP 2.1

A Java EE 5 platform az egyszerű fejlesztésre összpontosít a J2SE 5.0 által bevezetett Java nyelvi megjegyzések használatával . A JSP 2.1 támogatja ezt a célt azáltal, hogy függőségi injektálási megjegyzéseket határoz meg a JSP-utasításokon és a kontextusfigyelőkön.

Áttekintés

A JavaServer Pages (JSP) lehetővé teszi az oldalak dinamikus részének elkülönítését a statikus HTML -től . A dinamikus rész speciális címkékbe van zárva "<% %>":

Az Ön gazdagépneve : <% = request . getRemoteHost () %>

A JSP-oldalak kiterjesztéssel rendelkeznek, .jspés ugyanazon a helyen helyezkednek el, mint a normál weboldalak. Az ilyen oldalak szerkezete öt konstrukcióból állhat: HTML , megjegyzések, szkriptelemek, direktívák és műveletek. A JSP-oldal egy statikus tartalommal rendelkező szervletté van lefordítva, amelyet a szolgáltatási metódushoz társított kimeneti adatfolyamba küld . Ezért az első kérésre ez a folyamat kis késést okozhat. A dokumentumban vagy programban található megjegyzések nem okozzák a program lelassulását, mivel azokat a fordító és az előadó figyelmen kívül hagyja. A szkriptelemek lehetővé teszik olyan Java kód megadását , amely később a végső szervlet részévé válik, az direktívák lehetővé teszik a szervlet teljes szerkezetének vezérlését, a műveletek pedig a meglévő összetevők megadását, valamint a JSP motor viselkedésének szabályozását szolgálják. . A szkriptelés megkönnyítése érdekében vannak előre definiált változók, például request, response, pageContext, session, out, application, config, page, exception. Példa egy JSP-oldalra, amely minden JSP-összetevőt használ:

Megjegyzések

A megjegyzések a program forráskódjának magyarázatára szolgálnak. A JSP-oldalakon a megjegyzések két csoportra oszthatók:

  • JSP forráskód megjegyzések
  • HTML jelölő megjegyzések .

A JSP forráskód megjegyzései speciális karaktersorozattal vannak jelölve: a megjegyzés <%--elején és --%>végén. Az ilyen típusú megjegyzések a JSP-oldal összeállításakor törlődnek. JSP megjegyzés példa:

<%-- Megjeleníti a termékkatalógust és az aktuális bevásárlókosarat . --%>

A HTML jelölő megjegyzések formátuma a HTML nyelv szabályai szerint történik. Az ilyen típusú megjegyzéseket a JSP-fordító statikus szövegként kezeli, és a kimeneti HTML-dokumentumban helyezi el. A HTML megjegyzésekben lévő JSP kifejezések végrehajtásra kerülnek. HTML megjegyzés példa:

<!-- Oldal létrehozásának dátuma : <%= új java . util . Dátum () %> -->

Szkriptelemek

A JSP specifikáció háromféle szkriptelemet különböztet meg:

  • Nyilatkozatok <%!egy vagy több nyilatkozat%>
  • Kifejezések <%=egyetlen kifejezés%>
  • szkriptek <%_%>

A deklarációkat általában változók, metódusok, belső osztályok és más érvényes Java konstrukciók osztályszintű meghatározására használják. A kifejezések az out.print() metódus argumentumaivá válnak. A scriptletek segítségével a Java kód működő részei beágyazódnak a JSP oldalakba.

JSP deklarációk

A JSP deklarációk lehetővé teszik változók, metódusok, belső osztályok stb. meghatározását. A deklarációk a programban használt Java konstrukciók meghatározására szolgálnak. Mivel a deklarációk nem jelennek meg, általában JSP-kifejezésekkel vagy scriptletekkel együtt használatosak. A példa JSP-kódrészlet megmutatja, hogy a kiszolgáló indítása (vagy a szervlet legutóbbi módosítása és újratöltése) óta hány kérés érkezett erre az oldalra. Vegye figyelembe, hogy a példában deklarációt és kifejezést is használunk, és a konstrukción belül a deklaráció után pontosvessző ( ; ) található:

<%! private int accessCount = 0 ; %> Az oldalletöltések száma a szerver betöltése óta : < %= ++ accessCount % > JSP kifejezések

A JSP-kifejezések Java értékeket közvetlenül a kimenetbe szúrnak be. A Java kifejezéseket kiértékeli, karakterláncokká alakítja, és beilleszti az oldalba. Ezek a számítások futási időben (azaz az oldal lekérésekor) zajlanak, és ezért teljes hozzáférés áll rendelkezésre magáról a kérésről szóló információkhoz. A kifejezésekben konstansokat, változókat, különféle metódusok meghívását használhatja. Minden kifejezés, tartalmuk összetettségétől függetlenül, egyetlen eredményre vagy számra értékelődik. A JSP-oldalak a JSP Writerre támaszkodnak , amely egy kifejezés bármely eredményét átveszi, típussá String(szöveggé) konvertálja és puffereli . A következő kód például egy adott oldalkérés dátumát és időpontját jeleníti meg:

Jelenlegi idő : <%= új java . util . Dátum () %> Az Ön gazdagépneve : <% = kérés . getRemoteHost () %>

Három szabályra kell figyelni:

  • A JSP kifejezéseknek Java kifejezéseket kell tartalmazniuk;
  • minden JSP kifejezés csak egy Java kifejezést tartalmazhat;
  • A JSP-kifejezések nem végződhetnek pontosvesszővel ( ;), ellentétben a Java deklarációkkal.
JSP-szkriptek

A JSP szkriptletek lehetővé teszik, hogy bármilyen kódot beszúrjon egy szervlet metódusba, amely az oldal renderelésekor generálódik, lehetővé téve a Java konstrukciók többségének használatát. A szkriptletek is hozzáférhetnek ugyanazokhoz az előre definiált változókhoz, mint a kifejezésekhez. Ezért például egy érték megjelenítéséhez egy előre meghatározott változót kell használnia out.

<% String queryData = kérés . getQueryString (); ki . println ( "További lekérdezési adatok: " + queryData ); %>

A szkriptletben lévő kód úgy kerül beillesztésre, ahogyan meg volt írva. Minden statikus HTML (sablonszöveg) a szkriptlet előtt vagy után a print. Például a következő JSP-részlet vegyesen tartalmaz sablon- és szkriptletszöveget:

<% if ( Math . random () < 0,5 ) { %> < B > Szép napot kívánok </ B > ! <% } else { %> < B > Rossz napot </ B > Neked ! <% } %>

A scriptlet konvertálása után a kód így fog kinézni:

if ( Math . véletlen ( ) < 0.5 ) { ki . println ( "<B>Szép</B> napot!" ); } else { out . println ( "<B>Rossz napot kívánok</B> neked!" ); }

Ez azt jelenti, hogy a szkriptleteknek nem kell teljes Java-részleteket tartalmazniuk, és a nyitva hagyott blokkok hatással lehetnek a szkriptleten kívüli statikus HTML -re.

JSP irányelvek

A JSP oldal üzenetet küldhet a megfelelő tárolónak a teendőkre vonatkozó utasításokkal. Ezeket az üzeneteket direktíváknak nevezzük. Minden direktíva karakterrel kezdődik <%@, amelyet az irányelv neve és egy vagy több értékkel rendelkező attribútum követ, és -re végződik %>. A JSP oldalon lévő direktívák hatására a tároló kérést küld egy adott szolgáltatás végrehajtására, amely nincs deklarálva a generált dokumentumban. Az irányelvek formája a következőképpen ábrázolható:

<% @ direktíva attribútum = "érték" %>

Több attribútum beállítását is kombinálhatja egyetlen direktíván:

<% @ direktíva attribútum1 = "érték1" attribútum2 = "érték2" ... attribútumN = " értékN " %>

A direktíváknak három fő típusa van: page , amely lehetővé teszi például az osztályok importálását, a szervlet szuperosztályának megváltoztatását és így tovább; include , amely lehetővé teszi egy fájl beszúrását egy szervlet osztályba, amikor egy JSP-fájlt szervletté fordít; és a taglib , amely lehetővé teszi, hogy sok címkét bővítsen sajátjával, amelyeket a JSP-tároló képes értelmezni.

JSP oldal direktíva

Ahogy a neve is sugallja, ez az irányelv attribútumokat biztosít a JSP oldalhoz. includeAz ebben a direktívában meghatározott attribútumok be vannak ágyazva az adott JSP oldalba és annak összes beágyazott statikus elemébe, függetlenül attól, hogy az direktívával vagy a művelettel kerültek beillesztésre jsp:include. Az irányelv formája a pagekövetkező:

<% @ page attribútum = " érték " %>

Vegyük példaként a következő bejegyzést:

<% @ page import = java . util . * , com . osztályaim . * puffer = 15 kb %>

Ez a direktíva kimondja, hogy a JSP-oldal két Java-csomagból importál osztályokat , java.utilmajd com.myclassesmeghatározza a puffermemória méretét, amelyet az adott JSP-oldal feldolgozásához kell használni.

Ezután vegye figyelembe az irányelv attribútumait page:

  • import="пакет.class1, пакет.class2, ..., пакет.classN".Lehetővé teszi az importálandó csomagok megadását. Ez az egyetlen attribútum, amely többször is használható ugyanabban a direktívában. A listának tartalmaznia kell minden olyan Java osztályt, amelyet használni szeretne, és amely nem része az importált osztályok eredeti készletének. A forráskészlet a következőket tartalmazza: java.lang.*, javax.servlet.*, javax.servlet.jsp.* и javax.servlet.http.*.Példa az attribútum használatára import:
<% @ page import = "java.util.Date, javax.text.SimpleDateFormat, com.myclasses.*" %>
  • language="java".Ez az attribútum a használt programozási nyelv beállítására szolgál . Az alapértelmezett érték "java". Ez az attribútum nem kötelező, de a probléma továbbra is felmerülhet, ha a tároló JSP-szolgáltatója más nyelveket (például JavaScriptet ) használ. Egy példabejegyzés ehhez az attribútumhoz a következő:
<% @ page language = " java " %>
  • extends="пакет.class".Megadja a generált szervlet szuperosztályát (szülőosztályát). A szervlet általában az eredeti osztály kiterjesztése. A tapasztalt programozók ezt az attribútumot használhatják saját szuperosztályaik létrehozásához. Az attribútum használatára egy példa így nézhet ki:
<% @ page extends = myPackage . HttpPélda " %>
  • session="true|false".Ez az attribútum igaz vagy hamis értékre állítható , ami meghatározza, hogy a JSP-oldal részt vesz-e a HTTP -fordításban . Az érték true(„true”, az alapértelmezett) azt jelzi, hogy az előre definiált változót session(type HttpSession) egy meglévő szekcióhoz kell kötni, ha van ilyen, ellenkező esetben új szekció jön létre és kötődik hozzá. Az érték false("false") azt jelzi, hogy a munkamenetek nem kerülnek felhasználásra, és a változó elérésére tett kísérletek sessionhibát eredményeznek a JSP-oldal servletre történő fordítása során. Az attribútum használatára egy példa így nézhet ki:
<% @ page session = " false " %>
  • buffer="размерkb|none".Ez az attribútum határozza meg az előre meghatározott változó által hivatkozott JspWriter objektumhoz szükséges puffermemória mennyiségét out. Az alapértelmezett érték a szerver beállításaitól függ, de nagyobbnak kell lennie, mint 8kb. Az érték "sizekb" vagy "none" formában kerül megadásra. Ha a puffermemória értékét értékre állítja none, akkor a szervlet nem tárol semmit a puffermemóriában, és a változó elé írt eredményt outközvetlenül az objektumhoz PrintWritertartozó objektumnak adja át ServletResponse.. érték, akkor JspWriterebben a memóriában tárol adatokat, ami a teljesítmény növekedését eredményezi. Az objektumokkal ellentétben az objektumok PrintWriterkivételeket JspWriterdobhatnak IOExceptions. A puffermemória kezdeti értéke 8kB. Egy példabejegyzés ehhez az attribútumhoz így nézhet ki:
<% @ pagebuffer = 12 kb % >
  • autoflush="true|false".Ez az attribútum lehet igaz vagy hamis . Az érték true(alapértelmezés szerint "true") azt határozza meg, hogy ha a puffermemória túlcsordul, az automatikusan törlődik. A ritkán használt érték false(„false”) azt határozza meg, hogy a puffertúlcsordulásnak kivételt ( IOExceptions) kell eredményeznie. Általában a és attribútumok egy direktívában buffervannak beállítva. Attribútumérték beállításakor az autoflushattribútum értékének buffer="none"beállítása érvénytelen. Egy példa így nézhet ki:falseautoflush
<% @ oldalpuffer = 16 kb autoflush = true % >
  • isThreadSafe="true|false".Ez az attribútum lehet igaz vagy hamis . Az érték true("true", az alapértelmezett) a normál szervlet-végrehajtási módot határozza meg, amikor több kérést dolgoznak fel egyidejűleg egyetlen szervlet-példány használatával, azon a feltételezésen alapulva, hogy a szerző szinkronizálta a példány változóihoz való hozzáférést. Az érték false("false") azt jelzi, hogy a szervletnek örökölnie kell SingleThreadModel(egyszálú modell), amelyben a szekvenciális vagy párhuzamos kéréseket külön szervlet-példányok kezelik. Más szavakkal, az érték truehatására a tároló egyszerre több kérést küld a szervletnek, míg az érték hatására a falsetároló egyenként küldi el a kéréseket. Egy használati példa így néz ki:
<% @ page isThreadSafe = false %>
  • info="информация".Megad egy karakterláncot, amely lekérhető a metódus használatakor Servlet.getServletInfo().. Ez a metódus általában információkat ad vissza a szervletről (például szerzőről, verzióról és szerzői jogról). Egy példabejegyzés ehhez az attribútumhoz így nézhet ki:
<% @ page info = Szerző : Petr Ivanovich ; verzió : 1.0 " %>
  • errorPage="url".Megad egy JSP-oldalt, amely akkor kerül meghívásra, ha olyan esemény történik Throwables, amelyet ez az oldal nem kezel. Ha kivétel történik egy JSP-oldalon, és a JSP-oldal nem rendelkezik saját kóddal a kivétel feloldásához, a tároló automatikusan átadja a vezérlést az attribútum értékeként megadott URLerrorPage -re . Egy példabejegyzés így néz ki:
<% @ page errorPage = " / myweb / errors / myerror . jsp " %>
  • isErrorPage="true|false".Ez az attribútum lehet igaz vagy hamis . Jelzi, hogy ez az oldal használható-e más JSP-oldalak hibakezelésére vagy sem. Az alapértelmezett érték false"false". Az attribútum használatára egy példa így nézhet ki:
<% @ page isErrorPage = true %>
  • contentType="MIME-Тип".Ez az attribútum beállítja a MIMEkimenet típusát, és opcionálisan beállíthatja a válasz karakterkódolását ( HTML válasz). Az alapértelmezett MIMEérték text/html. Az érthetőség kedvéért használhatjuk a következő példát:
<% @ page contentType = "text/plain" %>

Ugyanezt az eredményt érheti el egy scriptlet használatával:

<% válasz . setContentType ( "text/plain" ); %> A JSP tartalmazza a direktívát

Ez a direktíva lehetővé teszi, hogy fájlokat vegyen fel egy szervletbe JSP-oldalak fordításakor. A direktíva használata így néz ki:

<% @ include file = "relatív URL" %>

A megadott URL -t általában annak az oldalnak a JSP-jéhez viszonyítva értelmezik, amelyen a hivatkozás található, de mint minden más relatív URL -nél, megmondhatja a rendszernek az Önt érdeklő erőforrás helyét a webszerverhez képest. saját könyvtárba úgy, hogy az URL -t egy " / " karakterrel jelöli meg . Az include fájl tartalmát a rendszer egyszerű JSP-szövegként kezeli, ezért olyan elemeket tartalmazhat, mint a statikus HTML , szkriptelemek, direktívák és műveletek. Például sok webhely minden oldalon kis navigációs sávot használ. A HTML keretek használatának problémái miatt ezt a feladatot gyakran úgy oldják meg, hogy az oldal tetejére vagy bal oldalára egy kis táblázatot helyeznek el, melynek HTML kódja sokszor megismétlődik az oldal minden oldalán. Az irányelv includea legtermészetesebb módja ennek a feladatnak, megkímélve a fejlesztőt attól a rémálomtól, hogy a HTML-t minden egyes fájlba másolja. Ez így történik:

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < html > < head > < title > Tesztoldal < / title > </ head > < body > <% @ include file = "/navbar .html" %> <!-- Ennek az oldalnak egy konkrét részlete ... --> </ body > </ html >

Vegye figyelembe, hogy mivel az irányelv includeaz oldalfordítás során fájlokat is tartalmaz, a navigációs sáv módosítása után újra le kell fordítania az összes JSP-oldalt, amely azt használja. Ez ebben az esetben egy jó kompromisszum, mivel általában a navigációs sáv meglehetősen ritkán változik, és a csatlakozási folyamat nem veszíti el hatékonyságát. Ha a mellékelt fájlok gyakran változnak, használhatja helyette a műveletet jsp:include. Ez a művelet magában foglalja a fájlt a JSP elérésekor.

JSP taglib direktíva

Mint már tudja, a JSP-oldalakon az elemeket címkékkel írják fel (konvencionális jelek, címkék, márkák). A JSP-tároló által értelmezhető címkék készlete bővíthető úgynevezett címkekönyvtárak segítségével. A műveleteket kiterjesztett címkekészlethez is csatolhatja, ami magának a JSP-nyelvnek a kiterjesztését eredményezi. A címkék szabványos és egyéni címkékre oszthatók. Egy általánosított írásmód így nézhet ki:

<% @ taglib uri = URI a címkekönyvtárhoz prefix = karakter előtag % >

A címkekönyvtárat URI - címmel (egyedi erőforrás-azonosítóval) kell azonosítani. Az URI lehet abszolút vagy relatív. Az egyedi erőforrás-azonosító egy címkekönyvtár ( TLD ) helyét azonosítja, amely meghatározza az adott könyvtár saját címkéit. Példa egy direktíva bejegyzésre:

<% @ taglib uri = " http://www.moywebserver.ru/naydiznaki.tld " prefix = "iskat" %>

Egy JSP-oldal végtelen számú direktívát tartalmazhat taglib, de minden direktívának más előtagot kell adni, amely meghatározza az oldalon lévő könyvtár tartalmát. Előtagként bármilyen szöveget, szót használhat. Míg egy direktíva taglibbárhol használható a JSP-oldalon, az ezen direktívák által használt natív címkéket mögöttük kell használni.

Műveletek

A JSP-műveletek XML szintaxis konstrukciókat használnak a szervlet motor működésének vezérlésére. Dinamikusan beilleszthet egy fájlt, újra felhasználhatja a JavaBeans -t, átirányíthatja a felhasználót egy másik oldalra, vagy létrehozhat HTML -kódot egy Java-bővítményhez . Mindezeket a műveleteket az alábbiakban részletesen tárgyaljuk. Ne feledje, hogy mint minden XML esetében, az elem- és attribútumnevek is megkülönböztetik a kis- és nagybetűket. A műveletek két csoportra oszthatók: standard és létrehozott (saját, amit a programozó hoz létre). A következő szabványos műveletek megengedettek:

  • jsp:declaration  — Nyilatkozat, hasonló a <% tag-hez! … %>;
  • jsp:  scriptlet - Scriptlet, hasonló a <% ... %> címkéhez;
  • jsp:expression  - Kifejezés, hasonló a <%= ... %> címkéhez;
  • jsp:text  – Szövegkimenet;
  • jsp:useBean  – Új JavaBean példány keresése vagy létrehozása;
  • jsp:setProperty  - JavaBean tulajdonságok beállítása;
  • jsp:getProperty  – JavaBean tulajdonság beszúrása a kimeneti adatfolyamba;
  • jsp:include  – Tartalmazza a fájlt az oldalkérés idején;
  • jsp:forward  – átirányítja a kérést egy másik oldalra;
  • jsp:param  – Paramétereket ad a kérés objektumhoz, például továbbítás, belefoglalás, bővítmény.;
  • jsp:plugin  – Kódot generál (a használt böngésző típusától függően), amely címkét hoz létreOBJECTvagyEMBEDegy Java bővítményhez;
  • jsp:params  – A paramétereket a jsp:plugin címkén belül csoportosítja;
  • jsp:fallback  – Megadja az ügyfélböngésző által használandó tartalmat, ha a beépülő modul nem indul el. A plugin elemen belül használatos.
jsp:useBean művelet

Ez a művelet lehetővé teszi a JavaBean betöltését a JSP-oldalon való későbbi használatra. Ez a szolgáltatás lehetővé teszi a Java osztályok újrafelhasználását anélkül, hogy feláldozná a JSP szervletek nyújtotta előnyöket. Ezenkívül ez az egyik módja annak, hogy eltávolítsuk a Java-feldolgozás nagy részét a JSP-oldalról. Ha a Java-feldolgozást egy JSP-oldalról egy JavaBean-re viszi át, akkor ezek a funkciók más JSP-oldalakon is használhatók. A használandó komponens megadásának legegyszerűbb szintaxisa a következő:

< jsp : useBean id = "name" class = "package.class" />

Ez általában azt jelenti, hogy "az osztály által meghatározott osztály objektumának új példányát kell létrehozni, és hozzá kell rendelni egy id által elnevezett változóhoz ". Azonban beállíthatja a hatókör attribútumot ( az oldal, kérések, munkamenetek vagy párbeszédpanelek értékeit veszi fel, page|request|session|applicationaz alkalmazás számára), amely nem csak az aktuális oldalhoz kapcsolódik. Ebben az esetben hasznos hivatkozásokat lekérni a meglévőre , és a művelet csak akkor hoz létre új objektumot, ha nem létezik azonos azonosító és hatókör értékekkel rendelkező objektum . Most, hogy rendelkezik egy , a tulajdonságait módosíthatja egy művelettel , vagy egy scriptlet használatával, és kifejezetten meghívja az objektum metódusát a korábban megadott változónévvel az id attribútumon keresztül . Emlékezzünk vissza, hogy a beans esetében, amikor azt mondja, hogy "ennek a komponensnek van egy X típusú tulajdonsága, amelynek neve ", akkor valójában azt jelenti, hogy "ennek az osztálynak van egy metódusa , amely X típusú adatokat ad vissza, és egy másik metódus, amely X -et vesz paraméterként." A műveletet részletesebben a következő szakasz tárgyalja, de most ne feledje, hogy vagy explicit módon beállíthat értéket a param attribútum beállításával , hogy megkapja az értéket a megfelelő lekérdezési paraméterből, vagy egyszerűen felsorolhatja a tulajdonságokat, hogy értékeket kapjon a tulajdonságokkal megegyező nevű lekérdezési paramétereket. A meglévő tulajdonságok értékeit JSP-kifejezések vagy szkriptletek használatával kaphatja meg a megfelelő metódus meghívásával , vagy (leggyakrabban) egy művelet használatával . pagerequestsessionapplicationbeanbeansjsp:useBeanbeanjsp:setPropertyfoogetFoosetFoojsp:setPropertygetXxxjsp:getProperty

A komponensnek adott osztálynak a szerver normál osztálykönyvtárában kell lennie, nem pedig a szerkesztés után automatikusan újratöltődő osztályoknak fenntartott részben. Például a Java webszerver esetében az összes használt osztályt egy könyvtárba classesvagy .jar fájlba kell elhelyezni a könyvtárban lib, nem pedig a könyvtárban servlets. Az alábbiakban egy egyszerű példa található, amely betölt beanegy egyszerű karakterlánc-paramétert, és beállít/kap.

BeanTest.jsp

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < html > < head > < title > JavaBeans újrafelhasználása JSP -ben < / title > < / head > < body > < h1 > JavaBeans újrafelhasználása JSP -ben </ h1 > < jsp : useBean id = "test" class = "hall.SimpleBean" /> < jsp : setProperty name = "teszt" property = "message" value = "Hello WWW" /> < p > Üzenet : < jsp : getProperty name = "test" property = "message" /> </ p > </ body > </ html >

SimpleBean.java

csomagterem ; _ public class SimpleBean { private String message = "Az üzenet szövege nincs beállítva" ; public String getMessage () { return ( üzenet ); } public void setMessage ( String message ) { this . üzenet = üzenet _ } }

Néhány további részlet a használatról jsp:useBean. Használatának legegyszerűbb módja bean a konstrukció használata:

< jsp : useBean id = "name" class = "package.class" />

betöltésére bean, majd használatára jsp:setProperty, valamint jsp:getPropertytulajdonságainak (paramétereinek) módosítására és lekérésére. Van azonban két másik út is. Először is használhatja a tároló formátumot, nevezetesen:

< jsp : useBean ... > Törzs </ jsp : useBean >

annak biztosítása érdekében, hogy a törzs csak egy példány beanelső létrehozásakor kerüljön végrehajtásra, és ne egy létező megtalálásakor és felhasználásakor bean. Ahogy az alábbiakban tárgyaljuk, beansmegosztható, így nem minden kifejezés jsp:useBeaneredményezi a bean. Másodszor, az id és class mellett három másik attribútum is használható: hatókör , típus és komponensnév . Ezeket az attribútumokat az alábbiakban ismertetjük:

  • id  - Megadja annak a változónak a nevét, amelyre hivatkozikbean. Ha megtalálhatóbeanugyanazokkal aidésscope, akkor a korábban létrehozott objektum kerül felhasználásra új példány létrehozása helyett;
  • osztály  – a csomag teljes nevét adja megbean;
  • hatókör  – meghatározza azt a hatókört, amelybenbeanelérhetőnek kell lennie. Négy érvényes értéket vehet fel: page , request , session és application . Alapértelmezés szerint oldal , ami azt jelenti, hogybeancsak az aktuális oldalon érhető el (az aktuális oldalon tárolvaPageContext). A kérés értéke azt jelenti, hogybeancsak az aktuális ügyfélkérelemhez érhető el (az objektumban tárolvaServletRequest). A munkamenet értéke azt jelenti, hogy az objektum az összes oldal számára elérhető az aktuális oldal élettartama alattHttpSession. És végül, az érték alkalmazás azt jelenti, hogy minden oldal számára elérhető ugyanazt aServletContext. Azért van szükség erre az attribútumra, mertjsp:useBeanaz objektum új példányának létrehozását okozza, ha nincs létező objektum ugyanazzalidésscope. Ellenkező esetben a rendszer egy már létező objektumot használ, és az összes elemetjsp:setParametervagy a címkék közöttijsp:useBeanfigyelmen kívül hagyja.
  • típus  - az objektumra hivatkozó változó típusát jelzi. Meg kell egyeznie a megvalósítandó osztály, szuperosztály vagy interfész nevével. A változó nevét az attribútum adja megid.
  • beanName  - megadja abeanmetódus által használtinstantiate. Megadhatja atypeésbeanNameaz attribútumot, és elhagyhatja az attribútumotclass.
action jsp:setProperty

Használhatja jsp:setPropertya korábban leírtakat beans. Ezt kétféleképpen teheti meg. Először is használhatja jsp:setPropertyaz elem után, de azon kívül jsp:useBean, amint az a példában látható:

< jsp : useBean id = "myName" ... /> ... < jsp : setProperty name = "myName" property = "someProperty" ... />

Ebben az esetben jsp:setPropertyattól függetlenül lefut, hogy létező példányt találtak-e, beanvagy új példányt hoztak létre. Egy másik lehetőség, ha jsp:setPropertyaz elem törzsébe helyezi jsp:useBean, amint azt egy másik példa is mutatja:

< jsp : useBean id = "myName" ... > ... < jsp : setProperty name = "myName" property = "someProperty" ... /> </ jsp : useBean >

Ez jsp:setPropertycsak akkor történik meg, ha az objektum új példányát hozták létre, és nem akkor, ha egy létezőt talál. Egy művelet jsp:setPropertya következő négy attribútumot fogadja el:

  • name  – Ez a kötelező attribútum a beállítandóbeantulajdonságok beállítására szolgál. Az elemnekjsp:useBeanmeg kell előznie az elem használatátjsp:setProperty.
  • property  – Ez a kötelező attribútum beállítja a beállítani kívánt tulajdonságot. Van azonban egy speciális eset: a " * " érték azt jelenti, hogy minden lekérdezési paraméter, amelynek neve megegyezik a tulajdonságnevekkelbean, a megfelelő tulajdonság-beállító metódushoz kerül.
  • value  – Ez az opcionális attribútum beállítja a tulajdonság értékét. A karakterlánc-értékek automatikusan numerikus, logikai , logikai , bájt , bájt , char és karakterekkévalueOf konvertálódnak a megfelelő osztályszabványos metódusávalPéldául a vagy tulajdonság értékéta"true"módszerrel,a "42" értékét pedig avagya metódussal konvertálják át. Az érték és a param attribútumokat nem használhatja egyszerre , de dönthet úgy, hogy egyáltalán nem használja őket. Lásd alábba param attribútum leírását.booleanBooleanBoolean.valueOfintIntegerInteger.valueOf
  • param  – Ez az opcionális attribútum beállítja a tulajdonság lekéréséhez használt lekérdezési paramétert. Ha ez a paraméter hiányzik az aktuális kérésből, nem történik művelet: a rendszer nem adja át az értéketnulla tulajdonságokat beállító metódusnak. Így elfogadható azbeanalapértelmezett tulajdonságok használata, felülírva azokat, ha a kérés paraméterei ezt megkövetelik. Például a következő töredék a következőket jelenti: "állítsa be a tulajdonságotnumberOfItemsa kérelem paraméteréneknumItemsmegfelelően, és ha nincs ilyen paraméter a kérésben, akkor nem történik semmilyen művelet."
< jsp : setProperty name = "orderBean" property = "numberOfItems" param = "numItems" />

Ha sem és -t nem használ value, paramez ugyanaz, mintha a névnek parammegfelelő nevet adott volna property. Alkalmazhatja azt az elvet, hogy automatikusan használja a kéréstulajdonságokat, amelyek neve megegyezik a tulajdonságnevekkel, és továbbléphet, ha a tulajdonság nevét " * "-ra állítja, és elhagyja az érték és a paraméter paramétereket . Ebben az esetben a szerver az érvényes tulajdonságokat és lekérdezési paramétereket dolgozza fel az azonos nevek egyeztetéséhez. A következő példa beanegy prímtáblázat létrehozására szolgál. Ha egy paraméter létezik numDigitsa kérési adatokban, akkor az átadásra kerül a bean numDigits. Hasonlóan a numPrimes. JspPrimes.jsp

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < html > < head > < title > JavaBeans újrafelhasználása JSP -ben < / title > < / head > < body > < h1 > JavaBeans újrafelhasználása JSP -ben </ h1 > < jsp : useBean id = "primeTable" class = "hall.NumberedPrimes" /> < jsp : setProperty name = "primeTable" property = "numDigits" /> < jsp : setProperty name = "primeTable" property = "numPrimes" /> < p > Több karakterprím < jsp : getProperty name = " primeTable " property = " numDigits " /> : < jsp : getProperty name = "primeTable" property = "numberedList" /> </ p > </ body > </ html > jsp:getProperty művelet

Ez az elem határozza meg a tulajdonság értékét, beankarakterláncsá alakítja, és elküldi a kimeneti adatfolyamnak. Egy művelet végrehajtásához két attribútumot kell beállítani: a nevet bean, amely előre be van állítva a műveletben jsp:useBean, és annak a tulajdonságnak a nevét, amelynek értékét meg kell határozni. A következő példa egy példa a művelet használatára:

< jsp : useBean id = "itemBean" ... /> ... < UL > < LI > Elemek száma : < jsp : getProperty name = "itemBean" property = " numItems " / > < LI > Egységár : < jsp : getProperty name = "itemBean" property = "unitCost" /> </ UL > jsp:include action

Ez a művelet lehetővé teszi a fájlok tartalmának beszúrását a létrehozott oldalra. Művelet szintaxisa:

< jsp : include page = "relatív URL" flush = "true" />

Ellentétben a direktívával include, amely beszúr egy fájlt az oldal JSP-fordítási szakaszában, ez a művelet beszúrja a fájlt, amikor az oldalt kérik. Ez némi hatékonyságvesztést eredményez, és kiküszöböli a JSP-kód lehetőségét a beillesztett fájlban, de jelentős előnyt biztosít a rugalmasság terén.

Példa négy fájl tartalmának beszúrására egy JSP-oldalra:

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" > < html > < head > < title > Hírek </ title > </ head > < body > < h1 > Hírek </ h1 > < p > Íme kivonatok négy legnépszerűbb cikkünkből : </ p > < ol > < li >< jsp : include page = "news/ Item1 . html" flush = "true" /></ li > < li >< jsp : include page = "news/Item2.html" flush = "true" /></ li > < li >< jsp : include page = " news/ Item3.html" flush = "true" /></ li > < li >< jsp : include page = "news/Item4.html" flush = "true" /></ li > </ ol > </ body > </ html > jsp:forward action

Ezzel a művelettel átadhatja a kérést egy másik statikus HTML-oldalnak, szervletnek vagy JSP-oldalnak. A művelettel ellentétben jsp:includeaz aktuális oldal feldolgozása véget ér. Egy attribútumot használ page, amelynek tartalmaznia kell egy relatív URL -t, amely alapján az objektum rendeződik request. Egy művelettel jsp:parammás paramétereket is hozzáadhat a másik oldalnak átadott eredeti lekérdezési paraméterekhez. Az attribútum értéke pagelehet statikus érték vagy a kérés során kiszámított érték, amint azt az alábbi két példa mutatja:

< jsp : forward page = "/utils/errorReporter.jsp" /> < jsp : forward page = "<%= someJavaExpression %>" />

Ezenkívül egy művelet jsp:forwardsegítségével átviheti a vezérlést egy másik oldalra, de azzal a feltétellel, hogy a művelet meghívása előtt semmi sem íródott a kimenő puffermemóriába (különben kivételt dobunk IllegalStateException).

jsp:param action és jsp:params action

Ez a művelet név/érték típusú információkat biztosít. Ezt a műveletet főként a már ismert műveletekkel jsp:includeés jsp:forward. Ezenkívül a művelettel együtt is használható jsp:plugin. Más esetekben ennek a műveletnek a használata nem számít. jsp:paramMűveletekkel együtt használják , jsp:includeés jsp:forwardátadja az eredeti objektumot új oldalaknak request, amelyek kibővülnek az új paraméterekkel. Ha új értékeket ad meg a már meglévő paraméterekhez, akkor az új értékek élveznek elsőbbséget. Egy művelet jsp:paramssegítségével egyszerre több paramétert is beállíthat

jsp:plugin művelet

Ez a művelet lehetővé teszi a Java beépülő modult használó kisalkalmazások futtatásához szükséges OBJECT vagy EMBED elem beszúrását (a használt böngésző típusától függően). Más szavakkal, ez a művelet a HTML létrehozására szolgál a Java API beágyazásához a JSP-oldalon. Ugyanígy beillesztheti az URL-t a Java API moduljainak letöltéséhez a JavaSoft szoftverből, amely lehetővé teszi kisalkalmazások futtatását a böngészőn belül. A művelet jelentkezési űrlapja így néz ki:

< jsp : plugin type = "bean|applet" code = "class file" codebase = "CodeBase object" align = "location" archive = "archive list" height = "height" hspace = "vízszintes tér" jreversion = "verzió" name = "összetevő neve" vspace = "függőleges tér" width = "width" nspluginurl = "url" iepluginurl = "url" > < jsp : params > < jsp : param name = "name1" value = "value1" /> < jsp : param name = " name2" value = "value2 " /> ... < jsp : param name = "nameN" value = "valueN" /> </ jsp : params > < jsp : tartalék > </ jsp : tartalék > </ jsp : plugin >

Nézzünk egy példát ennek a műveletnek a kisalkalmazáskódban való használatára:

< jsp : plugin type = "applet" code = "Blink.class" width = 300 height = 100 > < jsp : params > < jsp : param name = lbl value = "Igen, ez finomabb, mint a szeletelt kenyér! " /> < jsp : param name = speed value = "4" /> < jsp : params > < jsp : fallback > A böngészője ismeretlen okból nem tudja futtatni ezt a kisalkalmazást </ fallback > </ jsp : plugin >

Példa egy XML-szintaxist használó JSP-oldalra

<? xml version = "1.0" encoding = "UTF-8" ?> < jsp : root xmlns : jsp = "http://java.sun.com/JSP/Page" version = "2.0" > < jsp : direktíva . oldal tartalomType = " application/xhtml+xml; charset=UTF-8" /> < jsp : kimenet doctype - root - element = "html" doctype - public = "-//W3C//DTD XHTML 1.1//EN" doctype - system = "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" kihagy - xml - deklaráció = "igaz" /> < html xmlns = "http://www.w3.org/ 1999/xhtml" > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=UTF-8" /> < title > Oldal címe </ title > </ head > < body > < h1 > Címsor </ h1 > < p > Szöveg </ p > < jsp : scriptlet > out . print ( Calendar . getInstance ( kérés . getLocale ()). getFirstDayOfWeek () == Calendar . SUNDAY ? "Az Ön országában a hét vasárnap kezdődik" : "Az Ön országában a hét nem vasárnap kezdődik" ); </ jsp : scriptlet > </ body > </ html > </ jsp : root >

Lásd még

Linkek