JavaServer Pages
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.
Vznik | 1999 |
---|---|
Vývojář | Oracle (dříve Sun) |
Poslední verze | 2.1 (leden 2006) |
Web | Oficiální stránky (anglicky) |
Životní cyklus JSP
editovatV 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 – jspInit()
- Zpracování požadavku (Request) – jspService()
- Zahození objektu – jspDestroy()
Výhody
editovatMezi 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
editovatVš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
editovatWeb 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
Tagy
editovatScriptlet tag
editovatSyntax: <% ... %>
Využívá se pro exekuci Java kódu v JSP a může deklarovat proměnné (uvnitř metody service()).
Expression tag
editovatSyntax: <%= ... %>
Vypisuje output stream bez potřeby použití out.print().
Declaration tag
editovatSyntax: <%! ... %>
Deklaruje objekty a metody mimo metodu service(), takže nezabírají paměť při každém volání.
Direktivy - JSP Directives
editovatJSP Directives jsou zprávy, které říkají web containeru, jak má přeloži JSP stránku do Servletu.
Page directives
editovatSyntax: <%@ page attribute="value" %>
Definují atributy pro celou JSP stránku.
- import – Importuje třídu, rozhraní nebo obsah celého balíčku.
- contentType – Definuje MIME (Multipurpose Internet Mail Expression) – výchozí hodnota „text/html; charset=ISO-8859-1“.
- extend – Definuje rodičovskou třídu.
- info – Nastavuje informace, které vrací metoda getServletInfo().
- buffer – Nastavuje velikost v kilobytech bufferu, který zpracováva výstup generovaný z JSP stránky – výchozí hodnota 8 kb.
- language – Specifikuje skriptovací jazyk použitý v JSP – výchozí hodnota „java“.
- 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.
- errorPage – Pokud dojde k chybě, tak dojde k přesměrování na definovanou stránku.
- isErrorPage – Definuje, že tato stránka je errorPage
Include directive
editovatSyntax: <%@ 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
editovatSyntax: <%@ 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
editovatPro 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
editovatJSP 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
editovatSyntax:
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
editovatSyntax:
<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
editovatSyntax:
<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.
Atributy
editovat- 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
editovatSyntax:
<jsp:setProperty name="instanceOfBean" property= "*" | property="propertyName" param="parameterName" | property="propertyName" value="{ string | <%= expression %>}" />
Jsp:setProperty nastavuje hodnotu vlastnosti/atributu beany.
jsp:getProperty
editovatSyntax:
<jsp:getProperty name="instanceOfBean" property="propertyName" />
Jsp:getProperty vrací hodnotu vlastnosti/atributu beany.
Expression Language (EL)
editovatSyntax: ${ 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- 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[] .
() (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
editovatLt, le, gt, ge, eq, ne, true, false, and, or, not, instanceof, div, mod, empty, null
JSTL (JSP Standard Tag Library)
editovatJSTL 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- 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
editovatJedná 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
editovatPočí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- Obrázky, zvuky či videa k tématu JavaServer Pages na Wikimedia Commons