JavaServer Pages (JSP) je standardní technologie Java, která vám umožňuje psát dynamické stránky založené na datech pro vaše webové aplikace Java. JSP je postaveno na specifikaci Java Servlet. Tyto dvě technologie obvykle spolupracují, zejména ve starších webových aplikacích Java. Z pohledu kódování je nejzřetelnějším rozdílem mezi nimi to, že u servletů píšete kód Java a poté do tohoto kódu vložíte označení na straně klienta (například HTML), zatímco u JSP začnete skriptem nebo označením na straně klienta a poté vložíte Značky JSP pro připojení vaší stránky k backendu Java.
JSP také úzce souvisí s JSF (JavaServer Faces), specifikací Java pro vytváření webových aplikací MVC (model-view-controller). JSP je relativně jednodušší a starší technologie než JSF, což je standard pro webové rámce Java, jako jsou Eclipse Mojarra, MyFaces a PrimeFaces. I když není neobvyklé vidět JSP jako frontend pro starší aplikace JSF, Facelets je preferovaná technologie zobrazení pro moderní implementace JSF.
I když JSP nemusí být vaší první volbou pro vytváření dynamických webových stránek, jedná se o základní webovou technologii Java. Stránky JSP se vytvářejí relativně rychle a snadno a bezproblémově interagují s servlety Java v kontejneru servletů, jako je Tomcat. S JSP se setkáte ve starších webových aplikacích Java a čas od času se vám může hodit pro vytváření jednoduchých, dynamických webových stránek Java. Jako vývojář Java byste měli alespoň znát JSP.
Tento článek bude krátkým úvodem do stránek JavaServeru, včetně JSTL (Standard Tag Library). Příklady ukazují, jak napsat jednoduchou stránku HTML, vložit značky JSP pro připojení k servletu Java a spustit stránku v kontejneru servletu.
V předchozích článcích této řady se dozvíte více o servletech Java a tvářích JavaServer.
JSP v Jakartě EE
Po vydání Java EE 8 přesunula společnost Oracle správu Java Enterprise Edition (Java EE) do nadace Eclipse. Do budoucna byla podniková platforma Java přejmenována na Jakarta EE. Spolu se specifikacemi Java Servlet a JSF je JSP jednou z webových technologií Java zahrnutých pro trvalou podporu a upgrady v Jakartě EE.
Psaní stránek JSP
Jednoduchá stránka JSP (.jsp) se skládá ze značek HTML vložených do značek JSP. Když je soubor zpracován na serveru, HTML se vykreslí jako zobrazení aplikace, webová stránka. Integrované značky JSP budou použity k volání kódu a dat na straně serveru. Diagram na obrázku 1 ukazuje interakci mezi HTML, JSP a serverem webové aplikace.

Výpis 1 zobrazuje jednoduchou stránku JSP.
Výpis 1. Jednoduchá stránka JSP
$ {2 * 2} by se mělo rovnat 4
V seznamu 1 uvidíte blok HTML, který obsahuje a JSP výraz, což je instrukce k serveru Java napsaná pomocí jazyka Expression Language (EL). Ve výrazu „${2 * 2}
„,“${}
"je syntaxe JSP pro interpolaci kódu do HTML. Po provedení bude JSP vydávat výsledky provádění všeho, co je uvnitř výrazu. V tomto případě bude výstupem číslo 4.
JSP v kontejneru servletu
Stránky JSP musí být rozmístěny uvnitř kontejneru servletů Java. Chcete-li nasadit webovou aplikaci Java založenou na JSP a servletech, zabalíte své soubory .jsp, kód Java a metadata aplikace do souboru .war, což je jednoduchý soubor .zip s konvenční strukturou pro webové aplikace.
Jakmile načtete JSP do kontejneru servletu, bude zkompilován do servletu. JSP a servlety Java sdílejí podobné vlastnosti, včetně schopnosti přistupovat k objektům požadavku a reagovat na ně. Apache Tomcat 9x je referenční implementací pro specifikace Servlet 4.0 a JSP 2.3. (Upozorňujeme, že aktualizace mezi JSP 2.2 a 2.3 jsou relativně malé.)
Servletový kontejner vs. aplikační server
Ve světě Java, a servletový kontejner, známý také jako webový server, je jako lite (pivní) verze aplikačního serveru. Kontejner servletu zpracovává interakce požadavků a odpovědí a umožňuje těmto interakcím rozhraní s podmnožinou podnikových funkcí Java pro webové aplikace. Aplikační server Java obsahuje kontejner servletu jako součást celého podnikového zásobníku Java, včetně EJB, JPA, JMS a dalších.
Příklad aplikace pro JSP
Použijeme ukázkovou aplikaci v Tomcatu, abychom vám pomohli začít s JavaServer Pages. Pokud ještě nemáte nainstalovaný Tomcat, přejděte na stránku stahování Tomcat a vyberte instalaci Tomcat pro váš operační systém. V době psaní tohoto článku je Tomcat 9 aktuální verzí kompatibilní s Servlet 4.0 a JSP 2.3.
Tomcat můžete nainstalovat jako službu Windows nebo jej spustit z příkazového řádku pomocí /bin/catalina.sh start
nebo /bin/catalina.bat
. Ať tak či onak, spusťte Tomcat a přejděte na localhost: 8080
pro zobrazení uvítací stránky Tomcat zobrazené na obrázku 2.

