JavaServer Pages

JavaServer Pages (JSP) je technologie pro vývoj hlavně dynamických HTML stránek založená na jazyce Java. Vyvinul ji v Sun, ale pak ji koupila firma 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.

JSP
Vznik1999
VývojářOracle (dříve Sun)
Poslední verze2.1 (leden 2006)
WebOficiální stránky (anglicky)

Ž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í:

  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()

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ů.

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:

  • 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

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

Tagy

Scriptlet tag

Syntax: <% ... %>

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

Expression tag

Syntax: <%= ... %>

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

Declaration tag

Syntax: <%! ... %>

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

Direktivy - JSP Directives

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

Page directives

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

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

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

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ů errorPageisErrorPage. 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

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

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

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

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.

Atributy

  • 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

Syntax:

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

Jsp:setProperty nastavuje hodnotu vlastnosti/atributu beany.

jsp:getProperty

Syntax:

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

Jsp:getProperty vrací hodnotu vlastnosti/atributu beany.

Expression Language (EL)

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

  • 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

[] .

() (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

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

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.

5 základních knihoven

  • 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

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

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