Java Server Pages

JSP
Rozšíření .jsp
MIME typ aplikace/jsp
Vývojář Nadace Eclipse
Poslední vydání 3.1.0 (15. května 2022 ) ( 2022-05-15 )
Typ formátu formát souboru , šablonový engine a technická specifikace
standard(y) JSR 245
webová stránka projects.eclipse.org/… (  anglicky)
 Mediální soubory na Wikimedia Commons

JSP ( JavaServer Pages ) je technologie, která umožňuje webovým vývojářům vytvářet obsah, který má statické i dynamické komponenty. Stránka JSP obsahuje dva typy textu: statická zdrojová data, která mohou být v jednom z textových formátů HTML , SVG , WML nebo XML , a prvky JSP, které vytvářejí dynamický obsah. Kromě toho lze knihovny značek JSP a jazyk Expression Language (EL) použít k vložení kódu Java do statického obsahu stránek JSP.

Kód stránky JSP je přeložen do kódu servletu Java pomocí kompilátoru stránek Jasper JSP a poté zkompilován do bytekódu Java Virtual Machine ( JVM ) . Kontejnery servletů schopné spouštět stránky JSP jsou napsány v jazyce Java nezávislém na platformě. JSP jsou načteny na server a spravovány ze speciální struktury paketů Java serveru nazvané Jakarta EE Web Application. Stránky jsou obvykle zabaleny v archivech souborů .war a .ear .

Technologie JSP je platformově nezávislá, přenosná a snadno rozšiřitelná technologie pro vývoj webových aplikací .

Verze

Od verze 1.2 probíhá vývoj stránek JavaServer Pages v rámci procesu Java Community Process . JSR 53 definuje standardy JSP 1.2 a Servlet 2.3, zatímco JSR 152 definuje specifikaci JSP 2.0. V květnu 2006 byla vydána specifikace JSP 2.1 pod JSR 245 jako součást Java EE 5 . 10. prosince 2009 byla vydána specifikace JSP 2.2 jako obsah vydání JSR 245 .

JSP 1.0 a JSP 1.1

Tyto verze se zásadně liší od předchozích verzí, které byly vnímány jako odpověď Javy na ASP . Některé ze základních funkcí předchozích verzí (jako je schopnost vyvíjet knihovny značek) byly odstraněny nebo nahrazeny v souladu s principem oddělení kódu a obsahu. Vzhledem k tomu, že je obtížné procházet a oddělovat obsah od samotného kódu ve velkých objemech zdrojového kódu , přišel nápad oddělit (přenést) je pomocí značek JSP, jako je <jsp:useBean/>. Pro realizaci této myšlenky byly JSP tagy rozděleny do tří logických skupin: direktivy, prvky skriptu a akce.

JSP 1.2

JSP 1.2 rozšiřuje specifikaci JavaServer Pages 1.1 (JSP 1.1) následovně:

JSP 2.0

Nová verze specifikace JSP přidává následující funkce:

Dobrý den , $ { param . návštěvník } <%-- podobné : Dobrý den , <%= požadavek . getParameter ( "návštěvník" ) %> --%>

JSP 2.1

Platforma Java EE 5 se zaměřuje na snadný vývoj pomocí anotací jazyka Java, které zavedlo J2SE 5.0 . JSP 2.1 podporuje tento cíl definováním anotací vkládání závislostí na příkazy JSP a posluchače kontextu.

Přehled

JavaServer Pages (JSP) umožňují oddělit dynamickou část stránek od statického HTML . Dynamická část je uzavřena ve speciálních značkách "<% %>":

Vaše jméno hostitele : < % = požadavek . getRemoteHost () %>

Stránky JSP mají příponu .jspa jsou umístěny na stejném místě jako běžné webové stránky. Struktura takových stránek se může skládat z pěti konstrukcí: HTML , komentáře, prvky skriptu, směrnice a akce. Stránka JSP je zkompilována do servletu se statickým obsahem, který je odeslán do výstupního proudu spojeného s metodou služby . Proto při prvním požadavku může tento proces způsobit mírné zpoždění. Komentáře v dokumentu nebo programu nezpůsobí zpomalení programu, protože je kompilátor a interpret ignoruje . Skriptové prvky umožňují specifikovat Java kód , který se později stane součástí finálního servletu, direktivy umožňují ovládat celou strukturu servletu a akce slouží ke specifikaci existujících použitých komponent a také k ovládání chování JSP enginu. . Pro usnadnění skriptování jsou zde předdefinované proměnné jako request, response, pageContext, session, out, application, config, page, exception. Příklad stránky JSP využívající všechny komponenty JSP:

