Přeskočit na obsah

JavaServer Pages: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
Funkce návrhy odkazů: Přidány 3 odkazy.
 
(Není zobrazeno 29 mezilehlých verzí od 23 dalších uživatelů.)
Řádek 1: Řádek 1:
{{Sloh}}
{{Infobox programovací jazyk
{{Infobox - programovací jazyk
|název = JSP
|logo =
| název = JSP
|paradigma =
| vznik = 1999
⚫
| vývojář = [[Oracle Corporation|Oracle]] (dříve [[Sun Microsystems|Sun]])
|vznik = 1999
| poslední verze = 2.1
|autor =
| datum poslední verze = leden 2006
⚫
|vývojář = [[Oracle]] (dříve [[Sun Microsystems|Sun]])
⚫
| web = [http://www.oracle.com/technetwork/java/jsp-138432.html Oficiální stránky (anglicky)]
|poslední_verze = 2.1
|datum_poslední_verze = leden 2006
|poslední_testovací_verze =
|datum_poslední_testovací_verze =
|typování =
|implementace =
|dialekty =
|ovlivněno =
|ovlivnil =
|operační_systém =
|licence =
⚫
|web = [http://www.oracle.comtechnetworkjavajsp-138432.html Oficiální stránky (anglicky)]
}}
}}
⚫
'''JavaServer Pages''' ('''JSP''') je technologie pro vývoj hlavně dynamických [[HyperText Markup Language|HTML]] stránek založená na jazyce [[Java (programovací jazyk)|Java]]. Technologii JSP vyvinula společnost Sun Microsystems, která byla později koupena firmou Oracle. Při tvorbě se tedy používá primárně HTML a&nbsp;Java. Do kódu HTML se vkládá Java. Odděluje se od HTML takto: <tt><% .. Java kód .. %></tt> a tyto bloky se nazývají skriptlety. Na straně serveru se tedy vloží vygenerovaný HTML místo Javy v souboru. Jde o podobný princip, jako u [[PHP]]. [[Přípona souboru|Přípona souborů]] je <tt>.jsp</tt>.

== Životní cyklus JSP ==
V okamžiku requestu ze strany klienta na server, si web container zkontroluje zdali je už vytvořený Servlet k dané JSP stránce. Pokud ne, tak vytváří Servlet. Pokud daný Servlet najde, tak kontroluje staří obou souborů a pokud je JSP stránka mladší, tak Servlet vytvoří znovu. Pokud ne, tak pro zlepšení výkonu použije již existující Servlet. Životní cyklus JSP se skládá ze sedmi částí:
# Překlad JSP
# Kompilace JSP
# Classloading – načte korespondující Servlet třídu
# Instantiation – připraví Servlet třídu
# Inicializace – <tt>jspInit()</tt>
# Zpracování požadavku (Request) – <tt>jspService()</tt>
# Zahození objektu – <tt>jspDestroy()</tt>


⚫
'''JavaServer Pages''' ('''JSP''') je jazyk pro psaní dynamických HTML stránek založený na jazyce Java. Vyvinul ji v [[Sun Microsystems|Sun]], ale pak ji koupila firma [[Oracle]]. Při tvorbě se tedy používá primárně [[HyperText Markup Language|HTML]] a [[Java]]. Do kódu HTML se vkládá Java. Odděluje se od HTML takto : <% .. Java kód .. %> a tyto bloky se nazývají skriptlety. Na straně serveru se tedy vloží vygenerovaný HTML místo Javy v souboru. Jde o podobný princip, jako u PHP. Přípona souborů je ''.jsp''.
== Výhody ==
== Výhody ==
Mezi hlavní výhody JSP patří možnost využít všech možností, co nabízí Servlety a navíc implicitních objektů, předdefinovaných tagů, Expression Language (EL) a vlastních tagů.
Mezi hlavní výhody JSP patří možnost využít všech možností, co nabízí Servlety a navíc implicitních objektů, předdefinovaných tagů, Expression Language (EL) a vlastních tagů.

== JSP API ==
== JSP API ==
Všechny vygenerované Servlety musí implementovat dvě rozhraní. Prvním je JspPage interface, z kterého implementuje dvě metody z životního cyklu:
Všechny vygenerované Servlety musí implementovat dvě rozhraní. Prvním je JspPage interface, z kterého implementuje dvě metody z životního cyklu:
* public void jspInit() - metoda je volána při první requestu, stejně jako metoda init() u Servlet rozhraní
* <tt>public void jspInit()</tt> – metoda je volána při prvním requestu, stejně jako metoda <tt>init()</tt> u&nbsp;Servlet rozhraní
* public void jspDestroy() - metoda je volána na konci životního cyklu JSP, kdy je stránka zahozena
* <tt>public void jspDestroy()</tt> – metoda je volána na konci životního cyklu JSP, kdy je stránka zahozena
Z druhého rohrazení, HttpJspPage, dostává metodu:
Z druhého rozhraní, <tt>HttpJspPage</tt>, dostává metodu:
* public void _jspService() - metoda je volána při každém požadavku na JSP stránku, co přijde do web containeru (webový, aplikační server), metoda nemůže být přepsána (@Override).
* <tt>public void _jspService()</tt> – metoda je volána při každém požadavku na JSP stránku, co přijde do web containeru (webový, aplikační server), metoda nemůže být přepsána (<tt>@Override</tt>).

== Implicitní objekty ==
== Implicitní objekty ==
Web container vytváří 9 implicitních objektů, které jsou dostupné pro všechny JSP stránky:
Web container vytváří devět implicitních objektů, které jsou dostupné pro všechny JSP stránky:
* out - JspWriter
* out – <tt>JspWriter</tt>
* request - HttpServletRequest
* request – <tt>HttpServletRequest</tt>
* response - HttpServletResponse
* response – <tt>HttpServletResponse</tt>
* config - ServletConfig
* config – <tt>ServletConfig</tt>
* application - ServletContext
* application – <tt>ServletContext</tt>
* session - HttpSession
* session – <tt>HttpSession</tt>
* pageContext - PageContext
* pageContext – <tt>PageContext</tt>
* page - Object
* page – <tt>Object</tt>
* exception - Throwable
* exception – <tt>Throwable</tt>


== Tagy ==
== Tagy ==


=== Scriptlet tag ===
=== Scriptlet tag ===
Syntax: <% ... %>
Syntax: <tt><% … %></tt>


Využívá se pro exekuci Java kódu v JSP a může deklarovat proměnné(uvnitř service() metody).
Využívá se pro exekuci Java kódu v JSP a může deklarovat proměnné (uvnitř metody <tt>service()</tt>).


=== Expression tag ===
=== Expression tag ===
Syntax: <%= ... %>
Syntax: <tt><%= … %></tt>


Vypisuje output stram bez potřeby použití out.print().
Vypisuje output stream bez potřeby použití <tt>out.print()</tt>.


=== Declaration tag ===
=== Declaration tag ===
Syntax: <%! ... %>
Syntax: <tt><%! … %></tt>


Deklaruje objekty a metody mimo service() metodu, takže nezabírají paměť při každém volání.
Deklaruje objekty a metody mimo metodu <tt>service()</tt>, takže nezabírají paměť při každém volání.


== Direktivy - JSP Directives ==
== Direktivy - JSP Directives ==
JSP Directives jsou zprávy, které říkají web containeru, jak má přeloži JSP stránku do Servletu.
JSP Directives jsou zprávy, které říkají web containeru, jak má přeloži JSP stránku do Servletu.


=== Page directives ===
=== Page directives ===
Syntax: <%@ page attribute="value" %>
Syntax: <tt><%@ page attribute="value" %></tt>


Definují atributy pro celou JSP stránku.
Definují atributy pro celou JSP stránku.
# import - Improtuje třídu, rozhraní nebo obsah celého balíčku.
# import – Importuje třídu, rozhraní nebo obsah celého balíčku.
# contentType - Definuje MIME (Multipurpose Internet Mail Expression) - defaultní hodnota "text/html; charset=ISO-8859-1".
# contentType – Definuje MIME (Multipurpose Internet Mail Expression) – výchozí hodnota „text/html; charset=ISO-8859-1“.
# extend - Definuje rodičovskou třídu.
# extend – Definuje rodičovskou třídu.
# info - Nastavuje informace, které vrací metoda getServletInfo().
# info – Nastavuje informace, které vrací metoda <tt>getServletInfo()</tt>.
# buffer - Nastavuje velikost v kilobytech bufferu, který zpracováva výstup generovaný z JSP stránky - defaultní hodnota 8 Kb.
# buffer – Nastavuje velikost v kilobytech bufferu, který zpracováva výstup generovaný z JSP stránky – výchozí hodnota 8&nbsp;kb.
# language - Specifikuje skriptovací jazyk použitý v JSP - defaultní hodnota "java".
# language – Specifikuje [[skriptovací jazyk]] použitý v JSP – výchozí hodnota „java“.
# isElIgnored - Ignoruje Expression Language na stránce – defaultně "false“.
# isElIgnored – Ignoruje Expression Language na stránce – defaultně „false“.
# isThreadSafe - Servlety i JSP jsou defaultně vláknově bezpečné, aby se mohli jednotlivé requesty zpracovávat paralelně. Při nastavení "false" jsou requesty serializovány.
# isThreadSafe – Servlety i JSP jsou defaultně vláknově bezpečné, aby se mohli jednotlivé requesty zpracovávat paralelně. Při nastavení „false“ jsou requesty serializovány.
# errorPage - Pokud dojde k chybě, tak dojde k přesměrování na definovanou stránku.
# errorPage – Pokud dojde k chybě, tak dojde k přesměrování na definovanou stránku.
# isErrorPage – Definuje, že tato stránka je errorPage
# isErrorPage – Definuje, že tato stránka je errorPage


=== Include directive ===
=== Include directive ===
Syntax: <%@ include file="resourceName" %>
Syntax: <tt><%@ include file="resourceName" %></tt>


Se používá pro vkládání obsahu z různých zdrojů, jako jsou JSP, HTML nebo textové soubory. Obsah je do stránky vložen pouze jednou a to  v době překladu, takže je vhodnější vkládat statické zdroje. Velká výhoda je znovu použitelnost kódu při vkládání HTML stránek.
Se používá pro vkládání obsahu z různých zdrojů, jako jsou JSP, HTML nebo [[Textový soubor|textové soubory]]. Obsah je do stránky vložen pouze jednou a to v době překladu, takže je vhodnější vkládat statické zdroje. Velká výhoda je znovu použitelnost kódu při vkládání HTML stránek.


=== Taglib directive ===
=== Taglib directive ===
Syntax: <%@ taglib uri="uriOfTheTagLibrary" prefix="prefix" %>
Syntax: <tt><%@ taglib uri="uriOfTheTagLibrary" prefix="prefix" %></tt>


Definuje knihovnu tagů, které můžeme využít v JSP stránce. Tagy jsou definovány TLD (Tag Library Despriptor) souboru.
Definuje knihovnu tagů, které můžeme využít v JSP stránce. Tagy jsou definovány TLD (Tag Library Despriptor) souboru.


== Odchytávání vyjimek ==
== Odchytávání výjimek ==
Pro odchytávání vyjimek a ošetření případných chyb, ke kterým může dojít máme dvě možnosti. První je skrze Page directives a to konkrétně pomocí atributů errorPage a isErrorPage. Druhou možností je využití <error-page> elementu v web.xml souboru.
Pro odchytávání výjimek a ošetření případných chyb, ke kterým může dojít máme dvě možnosti. První je skrze Page directives a to konkrétně pomocí atributů <tt>errorPage</tt> a&nbsp;<tt>isErrorPage</tt>. Druhou možností je využití <tt><error-page></tt> elementu ve web.xml souboru.


Příklady s využitím web.xml souboru:
Příklady s využitím web.xml souboru:
<source lang="html4strict">
<syntaxhighlight lang="html4strict">
<web-app>
<web-app>
…
…
Řádek 109: Řádek 110:
</web-app>
</web-app>


</syntaxhighlight>
</source>


== JSP Action tagy ==
== JSP Action tagy ==
JSP Actiony tagy se používají pro řízení a správu JSP stránek a pro práci s Java Beany.  Seznam action tagů: jsp:forward, jsp:include, jsp:useBean, jsp:setProperty, jsp:getProperty, jsp:plugin, jsp:param, jsp:fallback.
JSP Actiony tagy se používají pro řízení a správu JSP stránek a pro práci s Java Beany. Seznam action tagů: <tt>jsp:forward</tt>, <tt>jsp:include</tt>, <tt>jsp:useBean</tt>, <tt>jsp:setProperty</tt>, <tt>jsp:getProperty</tt>, <tt>jsp:plugin</tt>, <tt>jsp:param</tt>, <tt>jsp:fallback</tt>.


=== jsp:forward ===
=== <tt>jsp:forward</tt> ===
Syntax:
Syntax:

bez parametru
bez parametru:
<source lang="html4strict">
<syntaxhighlight lang="html4strict">
<jsp:forward page="relativeURL | <%= expression%>" />
<jsp:forward page="relativeURL | <%= expression%>" />
</syntaxhighlight>
</source>
s parametrem:
s parametrem:
<source lang="html4strict">
<syntaxhighlight lang="html4strict">
<jsp:forward page="relativeURL | <%=expression %>"
<jsp:forward page="relativeURL | <%=expression %>"
<jsp:param name="parameterName" value="value | <%= expression %>" />
<jsp:param name="parameterName" value="value | <%= expression %>" />
</jsp:forward>
</jsp:forward>
</syntaxhighlight>
</source>


Jsp:forward přeposílá request na další zdroj.
<tt>Jsp:forward</tt> přeposílá request na další zdroj.


=== jsp:include ===
=== <tt>jsp:include</tt> ===
Syntax:
Syntax:
<source lang="html4strict">
<syntaxhighlight lang="html4strict">
<jsp:include page="relativeURL | <%= expression %>" />  
<jsp:include page="relativeURL | <%= expression %>" />
</syntaxhighlight>
</source>
Jsp:include vkláda obsah v době requestu, což umožňuje vytvářet dynamicky generovaný obsah stránek.
<tt>Jsp:include</tt> vkládá obsah v době requestu, což umožňuje vytvářet dynamicky generovaný obsah stránek.


=== jsp:useBean ===
=== <tt>jsp:useBean</tt> ===
Syntax:
Syntax:
<source lang="html4strict">
<syntaxhighlight lang="html4strict">
<jsp:useBean id= "instanceName" scope= "page | request | session | application" 
<jsp:useBean id= "instanceName" scope= "page | request | session | application"
class= "packageName.className" type= "packageName.className"  beanName="packageName.className | <%= expression >" > 
class= "packageName.className" type= "packageName.className"  beanName="packageName.className | <%= expression >" >
</jsp:useBean>  
</jsp:useBean>
</syntaxhighlight>
</source>
Jsp:useBean vrací nebo vytváří Java Bean podle definovaného scope v atributu.
<tt>Jsp:useBean</tt> vrací nebo vytváří [[JavaBeans|Java Bean]] podle definovaného scope v atributu.


==== Atributy ====
==== Atributy ====
* id - identifikuje beanu v daném scope
* id – identifikuje beanu v daném scope
* scope
* scope
** page - pouze pro danou stránku (defaultní hodnota)
** page – pouze pro danou stránku (výchozí hodnota)
** request - v rámci requestu
** request – v rámci requestu
** session - v rámci session
** session – v rámci session
** application - pro celou aplikaci . nejširší scope
** application – pro celou aplikaci . nejširší scope
* class - specifikuje třídu pro kterou vytváří objekt (třída musí splňovat náležitosti Java Beany)
* class – specifikuje třídu pro kterou vytváří objekt (třída musí splňovat náležitosti Java Beany)
* type - specifikuje datový typ Java Beany
* type – specifikuje [[datový typ]] Java Beany
* beanName - inicializuje beanu skrze java.beans.Beans.instantiate() metodu
* beanName – inicializuje beanu skrze java.beans.Beans.instantiate() metodu


=== jsp:setProperty ===
=== <tt>jsp:setProperty</tt> ===
Syntax:
Syntax:
<source lang="html4strict">
<syntaxhighlight lang="html4strict">
<jsp:setProperty name="instanceOfBean" property= "*"   |   property="propertyName" param="parameterName"  |   property="propertyName" value="{ string | <%= expression %>}"   /> 
<jsp:setProperty name="instanceOfBean" property= "*"   |   property="propertyName" param="parameterName"  |   property="propertyName" value="{ string | <%= expression %>}"   />
</syntaxhighlight>
</source>
Jsp:setProperty bastavzhe hodnbotu vlastnosti/atributu beany.
<tt>Jsp:setProperty</tt> nastavuje hodnotu vlastnosti/atributu beany.


=== jsp:getProperty ===
=== <tt>jsp:getProperty</tt> ===
Syntax:
Syntax:
<source lang="html4strict">
<syntaxhighlight lang="html4strict">
<jsp:getProperty name="instanceOfBean" property="propertyName" />  
<jsp:getProperty name="instanceOfBean" property="propertyName" />
</syntaxhighlight>
</source>
Jsp:getProperty vrací hodnotu vlastnosti/atributu beany.
<tt>Jsp:getProperty</tt> vrací hodnotu vlastnosti/atributu beany.


== Expression Language (EL) ==
== Expression Language (EL) ==
Syntax: ${ expression }
Syntax: <tt>${ expression }</tt>


EL zjednodušuje přístup k datům uložených v Java Beanách a dalších objektech jako je request, session nebo application. Do JSP bylo EL přidáno v verzi 2.0.
EL zjednodušuje přístup k datům uložených v Java Beanách a dalších objektech jako je request, session nebo application. Do JSP bylo EL přidáno v verzi 2.0.


=== Implicitní objekty v EL ===
=== Implicitní objekty v EL ===
pageScope, requestScope, sessionScope, applicationScope - mapuje atribut podle jména v daném scope
* <tt>pageScope</tt>, <tt>requestScope</tt>, <tt>sessionScope</tt>, <tt>applicationScope</tt> – mapuje atribut podle jména v daném scope
⚫
* <tt>param</tt> – mapuje request parametr do jedné proměnné

param - mapuje request parametr do jedné proměnné
* <tt>paramValues</tt> – mapuje request parametr do pole proměnných
* <tt>header</tt> – mapuje request hlavičku do jedné proměnné

paramValues - mapuje request parametr do pole proměnných
* <tt>headerValues</tt> – mapuje request hlavičku do pole proměnných
⚫
* <tt>cookie</tt> – mapuje název cookies do hodnoty proměnné

⚫
* <tt>initParam</tt> – mapuje inicializační parametr
⚫
header - mapuje request hlavičku do jedné proměnné
⚫
* <tt>pageContext</tt> – umožňuje přístup k objektům jako je request, session a podobně

headerValues - mapuje request hlavičku do pole proměnných

⚫
cookie - mapuje název cookies do hodnoty proměnné

⚫
initParam - mapuje inicializační parametr

⚫
pageContext - umožňuje přístup k objektům jako je request, session a podobně


=== Operátory v EL ===
=== Operátory v EL ===
Řádek 213: Řádek 208:
<tt>? :</tt>
<tt>? :</tt>


=== Klíčová slova v EL: ===
=== Klíčová slova v EL ===
Lt, le, gt, ge, eq, ne, true, false, and, or, not, instanceof, div, mod, empty, null
<tt>Lt</tt>, <tt>le</tt>, <tt>gt</tt>, <tt>ge</tt>, <tt>eq</tt>, <tt>ne</tt>, <tt>true</tt>, <tt>false</tt>, <tt>and</tt>, <tt>or</tt>, <tt>not</tt>, <tt>instanceof</tt>, <tt>div</tt>, <tt>mod</tt>, <tt>empty</tt>, <tt>null</tt>


== JSTL (JSP Standard Tag Library) ==
== JSTL (JSP Standard Tag Library) ==
JSTL je set tagů pro zjednodušení vývoje JSP stránek, ve kterých není potřeba používat scriptlet tagy.
JSTL je set tagů pro zjednodušení vývoje JSP stránek, ve kterých není potřeba používat scriptlet tagy.


=== 5 základních knihoven: ===
=== 5 základních knihoven ===
* core tags - práce s proměnnými, URL management, kontrola a správa stránek (prefix c)
* core tags – práce s proměnnými, URL management, kontrola a správa stránek (prefix c)
* sql tags - podpora SQL a přístup do DB (prefix sql)
* [[SQL|sql]] tags – podpora SQL a přístup do DB (prefix sql)
* xml tags - správa XML a jejich transformace (prefix x)
* xml tags – správa [[Extensible Markup Language|XML]] a jejich transformace (prefix x)
* internationalization tags - formátování a lokalizace (prefix fmt)
* internationalization tags – formátování a lokalizace (prefix fmt)
* function tags - manipulace se stringem (prefix fn)
* function tags – manipulace se stringem (prefix fn)


== Vlastní tagy v JSP ==
== Vlastní tagy v JSP ==
Jedná se o uživatelem vytvořené tagy. Jejich vytvářrním se vyhýbáme scriptlet tagům a separujeme byznys logiku od JSP stránky. Další výhodou je znovu použitelnost kódu.
Jedná se o uživatelem vytvořené tagy. Jejich vytvářením se vyhýbáme scriptlet tagům a separujeme byznys logiku od JSP stránky. Další výhodou je znovu použitelnost kódu.
<source lang="html4strict">
<syntaxhighlight lang="html4strict">
<prefix:tagname attr1=“value1“....attrn=“valuen“ >
<prefix:tagname attr1="value1"....attrn="valuen" >
…
…
</prefix:tagname>
</prefix:tagname>
</syntaxhighlight>
</source>


== Příklady kódu ==
== Příklady kódu ==
Počítání v cyklu [[Cyklus for|for]] do šesti :
Počítání v cyklu [[Cyklus for|for]] do šesti:
<source lang="html4strict">
<syntaxhighlight lang="html4strict">
<p>Počítání do šesti:</p> <!-- HTML -->
<p>Počítání do šesti:</p> <!-- HTML -->
<% for (int i=1; i<6; i++) { %> <!-- JSP -->
<% for (int i=1; i<=6; i++) { %> <!-- JSP -->
<p>Číslo : <%= i %>.</p> <!-- HTML & JSP -->
<p>Číslo : <%= i %>.</p> <!-- HTML & JSP -->
<% } %> <!-- JSP -->
<% } %> <!-- JSP -->
<p>Dopočítáno.</p> <!-- HTML -->
<p>Dopočítáno.</p> <!-- HTML -->
</syntaxhighlight>
</source>
A výsledek :
A výsledek:
Počítání do šesti:
Počítání do šesti:
Číslo : 1.
Číslo : 1.
Řádek 253: Řádek 248:
Dopočítáno.
Dopočítáno.


== Externí odkazy ==
⚫
[[Kategorie:Programovací jazyky]]
* {{Commonscat}}
{{Autoritní data}}
{{Portály|Internet}}

⚫
[[Kategorie:Šablonovací systémy]]

Aktuální verze z 25. 12. 2025, 21:33

JSP
Vznik1999
VývojářOracle (dříve Sun)
Poslední verze2.1 (leden 2006)
LicenceEclipse Public License 2.0
GPL linking exception
WebOficiální stránky (anglicky)
Přípona souborujsp
Některá data mohou pocházet z datové položky.

JavaServer Pages (JSP) je technologie pro vývoj hlavně dynamických HTML stránek založená na jazyce Java. Technologii JSP vyvinula společnost Sun Microsystems, která byla později koupena firmou Oracle. Při tvorbě se tedy používá primárně HTML a Java. Do kódu HTML se vkládá Java. Odděluje se od HTML takto: <% .. Java kód .. %> a tyto bloky se nazývají skriptlety. Na straně serveru se tedy vloží vygenerovaný HTML místo Javy v souboru. Jde o podobný princip, jako u PHP. Přípona souborů je .jsp.

Životní cyklus JSP

[editovat | editovat zdroj]

V okamžiku requestu ze strany klienta na server, si web container zkontroluje zdali je už vytvořený Servlet k dané JSP stránce. Pokud ne, tak vytváří Servlet. Pokud daný Servlet najde, tak kontroluje staří obou souborů a pokud je JSP stránka mladší, tak Servlet vytvoří znovu. Pokud ne, tak pro zlepšení výkonu použije již existující Servlet. Životní cyklus JSP se skládá ze sedmi částí:

  1. Překlad JSP
  2. Kompilace JSP
  3. Classloading – načte korespondující Servlet třídu
  4. Instantiation – připraví Servlet třídu
  5. Inicializace – jspInit()
  6. Zpracování požadavku (Request) – jspService()
  7. Zahození objektu – jspDestroy()

Mezi hlavní výhody JSP patří možnost využít všech možností, co nabízí Servlety a navíc implicitních objektů, předdefinovaných tagů, Expression Language (EL) a vlastních tagů.

Všechny vygenerované Servlety musí implementovat dvě rozhraní. Prvním je JspPage interface, z kterého implementuje dvě metody z životního cyklu:

  • public void jspInit() – metoda je volána při prvním requestu, stejně jako metoda init() u Servlet rozhraní
  • public void jspDestroy() – metoda je volána na konci životního cyklu JSP, kdy je stránka zahozena

Z druhého rozhraní, HttpJspPage, dostává metodu:

  • public void _jspService() – metoda je volána při každém požadavku na JSP stránku, co přijde do web containeru (webový, aplikační server), metoda nemůže být přepsána (@Override).

Implicitní objekty

[editovat | editovat zdroj]

Web container vytváří devět implicitních objektů, které jsou dostupné pro všechny JSP stránky:

  • out – JspWriter
  • request – HttpServletRequest
  • response – HttpServletResponse
  • config – ServletConfig
  • application – ServletContext
  • session – HttpSession
  • pageContext – PageContext
  • page – Object
  • exception – Throwable

Scriptlet tag

[editovat | editovat zdroj]

Syntax: <% … %>

Využívá se pro exekuci Java kódu v JSP a může deklarovat proměnné (uvnitř metody service()).

Expression tag

[editovat | editovat zdroj]

Syntax: <%= … %>

Vypisuje output stream bez potřeby použití out.print().

Declaration tag

[editovat | editovat zdroj]

Syntax: <%! … %>

Deklaruje objekty a metody mimo metodu service(), takže nezabírají paměť při každém volání.

Direktivy - JSP Directives

[editovat | editovat zdroj]

JSP Directives jsou zprávy, které říkají web containeru, jak má přeloži JSP stránku do Servletu.

Page directives

[editovat | editovat zdroj]

Syntax: <%@ page attribute="value" %>

Definují atributy pro celou JSP stránku.

  1. import – Importuje třídu, rozhraní nebo obsah celého balíčku.
  2. contentType – Definuje MIME (Multipurpose Internet Mail Expression) – výchozí hodnota „text/html; charset=ISO-8859-1“.
  3. extend – Definuje rodičovskou třídu.
  4. info – Nastavuje informace, které vrací metoda getServletInfo().
  5. buffer – Nastavuje velikost v kilobytech bufferu, který zpracováva výstup generovaný z JSP stránky – výchozí hodnota 8 kb.
  6. language – Specifikuje skriptovací jazyk použitý v JSP – výchozí hodnota „java“.
  7. isElIgnored – Ignoruje Expression Language na stránce – defaultně „false“.
  8. isThreadSafe – Servlety i JSP jsou defaultně vláknově bezpečné, aby se mohli jednotlivé requesty zpracovávat paralelně. Při nastavení „false“ jsou requesty serializovány.
  9. errorPage – Pokud dojde k chybě, tak dojde k přesměrování na definovanou stránku.
  10. isErrorPage – Definuje, že tato stránka je errorPage

Include directive

[editovat | editovat zdroj]

Syntax: <%@ include file="resourceName" %>

Se používá pro vkládání obsahu z různých zdrojů, jako jsou JSP, HTML nebo textové soubory. Obsah je do stránky vložen pouze jednou a to v době překladu, takže je vhodnější vkládat statické zdroje. Velká výhoda je znovu použitelnost kódu při vkládání HTML stránek.

Taglib directive

[editovat | editovat zdroj]

Syntax: <%@ taglib uri="uriOfTheTagLibrary" prefix="prefix" %>

Definuje knihovnu tagů, které můžeme využít v JSP stránce. Tagy jsou definovány TLD (Tag Library Despriptor) souboru.

Odchytávání výjimek

[editovat | editovat zdroj]

Pro odchytávání výjimek a ošetření případných chyb, ke kterým může dojít máme dvě možnosti. První je skrze Page directives a to konkrétně pomocí atributů errorPage a isErrorPage. Druhou možností je využití <error-page> elementu ve web.xml souboru.

Příklady s využitím web.xml souboru:

<web-app>
	…
	<error-page>
		<exception-type> java.lang.Exception </exception-type>
		<location>/error.jsp</location>
	</error-page>
	…
</web-app>

<web-app>
        …
	<error-page>
		<error-code>500</error-code>
		<location>/error.jsp</location>
	</error-page>
        …
</web-app>

JSP Action tagy

[editovat | editovat zdroj]

JSP Actiony tagy se používají pro řízení a správu JSP stránek a pro práci s Java Beany. Seznam action tagů: jsp:forward, jsp:include, jsp:useBean, jsp:setProperty, jsp:getProperty, jsp:plugin, jsp:param, jsp:fallback.

jsp:forward

[editovat | editovat zdroj]

Syntax:

bez parametru:

<jsp:forward page="relativeURL | <%= expression%>" />

s parametrem:

<jsp:forward page="relativeURL | <%=expression %>"
     <jsp:param name="parameterName" value="value | <%= expression %>" />
</jsp:forward>

Jsp:forward přeposílá request na další zdroj.

jsp:include

[editovat | editovat zdroj]

Syntax:

<jsp:include page="relativeURL | <%= expression %>" />

Jsp:include vkládá obsah v době requestu, což umožňuje vytvářet dynamicky generovaný obsah stránek.

jsp:useBean

[editovat | editovat zdroj]

Syntax:

<jsp:useBean id= "instanceName" scope= "page | request | session | application"
       class= "packageName.className" type= "packageName.className"  beanName="packageName.className | <%= expression >" >
</jsp:useBean>

Jsp:useBean vrací nebo vytváří Java Bean podle definovaného scope v atributu.

  • id – identifikuje beanu v daném scope
  • scope
    • page – pouze pro danou stránku (výchozí hodnota)
    • request – v rámci requestu
    • session – v rámci session
    • application – pro celou aplikaci . nejširší scope
  • class – specifikuje třídu pro kterou vytváří objekt (třída musí splňovat náležitosti Java Beany)
  • type – specifikuje datový typ Java Beany
  • beanName – inicializuje beanu skrze java.beans.Beans.instantiate() metodu

jsp:setProperty

[editovat | editovat zdroj]

Syntax:

<jsp:setProperty name="instanceOfBean" property= "*"   |   property="propertyName" param="parameterName"  |   property="propertyName" value="{ string | <%= expression %>}"   />

Jsp:setProperty nastavuje hodnotu vlastnosti/atributu beany.

jsp:getProperty

[editovat | editovat zdroj]

Syntax:

<jsp:getProperty name="instanceOfBean" property="propertyName" />

Jsp:getProperty vrací hodnotu vlastnosti/atributu beany.

Expression Language (EL)

[editovat | editovat zdroj]

Syntax: ${ expression }

EL zjednodušuje přístup k datům uložených v Java Beanách a dalších objektech jako je request, session nebo application. Do JSP bylo EL přidáno v verzi 2.0.

Implicitní objekty v EL

[editovat | editovat zdroj]
  • pageScope, requestScope, sessionScope, applicationScope – mapuje atribut podle jména v daném scope
  • param – mapuje request parametr do jedné proměnné
  • paramValues – mapuje request parametr do pole proměnných
  • header – mapuje request hlavičku do jedné proměnné
  • headerValues – mapuje request hlavičku do pole proměnných
  • cookie – mapuje název cookies do hodnoty proměnné
  • initParam – mapuje inicializační parametr
  • pageContext – umožňuje přístup k objektům jako je request, session a podobně

Operátory v EL

[editovat | editovat zdroj]

[] .

() (změna priorit operátorů)

- (unární operace) not ! empty

* / div % mod

+ - (binární operace)

< > <= >= lt gt le ge

== != eq ne

&& and

|| or

? :

Klíčová slova v EL

[editovat | editovat zdroj]

Lt, le, gt, ge, eq, ne, true, false, and, or, not, instanceof, div, mod, empty, null

JSTL (JSP Standard Tag Library)

[editovat | editovat zdroj]

JSTL je set tagů pro zjednodušení vývoje JSP stránek, ve kterých není potřeba používat scriptlet tagy.

5 základních knihoven

[editovat | editovat zdroj]
  • core tags – práce s proměnnými, URL management, kontrola a správa stránek (prefix c)
  • sql tags – podpora SQL a přístup do DB (prefix sql)
  • xml tags – správa XML a jejich transformace (prefix x)
  • internationalization tags – formátování a lokalizace (prefix fmt)
  • function tags – manipulace se stringem (prefix fn)

Vlastní tagy v JSP

[editovat | editovat zdroj]

Jedná se o uživatelem vytvořené tagy. Jejich vytvářením se vyhýbáme scriptlet tagům a separujeme byznys logiku od JSP stránky. Další výhodou je znovu použitelnost kódu.

<prefix:tagname attr1="value1"....attrn="valuen" >
…
</prefix:tagname>

Příklady kódu

[editovat | editovat zdroj]

Počítání v cyklu for do šesti:

<p>Počítání do šesti:</p> <!-- HTML -->
<% for (int i=1; i<=6; i++) { %> <!-- JSP -->
    <p>Číslo : <%= i %>.</p>             <!-- HTML & JSP -->
<% } %> <!-- JSP -->
<p>Dopočítáno.</p> <!-- HTML -->

A výsledek:

Počítání do šesti:
Číslo : 1.
Číslo : 2.
Číslo : 3.
Číslo : 4.
Číslo : 5.
Číslo : 6.
Dopočítáno.

Externí odkazy

[editovat | editovat zdroj]