Implicitní objekty v Tomcat
Na uvítací stránce Tomcat klikněte na ikonu Příklady klikněte na odkaz Příklady JSP.
Dále otevřete Provádění implicitních objektů webová aplikace. Obrázek 3 ukazuje výstup pro tuto aplikaci. Věnujte chvíli studiu tohoto výstupu.

Parametry požadavku
Implicitní objekty jsou vestavěné objekty přístupné prostřednictvím stránky JSP. Jako vývojář webových stránek budete tyto objekty používat k vytváření přístupu k podobným věcem parametry požadavku, což jsou data odeslaná z prohlížeče při vystavení požadavku HTTP. Zvažte adresu URL prohlížeče pro implicitní objekty:
//localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar
Param je ? foo = bar
, a můžete to vidět ve výstupu na webové stránce, kde tabulka ukazuje „EL Expression“ a hodnota je „bar“. Chcete-li to vyzkoušet, změňte adresu URL na //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=zork, udeřil Enter, a uvidíte, že se změna projeví ve výstupu.
Tento příklad je velmi jednoduchým úvodem do používání značek JSP pro přístup k parametrům požadavku na straně serveru. V tomto případě stránka JSP používá vestavěný (implicitní) objekt s názvem param
pro přístup k parametrům požadavku webové aplikace. The param
objekt je k dispozici uvnitř syntaxe výrazu JSP, kterou jste viděli v seznamu 1.
V tomto příkladu jsme použili výraz k provedení nějaké matematiky: ${2 * 2}
, který výstup 4
.
V tomto příkladu se výraz používá pro přístup k objektu a poli na tomto objektu: $ {param.foo}
.
JSP ve webové aplikaci
Na stránce Implicitní objekty klikněte na šipku zpět a poté na Zdroj odkaz. To vás dovede k kódu JSP pro webovou aplikaci Implicit Objects, který je zobrazen ve výpisu 2.
Výpis 2. Kód JSP pro webovou aplikaci Implicit Objects
Expresní jazyk JSP 2.0 - implicitní objekty
Tento příklad ilustruje některé implicitní objekty dostupné v Expression Language. K dispozici jsou následující implicitní objekty (ne všechny zde ilustrované): - pageContext - objekt PageContext
- pageScope - mapa, která mapuje názvy atributů se stránkami na jejich hodnoty
- requestScope - mapa, která mapuje názvy atributů s rozsahem požadavků na jejich hodnoty
- sessionScope - mapa, která mapuje názvy atributů s rozsahem relace na jejich hodnoty
- applicationScope - mapa, která mapuje názvy atributů s rozsahem aplikace na jejich hodnoty
- param - Mapa, která mapuje názvy parametrů na jednu hodnotu parametru String
- paramValues - Mapa, která mapuje názvy parametrů na řetězec [] všech hodnot pro tento parametr
- záhlaví - mapa, která mapuje názvy záhlaví na jednu hodnotu záhlaví řetězce
- headerValues - Mapa, která mapuje názvy hlaviček na řetězec [] všech hodnot pro tuto hlavičku
- initParam - mapa, která mapuje názvy parametrů inicializace kontextu na jejich hodnotu parametru String
- cookie - Mapa, která mapuje názvy souborů cookie na jeden objekt Cookie.
Změňte parametr foo =EL výraz Výsledek \ $ {param.foo} $ {fn: escapeXml (param ["foo"])}} \ $ {param ["foo"]} $ {fn: escapeXml (param ["foo"])}} \ $ {záhlaví ["hostitel"]} $ {fn: escapeXml (záhlaví ["hostitel"])} \ $ {záhlaví ["přijmout"]} $ {fn: escapeXml (záhlaví ["přijmout"])} \ $ {header ["user-agent"]} $ {fn: escapeXml (záhlaví ["user-agent"])}}
Funkce JSP
Pokud jste obeznámeni s HTML, měl by vypadat Výpis 2 docela dobře. Máte očekávané HTML
prvky, následované ${ }
Syntaxe výrazu JSP zavedená v seznamu 1. Všimněte si však hodnota pro param.foo
:
. „$ {fn: escapeXml (param ["foo"])}} fn: escapeXML ()
"je funkce JSP.
A Funkce JSP zapouzdřuje část opakovaně použitelných funkcí. V tomto případě je funkcí uniknout XML. JSP nabízí řadu funkcí a můžete si je také vytvořit sami. Chcete-li použít funkci, importujete její knihovnu na stránku JSP a poté funkci zavoláte.
V seznamu 2 je uniknoutXML
funkce je součástí řádku:
Syntaxe je docela jasná: importuje požadované funkce a přiřadí jim předponu (v tomto případě „fn“), kterou lze použít ve všech následujících výrazech.
Knihovna standardních značek JSP (JSTL)
The import
linka v seznamu 2 hovorů taglib
, což je zkratka knihovna značek, nebo (v tomto případě) JSP Standard Tag Library (JSTL). Knihovny značek definují opakovaně použitelné bity funkcí pro JSP. JSTL je standardní knihovna tagů, která obsahuje kolekci taglibs dodávaných s každou implementací servletu a JSP, včetně Tomcat.
Knihovna „funkcí“ je pouze jedním z taglibs obsažených v JSTL. Dalším běžným taglib je jádro
knihovna, kterou importujete voláním:
Stejně jako „fn“ je označení „c“ konvenční a uvidíte jej na většině stránek JSP.
Zabezpečení stránek JSP
Příklad značky z hlavní knihovny je
který vydává značka s XML již unikla. Tato funkce je důležitá, protože výstup obsahu přímo na webovou stránku prostřednictvím
$ {proměnná}
otevírá dveře útokům vstřikování skriptů. Tato jednoduchá funkce slouží k ochraně webových stránek před takovými útoky.
Základní knihovna také obsahuje různé značky pro iteraci a řízení toku (jako manipulace IF / ELSE).
Klasifikace značek JSTL
V JSTL je zahrnuto pět sad značek, z nichž každá je navržena pro konkrétní oblast funkcí webových aplikací:
- JSTL jádro: Řešení logiky a průběhu provádění; konvenční značka: "
C
" - Formátování JSTL: Práce s formátováním (jako jsou data) a internacionalizace; konvenční značka: "
fmt
". - JSTL SQL: Řešení dotazů na databáze SQL (obvykle se to ve vrstvě zobrazení nedoporučuje); konvenční značka: "
sql
". - JSTL XML: Práce s dokumenty XML; konvenční značka: "
X
". - Funkce JSTL: Zabývání se primárně manipulacemi s řetězci; konvenční značka: "
fn
".
Volání taglibs na stránkách JSP
Nyní, když máte základní informace o JSP, pojďme změnit ukázkovou aplikaci. Chcete-li začít, vyhledejte ve své instalaci Tomcat aplikaci Implicit Object. Cesta je: apache-tomcat-8.5.33 / webapps / examples / jsp / jsp2 / el
.
Otevřete tento soubor a vyhledejte funkce
zahrnout:
těsně pod tento řádek přidejte nový řádek:
Stiskněte Return a přidejte další nový řádek:
Nyní stránku znovu načtěte //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.
Ve výstupu by se měly projevit vaše aktualizace.