Komentáře

Komentáře se používají k vysvětlení zdrojového kódu programu. Na stránkách JSP lze komentáře rozdělit do dvou skupin:

  • Komentáře ke zdrojovému kódu JSP
  • HTML značkovací komentáře .

Komentáře zdrojového kódu JSP jsou označeny speciální posloupností znaků: <%--na začátku a --%>na konci komentáře. Tento typ komentáře je odstraněn při kompilaci stránky JSP. Příklad komentáře JSP:

<%-- Zobrazí produktový katalog a aktuální nákupní košík . --%>

Komentáře ke značkám HTML jsou formátovány podle pravidel jazyka HTML. Tento typ komentáře je kompilátorem JSP považován za statický text a je umístěn do výstupního dokumentu HTML. Výrazy JSP uvnitř komentářů HTML se provádějí. Příklad HTML komentáře:

<!-- Datum vytvoření stránky : <%= nová java . utilita _ Datum () %> -->

Prvky skriptu

Specifikace JSP rozlišuje tři typy prvků skriptu:

  • Prohlášení <%!jedno nebo více prohlášení%>
  • Výrazy <%=jeden výraz%>
  • skriplets <%_%>

Deklarace se běžně používají k definování proměnných, metod, vnitřních tříd a dalších platných Java konstruktů na úrovni třídy. Výrazy se stanou argumenty metody out.print(). S pomocí skriptletů jsou pracovní části kódu Java vnořeny do stránek JSP.

JSP prohlášení

Deklarace JSP vám umožní definovat proměnné, metody, vnitřní třídy a tak dále. Deklarace se používají k definování konstrukcí Java používaných v programu. Protože se deklarace nevykreslují, obvykle se používají ve spojení s výrazy nebo skriptlety JSP. Příklad fragmentu JSP ukazuje počet požadavků na tuto stránku od spuštění serveru (nebo od poslední úpravy a opětovného načtení servletu). Všimněte si, že v příkladu používáme deklaraci i výraz a že uvnitř konstruktu je za deklarací středník ( ; ):

<%! private int accessCount = 0 ; %> Počet zobrazení stránky od načtení serveru : < %= ++ accessCount % > JSP výrazy

Výrazy JSP se používají k vkládání hodnot Java přímo do výstupu. Java výrazy jsou vyhodnoceny, převedeny na řetězec a vloženy do stránky. Tyto výpočty probíhají za běhu (tedy při požadavku na stránku), a proto je plný přístup k informacím o samotném požadavku. Ve výrazech můžete použít konstanty, proměnné, volání různých metod. Všechny výrazy, bez ohledu na složitost jejich obsahu, jsou vyhodnoceny jako jediný výsledek nebo číslo. Stránky JSP spoléhají na JSP Writer , který převezme jakýkoli výsledek výrazu, převede jej na typ String(text) a uloží jej do vyrovnávací paměti . Například následující kód zobrazuje datum a čas požadavku dané stránky:

Aktuální čas : <%= nová java . utilita _ Datum () %> Vaše jméno hostitele : <% = požadavek . getRemoteHost () %>

Musíte věnovat pozornost třem pravidlům:

  • Výrazy JSP musí obsahovat výrazy Java;
  • každý výraz JSP musí obsahovat pouze jeden výraz Java;
  • Na rozdíl od deklarací Java nesmí výrazy JSP končit středníkem ( ;).
Skripty JSP

Skriptlety JSP vám umožňují vložit libovolný kód do metody servletu, která se vygeneruje při vykreslení stránky, což vám umožní používat většinu konstrukcí Java. Skriptlety mají také přístup ke stejným předdefinovaným proměnným jako výrazy. Chcete-li tedy například zobrazit hodnotu na stránce, musíte použít předdefinovanou proměnnou out.

<% String queryData = požadavek . getQueryString (); ven . println ( "Další data dotazu: " + data dotazu ); %>

Kód uvnitř skriptletu je vložen tak, jak byl napsán. Veškerý statický HTML (text šablony) před nebo po skriptletu je převeden pomocí print. Například následující fragment JSP obsahuje smíšený text šablony a skriptletu:

<% if ( Math . random () < 0,5 ) { %> < B > Hezký den < / B > ! <% } else { %> < B > Mějte pro vás špatný den </ B > ! <% } %>

Po převodu skriptletu bude kód vypadat takto:

if ( Math . random ( ) < 0,5 ) { out . println ( "<B>Přeji hezký</B> den!" ); } jinak { ven . println ( "<B>Mějte pro vás špatný den</B>!" ); }

