V dnešnej časti si objasníme, čo sú to implicitné objekty a akým spôsobom ich môžeme využívať. Prejdeme si aj direktívy, druhú z troch základných konštrukcií stránok JSP (prvé sú skriptovacie značky).

Implicitné objekty

JSP vám dáva k dispozícii 9 automaticky vytvorených premenných – implicitné objekty. Tieto objekty sú prístupné len vo výrazoch a skriptletoch. Keďže deklarácie JSP vytvárajú kód, ktorý sa nevkladá do _jspService(), nie sú v deklaráciách prístupné. Dostupné sú tieto premenné:

Implicitný objekt Typ
request javax.servlet.HttpServletRequest
response javax.servlet.HttpServletResponse
pageContext javax.servlet.jsp.PageContext
session javax.servlet.http.HttpSession
application javax.servlet.ServletContext
out javax.servlet.jsp.JspWriter
config javax.servlet.ServletConfig
page java.lang.Object
exception java.lang.Throwable
  1. request (požiadavka)
    Táto premenná je združená s požiadavkou. Sprístupňuje parametre požiadavku, typ požiadavku a záhlavie HTTP. Ak je protokol požiadavku iný než HTTP, môže byť request typu ServletRequest.
  2. response (odozva)
    Táto premenná je združená s odpoveďou klientovi. Málokedy sa používa priamo na stránkach JSP. Často vtedy keď programujete priamo servlety.
  3. pageContext (kontext stránky)
    Táto premenná poskytuje jednotný prístup k mnohým atribútom stránky a miesto na uloženie dát. Väčšinou zdieľaných dát. Je združená s aktuálnou stránkou.
  4. session (sedenie)
    Premenná je typu HttpSession a je zviazaná s požiadavkou. Je vytváraná automaticky. Jedinou výnimkou je, keď v direktíve page (budeme o nich hovoriť neskôr) nastavíte parameter session ako false.
  5. application (aplikácia)
    Stránky JSP môžu do premennej application vkladať perzistentné dáta. Nato sa používajú dve metódy setAttribute() a getAttribute(). Táto premenná je zdieľaná medzi všetkými servletmi v stroji.
  6. out (výstup)
    Toto je objekt typu PrintWriter používaný pre odosielanie odpovede klientovi. Ak použijete response, používa sa odvodená trieda JspWriter.
  7. config (konfigurácia)
    Táto premenná predstavuje objekt typu ServletConfig pre aktuálnu stránku. Jej metóda getServletContext() vracia ServletContext pre aktuálnu stránku.
  8. page (stránka)
    Page jednoducho zastupuje this. Bola vytvorená pre prípad, keď bude možné použiť aj iný jazyk než Javu.
  9. exception (výnimka)
    Tento objekt je typu Throwable a obsahuje základné metódy na prácu s výnimkami, ktoré môžu vzniknúť na stránke JSP.

Všetky implicitné objekty majú k dispozícii pomerne veľké množstvo rôznych metód. Nie je v mojich silách venovať sa všetkým. Bohužiaľ programátor je často odkázaný na štúdium API špecifikácie príslušného jazyka, v našom prípade Javy. Túto dokumentáciu je možné prezerať aj on-line na webe: Java2 SE a Java2 EE. Popis tried javax.servlet.* nájdete v API špecifikácii Java2 EE.

Direktívy JSP

V podstate nimi ovplyvňujeme výslednú štruktúru servletu. Direktívy nevytvárajú žiadny viditeľný výstup, ale určujú spôsob, akým JSP stroj spracováva stránku. Najčastejšie sa zapisujú do hlavičky súboru medzi tagy <head></head>. Syntax direktív je nasledovná:

<%@ direktíva … %>

Poznáme tri typy direktív:

  1. page
    – importuje triedy, nastavuje typ obsahu stránky, kódovanie stránky, povoluje alebo zakazuje vytváranie session atď. Budeme sa jej venovať bližšie.
  2. include
    – umožňuje vložiť do stránky súbor v čase, keď sa stránka prekladá na servlet. Táto direktíva sa musí umiestniť na to miesto na stránke kam chceme importovaný súbor vložiť.
  3. taglib
    – sa používa pri definovaní užívateľských značiek. Na túto tému bude samostatný článok.

Page

Táto direktíva obsahuje 12 voliteľných atribútov. V nasledujúcej tabulke je ich stručný popis.

Atribút Stručný popis Syntax
language Jazyk, ktorý bude použitý. Zatiaľ iba Java. <%@ page language = "java" %>
extends Rodičovské triedy použité JSP strojom pri preklade stránky na servlet. <%@ page extends = "com.taglib..." %>
import Import tried potrebných pre preklad aktuálnej stránky. Tieto triedy sú importované implicitne:

  • java.lang.*
  • javax.servlet.*
  • javax.servlet.jsp.*
  • javax.servlet.http.*
<%@ page import = "java.io.*" %>
session Týmto prepínačom sa nastavuje, či na stránke budú alebo nie dostupné dáta uložené v session. Štandardne je nastavené true. <%@ page session = "true | false" %>
buffer Nastavuje veľkosť pamäti určenej k odloženiu dát pre výstup danej JSP stránky. Nastavené je 8 kb, bez nej je none. <%@ page buffer = "none | x kb" %>
autoFlush Automaticky vyprázdni buffer, ak sa naplní. <%@ page autoFlush = "true | false" %>
isThreadSafe Nastavuje, či vygenerovaný servlet bude umožňovať multithreading. <%@ page isThreadSafe = "true | false" %>
errorPage Nastavím URL stránky, ktorá sa načíta ak na stránke vznikne výnimka. <%@ page errorPage = "relativeURL" %>
isErrorPage Tento prepínač nastavuje či stránka je alebo nie je vyžiadaná ako errorPage. <%@ page isErrorPage = "true | false" %>
contentType Nastavuje mime typ dokumentu. <%@ page contentType = "mimeTyp" %>
info Používa sa na vloženie dodatočných infomácií, napr. autor, verzia, dátum … <%@ page info = "text" %>
pageEncoding Definuje kódovanie platné pre stránku JSP. Defaultne je to ISO-8859-1 <%@ page pageEncoding = "characterSet" %>

Include

Direktíva include umožňuje, aby vývojár vložil obsah jedného súboru do iného. Často sa takto vkladajú rôzne navigačné prvky, tabulky, hlavičky alebo päty, ktoré sú spoločné pre viaceré stránky. Táto direktíva sa zapisuje nasledovne, pričom má len jeden parameter:

<%@ include file = „relativeURL“ %>

Treba povedať, že táto direktíva je vhodná hlavne pre vkladanie statického obsahu, pretože obsah súboru je vkladaný počas kompilácie JSP stránky. Táto prebehne len raz, keď je stránka prvý krát vyžiadaná. Alebo vtedy ak sa zmení obsah stránky.

Taglib

Tag Lib = Tag Library = Knižnica užívateľských značiek, ktoré sa môžu použiť na stránke. Syntax je takáto:

<%@ taglib uri = „tag_library_URI“ prefix = „tag_prefix“ %>

Užívateľské značky podporuje až špecifikácia JSP 1.1 a v podstate umožňujú vývojárom skryť komplexný kód na strane servera pred web dizajnérmi.

Žádný příspěvek v diskuzi

Odpovědět