To znamená, že skriptlety nemusí obsahovat úplné úryvky Java a že bloky, které zůstanou otevřené, mohou ovlivnit statický kód HTML mimo skriptlet.

Směrnice JSP

Stránka JSP může odeslat zprávu do příslušného kontejneru s pokyny, co dělat. Tyto zprávy se nazývají směrnice. Všechny direktivy začínají <%@, následuje název direktivy a jeden nebo více atributů s hodnotami a končí %>. Direktivy na stránce JSP způsobí, že kontejner odešle požadavek na provedení konkrétní služby, která není deklarována ve vygenerovaném dokumentu. Forma směrnic může být reprezentována takto:

<% @ atribut směrnice = "hodnota" %>

Můžete také kombinovat nastavení více atributů v jedné direktivě:

<% @ direktiva atribut1 = "hodnota1 " atribut2 = "hodnota2" ... atributN = " hodnotaN " %>

Existují tři hlavní typy direktiv: page , která vám umožňuje dělat věci, jako je import tříd, změna nadtřídy servletu a tak dále; include , který umožňuje vložit soubor do třídy servletu při překladu souboru JSP do servletu; a taglib , který vám umožňuje rozšířit mnoho značek o vaše vlastní, které je kontejner JSP schopen interpretovat.

Direktiva stránky JSP

Jak název napovídá, tato direktiva poskytuje atributy pro stránku JSP. Atributy definované v této direktivě jsou vloženy do dané stránky JSP a všech jejích vnořených statických prvků, ať už byly vloženy s direktivou includenebo s akcí jsp:include. Forma směrnice je pagenásledující:

<% @ atribut stránky = " hodnota " %>

Vezměme si jako příklad následující záznam:

<% @ import stránky = java . utilita _ * , com . moje třídy . * buffer = 15 kb %>

Tato direktiva uvádí, že stránka JSP importuje třídy ze dvou balíčků Java , java.utila com.myclassespoté určuje velikost vyrovnávací paměti, která by měla být použita ke zpracování dané stránky JSP.

Dále zvažte atributy direktivy page:

  • import="пакет.class1, пакет.class2, ..., пакет.classN".Umožňuje určit balíčky, které mají být importovány. Toto je jediný atribut, který lze ve stejné direktivě použít vícekrát. Seznam by měl obsahovat všechny třídy Java, které chcete použít a které nejsou součástí původní sady importovaných tříd. Zdrojová sada obsahuje: java.lang.*, javax.servlet.*, javax.servlet.jsp.* и javax.servlet.http.*.Příklad použití atributu import:
<% @ page import = "java.util.Date, javax.text.SimpleDateFormat, com.myclasses.*" %>
  • language="java".Tento atribut je určen k nastavení použitého programovacího jazyka . Výchozí hodnota je "java". Tento atribut je volitelný, ale problém může nastat, pokud poskytovatel JSP kontejneru používá jiné jazyky (například JavaScript ). Příklad záznamu pro tento atribut je následující:
<% @ page language = " java " %>
  • extends="пакет.class".Určuje nadtřídu (nadřazenou třídu) pro vygenerovaný servlet. Typicky je servlet rozšířením původní třídy. Zkušení programátoři mohou tento atribut použít k vytvoření vlastních supertříd. Příklad použití tohoto atributu může vypadat takto:
<% @ page extends = myPackage . HttpExample " %>
  • session="true|false".Tento atribut lze nastavit na hodnotu true nebo false , což určuje, zda se stránka JSP účastní překladu HTTP . Hodnota true(„true“, výchozí hodnota) signalizuje, že předdefinovaná proměnná session(typ HttpSession) by měla být svázána s existující relací, pokud nějaká existuje, jinak je vytvořena a navázána nová relace. Hodnota false("false") určuje, že relace nebudou použity a pokusy o přístup k proměnné sessionpovedou k chybě při překladu stránky JSP na servlet. Příklad použití tohoto atributu může vypadat takto:
<% @ page session = " false " %>
  • buffer="размерkb|none".Tento atribut určuje množství vyrovnávací paměti požadované pro objekt JspWriter , na který odkazuje předdefinovaná proměnná out. Výchozí hodnota závisí na nastavení serveru, ale měla by být větší než 8kb. Hodnota je uvedena buď ve tvaru "sizekb" nebo "none". Pokud nastavíte hodnotu vyrovnávací paměti na none, pak servlet nebude nic ukládat do vyrovnávací paměti a výsledek zapsaný před proměnnou předá outpřímo objektu PrintWriter, který je s objektem poskytnut ServletResponse.. Pokud nastavíte hodnotu vyrovnávací paměti na konkrétní hodnotu, JspWriteruloží data do této paměti, což povede ke zvýšení výkonu. Na rozdíl od objektu může objekt PrintWritervyvolávat JspWritervýjimky IOExceptions. Počáteční hodnota vyrovnávací paměti je 8kB. Příklad záznamu pro tento atribut může vypadat takto:
<% @ pagebuffer = 12 kb % >
  • autoflush="true|false".Tento atribut může být buď true nebo false . Hodnota true(ve výchozím nastavení "true") určuje, že pokud dojde k přetečení vyrovnávací paměti, bude automaticky vymazána. Hodnota false("false"), která se používá zřídka, určuje, že přetečení vyrovnávací paměti by mělo vést k výjimce ( IOExceptions). bufferObvykle jsou atributy a autoflushnastaveny společně v jedné směrnici. Při nastavování hodnoty atributu je buffer="none"nastavení hodnoty falsepro atribut autoflushneplatné. Příklad může vypadat takto:
<% @ page buffer = 16 kb autoflush = true %>
  • isThreadSafe="true|false".Tento atribut může být buď true nebo false . Hodnota true("true", výchozí) určuje normální režim provádění servletu, kdy je současně zpracováváno více požadavků pomocí jediné instance servletu na základě předpokladu, že autor má synchronizovaný přístup k proměnným této instance. Hodnota false("false") signalizuje, že by servlet měl zdědit SingleThreadModel(jednovláknový model), ve kterém sekvenční nebo souběžné požadavky zpracovávají samostatné instance servletu. Jinými slovy, hodnota truezpůsobí, že kontejner odešle na servlet více požadavků najednou, zatímco hodnota způsobí, že falsekontejner bude odesílat požadavky jeden po druhém. Příklad použití vypadá takto:
<% @ page isThreadSafe = false %>
  • info="информация".Určuje řetězec, který lze načíst při použití metody Servlet.getServletInfo().Tato metoda obvykle vrací informace o servletu (jako je autor, verze a autorská práva). Příklad záznamu pro tento atribut může vypadat takto:
<% @ page info = Autor : Petr Ivanovich ; verze : 1.0 % >
  • errorPage="url".Určuje stránku JSP, která je volána, když nastanou nějaké události Throwables, které tato stránka nezpracovává. Pokud na stránce JSP dojde k výjimce a stránka JSP nemá svůj vlastní kód pro vyřešení výjimky, kontejner automaticky přenese řízení na adresu URL , kterou jste zadali jako hodnotu atributu errorPage. Příklad záznamu vypadá takto:
<% @ page errorPage = " / myweb / errors / myerror . jsp " %>
  • isErrorPage="true|false".Tento atribut může být buď true nebo false . Signalizuje, zda lze tuto stránku použít pro zpracování chyb pro jiné stránky JSP nebo ne. Výchozí hodnota je false"false". Příklad použití tohoto atributu může vypadat takto:
<% @ page isErrorPage = true %>
  • contentType="MIME-Тип".Tento atribut nastavuje MIMEtyp výstupu a volitelně můžete nastavit kódování znaků v odpovědi ( odpověď HTML ). Výchozí hodnota MIMEje text/html. Pro názornost můžeme použít následující příklad:
<% @ page contentType = "text/plain" %>

Stejného výsledku můžete dosáhnout pomocí skriptletu:

<% odezvy . setContentType ( "text/prostý" ); %> Zahrnout direktivu JSP

Tato direktiva vám umožňuje zahrnout soubory do servletu při překladu stránky JSP. Použití směrnice vypadá takto:

<% @ include file = "relativní url" %>

Daná adresa URL je obvykle interpretována relativně k JSP stránky, na které je odkaz umístěn, ale stejně jako u jiných relativních adres URL můžete systému sdělit umístění zdroje, o který se zajímáte, vzhledem k adrese webového serveru . domovský adresář přidáním předpony URL se symbolem " / " . S obsahem začleněného souboru se zachází jako s prostým textem JSP a může proto obsahovat prvky, jako je statický HTML , prvky skriptu, direktivy a akce. Mnoho webů například používá na každé stránce malý navigační panel. Kvůli problémům s používáním HTML rámců se tento úkol často řeší umístěním malé tabulky na horní nebo levou polovinu stránky, jejíž HTML kód se pro každou stránku webu mnohokrát opakuje. Direktiva includeje nejpřirozenějším způsobem, jak tento úkol splnit, protože vývojáře šetří noční můrou kopírování HTML do každého jednotlivého souboru. Stává se to takto:

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < html > < head > < title > Testovací stránka </ title > </ head > < body > <% @ include file = "/navbar .html" %> <!-- Specifický fragment této stránky ... --> </ body > </ html >

Všimněte si, že vzhledem k tomu, že direktiva includezahrnuje soubory během překladu stránky, po provedení změn na navigační liště budete muset znovu přeložit všechny stránky JSP, které ji používají. Což je v tomto případě dobrý kompromis, protože navigační lišta se zpravidla mění poměrně zřídka a proces připojení neztrácí na účinnosti. Pokud se zahrnuté soubory mění poměrně často, můžete místo toho použít akci jsp:include. Tato akce zahrnuje soubor při přístupu k JSP.

JSP direktiva taglib

Jak již víte, na stránkách JSP se prvky zapisují pomocí značek (konvenční znaky, štítky, značky). Sadu značek, které může kontejner JSP interpretovat, lze rozšířit o takzvané knihovny značek. Můžete také připojit akce k rozšířené sadě značek, což má za následek rozšíření samotného jazyka JSP. Značky lze rozdělit na standardní a vlastní. Obecný způsob psaní může vypadat takto:

<% @ taglib uri = URI do knihovny značek prefix = předpona znaků %>

Knihovna značek musí být identifikována adresou URI (jedinečný identifikátor zdroje). URI může být absolutní nebo relativní. Jedinečný identifikátor zdroje identifikuje umístění knihovny značek ( TLD ), která definuje vlastní značky této knihovny. Příklad zadání direktivy:

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

Stránka JSP může obsahovat nekonečný počet direktiv taglib, ale každá direktiva musí mít jinou předponu, která definuje obsah knihovny na stránce. Jako předponu můžete použít jakýkoli text, slovo. Zatímco direktivu tagliblze použít kdekoli na stránce JSP, všechny nativní značky, které tyto direktivy používají, musí být použity za nimi.

Akce

Akce JSP používají konstrukce syntaxe XML k řízení provozu servletového stroje. Můžete dynamicky zahrnout soubor, znovu použít JavaBeans , přesměrovat uživatele na jinou stránku nebo vygenerovat HTML pro Java plugin . Všechny tyto akce jsou podrobně popsány níže. Pamatujte, že stejně jako u všech XML , názvy prvků a atributů rozlišují velká a malá písmena. Akce lze rozdělit do dvou skupin: standardní a vytvořené (vlastní, které vytváří programátor). Jsou povoleny následující standardní akce:

  • jsp:declaration  — Deklarace podobná tagu <%! … %>;
  • jsp:  scriptlet - Scriptlet, podobný tagu <% ... %>;
  • jsp:expression  - Výraz, podobný tagu <%= ... %>;
  • jsp:text  - Textový výstup;
  • jsp:useBean  - Najít nebo vytvořit novou instanci JavaBean;
  • jsp:setProperty  - Nastavení vlastností JavaBean;
  • jsp:getProperty  - Vložení vlastnosti JavaBean do výstupního proudu;
  • jsp:include  – Zahrnuje soubor v době požadavku na stránku;
  • jsp:forward  - Přesměruje požadavek na jinou stránku;
  • jsp:param  - Přidá parametry do objektu požadavku, jako je forward, include, plugin.;
  • jsp:plugin  - Vygeneruje kód (v závislosti na typu použitého prohlížeče), který vytvoří značkuOBJECTneboEMBEDpro Java plugin;
  • jsp:params  – Seskupuje parametry v rámci značky jsp:plugin;
  • jsp:fallback  – Určuje obsah, který má klientský prohlížeč použít, pokud se plug-in nepodaří spustit. Používá se uvnitř prvku pluginu.
jsp:useBean action

Tato akce vám umožní načíst JavaBean pro pozdější použití na stránce JSP. Tato funkce vám umožňuje znovu používat třídy Java bez obětování výhod poskytovaných servlety JSP. Kromě toho je to jeden způsob, jak odstranit velkou část zpracování Java ze stránky JSP. Pokud přenesete zpracování Java ze stránky JSP na JavaBean, pak lze tyto funkce použít na jiných stránkách JSP. Nejjednodušší syntaxe pro specifikaci beanu, který se má použít, je:

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

Obvykle to znamená "vytvoření nové instance objektu třídy určené třídou a její přidružení k proměnné pojmenované podle id ". Můžete však nastavit atribut scope (přebírá hodnoty page|request|session|application, pagepro stránku, requestpro požadavky, sessionpro relace nebo dialogy, applicationpro aplikaci), který je spojen beannejen s aktuální stránkou. V tomto případě je užitečné získat odkazy na existující beansa akce jsp:useBeanvytvoří instanci nového objektu pouze v případě, že neexistuje žádný objekt se stejnými hodnotami id a scope . Nyní, když máte bean, můžete upravit jeho vlastnosti pomocí akce jsp:setPropertynebo pomocí skriptletu a explicitně zavolat metodu objektu s názvem proměnné zadaným dříve prostřednictvím atributu id . Připomeňme si, že když u fazolí říkáte „tato fazole má vlastnost typu X pojmenovaná foo“, skutečně myslíte „tato třída má metodu getFoo, která vrací data typu X, a jinou metodu, která bere X setFoojako parametr.“ Akce jsp:setPropertyje podrobněji popsána v další části, ale prozatím byste si měli pamatovat, že můžete buď explicitně nastavit hodnotu nastavením atributu param tak, aby získal hodnotu z odpovídajícího parametru dotazu, nebo jednoduše vyjmenovat vlastnosti a získat hodnoty z parametry dotazu se stejnými názvy jako vlastnosti. Hodnoty existujících vlastností můžete získat pomocí JSP výrazů nebo skriptletů voláním příslušné metody getXxxnebo (nejčastěji) pomocí akce jsp:getProperty.

Třída přidělená beanu musí být v normálním adresáři třídy serveru, nikoli v části vyhrazené pro třídy, které jsou po úpravách automaticky znovu načteny. Například pro Java Web Server musí být všechny použité třídy umístěny v adresáři classesnebo souboru .jar v adresáři lib, nikoli v adresáři servlets. Níže je jednoduchý příklad, který načte beana nastaví/získá jednoduchý parametr řetězce.

BeanTest.jsp

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < html > < head > < title > Opětovné použití JavaBeans v JSP < / title > < / head > < body > < h1 > Opětovné použití JavaBeans v JSP </ h1 > < jsp : useBean id = "test" class = "hall.SimpleBean" /> < jsp : setProperty name = "test" property = "message" value = "Ahoj WWW" /> < p > Zpráva : < jsp : getProperty name = "test" property = "message" /> </ p > </ body > </ html >

SimpleBean.java

hala balíčků ; public class SimpleBean { private String message = "Text zprávy není nastaven" ; public String getMessage () { return ( message ); } public void setMessage ( String message ) { this . zpráva = zpráva _ } }

Několik dalších podrobností o použití jsp:useBean. Nejjednodušší způsob, jak jej použít bean , je použít konstrukci:

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

načíst beana následně použít jsp:setPropertya jsp:getPropertyupravit a získat jeho vlastnosti (parametry). Existují však dva další způsoby. Nejprve můžete použít formát kontejneru, konkrétně:

< jsp : useBean ... > Tělo </ jsp : useBean >

aby bylo zajištěno, že tělo bude spuštěno pouze při beanprvním vytvoření instance, nikoli při nalezení a použití existující instance bean. Jak je uvedeno níže, beanslze jej sdílet, takže ne každý výraz jsp:useBeanvede k nové instanci bean. Za druhé, kromě id a class můžete použít tři další atributy: scope , type a beanName . Tyto atributy jsou popsány níže:

  • id  – Udává název proměnné, která odkazuje nabean. Pokud jej lze naléztbeanse stejnými hodnotamiidascope, použije se dříve vytvořený objekt namísto vytvoření nové instance;
  • class  - specifikuje úplný název balíčkubean;
  • rozsah  - určuje rozsah, ve kterémbeanmá být dostupný. Může nabývat čtyř platných hodnot: page , request , session a application . Výchozí je stránka , což znamená, žebeanje k dispozici pouze na aktuální stránce (hostované naPageContextaktuální stránce). Hodnota požadavku znamená, žebeanje k dispozici pouze pro aktuální požadavek klienta (hostovaný v objektuServletRequest). Hodnota relace znamená, že objekt je dostupný všem stránkám po dobu životnosti aktuální stránkyHttpSession. A konečně aplikace value znamená, že je dostupná pro všechny stránky používající stejnýServletContext. Důvod, proč je tento atribut potřebný, je ten, žejsp:useBeanzpůsobí vytvoření nové instance objektu, pokud neexistuje žádný existující objekt se stejnýmidascope. V opačném případě se použije již existující objekt a všechny prvkyjsp:setParameternebo jakékoli prvky mezi značkamijsp:useBeanjsou ignorovány.
  • typ  - označuje typ proměnné, která odkazuje na objekt. Musí odpovídat názvu třídy, nadtřídy nebo implementovaného rozhraní. Název proměnné je určen pomocí atributuid.
  • beanName  - dává jménobean, které bude metoda použitainstantiate. Můžete zadattypeabeanNamea atribut vynechatclass.
action jsp:setProperty

Můžete použít jsp:setPropertydříve popsané beans. Můžete to udělat dvěma způsoby. Nejprve můžete použít jsp:setPropertypo, ale mimo prvek jsp:useBean, jak je znázorněno v příkladu:

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

V tomto případě se jsp:setPropertyprovede bez ohledu na to, zda byla nalezena existující instance beannebo byla vytvořena nová instance. Další možností je umístit jsp:setPropertydo těla prvku jsp:useBean, jak je znázorněno v jiném příkladu:

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

To jsp:setPropertyse provádí pouze v případě, že byla vytvořena nová instance objektu, nikoli v případě, že je nalezena existující instance. Akce jsp:setPropertypřijímá následující čtyři atributy:

  • name  - Tento povinný atribut slouží k nastaveníbeanvlastností, které budou nastaveny. Prvekjsp:useBeanmusí předcházet použití prvkujsp:setProperty.
  • property  – Tento povinný atribut nastavuje vlastnost, kterou chcete nastavit. Existuje však zvláštní případ: hodnota " * " znamená, že všechny parametry dotazu, jejichž názvy se shodují s názvy vlastnostíbean, budou předány odpovídající metodě nastavení vlastností.
  • value  – Tento volitelný atribut nastavuje hodnotu vlastnosti. Hodnoty řetězce jsou automaticky převedeny na numeric, boolean , boolean , byte , byte , char a Character pomocí standardní metodyvalueOfodpovídající třídy. Například hodnota"true"pro vlastnostbooleanneboBooleanbude převedena pomocí metodyBoolean.valueOfa hodnota "42" pro vlastnostintneboIntegerbude převedena pomocí metodyInteger.valueOf. Atributy value a param nemůžete používat, ale můžete se rozhodnout je nepoužívat vůbec. Viz popis atributu param níže.
  • param  – Tento volitelný atribut nastavuje parametr dotazu použitý k získání vlastnosti. Pokud tento parametr v aktuálním požadavku chybí, neproběhne žádná akce: systém nepředá hodnotunullmetodě, která nastavuje vlastnosti. Je tedy přijatelné použítbeanvýchozí vlastnosti a přepsat je pouze v případě, že to vyžadují parametry požadavku. Například následující fragment znamená následující: "nastav vlastnostnumberOfItemspodle hodnoty parametru požadavkunumItemsa pokud takový parametr v požadavku není, neprovede se žádná akce."
< jsp : setProperty name = "orderBean" property = "numberOfItems" param = "numItems" />

Pokud nepoužijete ani valueani param, je to stejné, jako byste zadali jméno, které paramodpovídá názvu property. Můžete použít tento princip automatického používání vlastností požadavku, jejichž názvy se shodují s názvy vlastností, a jít dále nastavením názvu vlastnosti na " * " a vynecháním parametrů value a param . V tomto případě server zpracuje platné vlastnosti a parametry dotazu pro shodu identických jmen. Následuje příklad, který se používá beank vytvoření tabulky prvočísel. Pokud parametr numDigitsv datech požadavku existuje, je předán do bean numDigits. Podobně pro numPrimes. JspPrimes.jsp

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < html > < head > < title > Opětovné použití JavaBeans v JSP < / title > < / head > < body > < h1 > Opětovné použití JavaBeans v JSP </ h1 > < jsp : useBean id = "primeTable" class = "hall.NumberedPrimes" /> < jsp : setProperty name = "primeTable" property = "numDigits" /> < jsp : setProperty name = "primeTable" property = "numPrimes" /> < p > Několik prvočísel znaků < jsp : getProperty name = " primeTable " property = "numDigits" /> : < jsp : getProperty name = "primeTable" property = "numberedList" /> </ p > </ body > </ html > jsp:getProperty action

Tento prvek určuje hodnotu vlastnosti bean, převádí ji na řetězec a odesílá do výstupního proudu. Pro provedení akce je třeba nastavit dva atributy: název bean, který je v akci přednastaven jsp:useBean, a název vlastnosti, jejíž hodnotu je třeba určit. Níže je uveden příklad použití této akce:

< jsp : useBean id = "itemBean" ... /> ... < UL > < LI > Počet položek : < jsp : getProperty name = "itemBean" property = "numItems" / > < LI > Jednotková cena : < jsp : getProperty name = "itemBean" property = "unitCost" /> </ UL > jsp:include action

Tato akce umožňuje vložit obsah souborů do vygenerované stránky. Syntaxe akce:

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

Na rozdíl od direktivy include, která vkládá soubor během fáze překladu stránky JSP, tato akce vloží soubor, když je stránka požadována. To má za následek určitou ztrátu efektivity a eliminuje možnost JSP kódu ve vloženém souboru, ale poskytuje významnou výhodu ve flexibilitě.

Příklad vložení obsahu čtyř souborů na stránku JSP:

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" > < html > < head > < title > Novinky </ title > </ head > < body > < h1 > Novinky </ h1 > < p > Zde jsou výňatky z našich čtyř nejoblíbenějších článků : </ 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 > </ tělo > </ html > jsp:akce vpřed

Tato akce vám umožňuje předat požadavek jiné statické HTML stránce, servletu nebo stránce JSP. Na rozdíl od akce jsp:includese zpracování aktuální stránky ukončí. Používá jeden atribut page, který musí obsahovat relativní URL , na základě které je objekt řazen request. K původním parametrům dotazu předaným na jinou stránku můžete pomocí akce jsp:parampřidat další parametry . Hodnota atributu pagemůže být buď statická hodnota, nebo hodnota vypočítaná během požadavku, jak je znázorněno v následujících dvou příkladech:

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

Pomocí akce jsp:forwardmůžete také přenést řízení na jinou stránku, ale s podmínkou, že před voláním této akce nebylo nic zapsáno do odchozí vyrovnávací paměti (jinak bude vyvolána výjimka IllegalStateException).

jsp:param action a jsp:params action

Tato akce poskytuje informace o typu názvu/hodnoty. Tato akce se používá hlavně spolu s již známými akcemi jsp:includea jsp:forward. Kromě toho jej lze použít také společně s akcí jsp:plugin. V ostatních případech na použití této akce nezáleží. Používá jsp:paramse s akcemi jsp:includea jsp:forwardpředává původní objekt na nové stránky request, které budou rozšířeny o nové parametry. Pokud zadáte nové hodnoty pro již existující parametry, budou to nové hodnoty, které budou mít přednost. Pomocí akce jsp:paramsmůžete nastavit několik parametrů najednou

jsp:plugin action

Tato akce vám umožňuje vložit prvek OBJECT nebo EMBED (v závislosti na typu používaného prohlížeče), který je nutný ke spuštění apletů, které používají plugin Java. Jinými slovy, tato akce slouží ke generování HTML pro vložení Java API do stránky JSP. Stejným způsobem můžete vložit URL ke stažení modulů pro Java API od JavaSoft, které poskytuje možnost spouštět aplety uvnitř prohlížeče. Vstupní formulář pro tuto akci vypadá takto:

< jsp : plugin type = "bean|applet" code = "soubor třídy" codebase = "Objekt CodeBase" align = "location" archive = "seznam archivů" height = "height" hspace = "horizontální prostor" jreversion = "verze" name = "název komponenty" vspace = "vertikální mezera" width = "width" nspluginurl = "url" iepluginurl = "url" > < jsp : params > < jsp : param name = "name1" value = "value1" /> < jsp : název parametru = "název2" hodnota = "hodnota2" /> ... < jsp : název parametru = "názevN" hodnota = "hodnotaN" /> </ jsp : params > < jsp : záložní > </ jsp : záložní > </ jsp : plugin >

Podívejme se na příklad použití této akce v kódu appletu:

< jsp : plugin type = "applet" code = "Blink.class" width = 300 height = 100 > < jsp : params > < jsp : param name = lbl value = "Ano, je to chutnější než jen nakrájený chléb! " /> < jsp : param name = speed value = "4" /> < jsp : params > < jsp : fallback > Váš prohlížeč z neznámého důvodu nemůže spustit tento applet </ fallback > < / jsp : plugin >

Příklad stránky JSP využívající syntaxi XML

<? xml verze = "1.0" kódování = "UTF-8" ?> < jsp : root xmlns : jsp = "http://java.sun.com/JSP/Page" verze = "2.0" > < jsp : direktiva . page contentType = "application/xhtml+xml; charset=UTF-8" /> < jsp : výstup doctype - root - element = "html" doctype - public = "-//W3C//DTD XHTML 1.1//EN" doctype - system = "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" vynechat - xml - deklarace = "true" /> < html xmlns = "http://www.w3.org/ 1999/xhtml" > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=UTF-8" /> < title > Název stránky </ title > </ head > < tělo > < h1 > Nadpis </ h1 > < p > Text </ p > < jsp : scriptlet > out . print ( Calendar . getInstance ( request . getLocale ()). getFirstDayOfWeek () == Calendar . SUNDAY ? "Ve vaší zemi týden začíná nedělí" : "Ve vaší zemi týden nezačíná nedělí" ); </ jsp : scriptlet > </ body > </ html > </ jsp : root >

Viz také

Odkazy