JavaServer Pages – skriptovacie značky

6. září 2002

Okrem dobre známeho HTML sa na tvorbu stránok JSP používajú tri základné typy konštrukcií: skriptovacie značky, direktívy a akcie. V tejto časti sa pozrieme bližšie na skriptovacie značky.

Skriptovacie značky umožňujú špecifikovať kód v Jave, ktorý sa stane súčasťou výsledného servletu. Spomeňte si na prvú časť nášho seriálu, kde sa hovorí, že stránka JSP sa prekladá na servlet, čo je klasický *.class súbor. Tento kód sa potom samozrejme vykoná.

Poznáme štyri tvary skriptovacích značiek:

  1. Výrazy v tvare <%= výraz %>, ktoré sa vkladajú do výstupu servletu. Na to je použitá metóda out.print() triedy java.io.PrintWriter.
  2. Skriptlety v tvare <% kód %>, ktoré sa vkladajú do metódy servletu _jspService().
  3. Deklarácie v tvare <%! kód %>, ktoré sa vkladajú do tela servletu mimo metódy _jspService().
  4. JSP komentáre v tvare <%-- JSP komentár --%>, ktoré nebudú viditeľné vo výslednom dokumente.

Jednotlivé typy skriptovacích značiek si postupne podrobnejšie preberieme.

Výrazy JSP

Výraz JSP sa používa vtedy, ak potrebujete nejaký výstup vložiť priamo do stránky. Väčšinou hodnotu nejakej premennej. Má nasledovnú syntax:

<%= výraz v Jave %>

Výraz sa v čase požiadavky na stránku vyhodnotí, prevedie na reťazec a vloží do stránky. Napríklad nasledujúci výraz vloží aktuálny dátum v tvare, ktorý závisí od platformy na ktorej beží JSP stroj (napr. Tomcat).

<%= DateFormat.getDateInstance().format(new Date())%>

Keďže tento seriál je určený pre ľudí, ktorí už majú určité skúsenosti s programovaním v jazyku Java, nebudem sa nejak podrobne venovať samotnému jazyku. Pre ostatných odkazujem na seriál Naučte se Javu.

Výrazy JSP je možné tiež používať na určenie hodnoty určitých atribútov. Zvyčajne vtedy, keď hodnota atribútu nie je vopred známa a môže sa meniť. Napríklad pri nastavovaní parametrov JavaBeanov. O technológii JavaBeans v spojení s JSP bude reč neskôr. Zatial len ukážka kódu.

<jsp:setProperty name=“customer“ property=“id“ value=“id9853198″/>

Väčšina atribútov očakáva hodnotu ako pevne daný reťazec v apostrofoch alebo v úvodzovkách, tak ako som to uviedol v príklade. Ale niektoré atribúty umožňujú ako hodnotu použiť výraz, ktorý je vypočítaný v dobe požiadavku na stránku. Atribút value je vhodným príkladom.

<jsp:setProperty name=“customer“ property=“id“ value=“<%= customerID %>“/>

Vyššie uvedené platí len pre atribúty patriace do skupiny akčných značiek (action tags). Odporúčam stiahnuť si stručný prehľad JSP syntaxe vo formáte pdf.

<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“>
 <html>
   <head><title>Ukážka JSP výrazov</title></head>
   <body>
     Curent date/time: <%= new java.util.Date()%>
     Remote host: <%= request.getRemoteAddr()%>
     Session ID: <%= session.getId()%>
     Request URI: <%= request.getRequestURI()%>
   </body>
 </html>

V príklade som použil niektoré nové veci (request, session …), budem sa im venovať v ďalšom diely. Pre jednoduchosť možeme príklady ukladať do adresára CATALINA_HOME/webapps/ROOT, ale bolo by vhodnejšie vytvoriť si vlastný adresár na skúšanie, priamo do webapps.

Teda, ak si vytvorim adresár priklady a tam umiestnim súbor test.jsp, adresa, ktorú zadám do browsera, bude http://localhost/priklady/test.jsp alebo http://localhost:8080/priklady/test.jsp

Skriptlety JSP

Výrazy JSP však nie vždy stačia a často je potrebné robiť aj niečo zložitejšie priamo na stránke JSP. Práve na to slúžia skriptlety. Pomocou nich vložíte do stránky zložitejší kód, ktorý preberie metóda _jspService() vygenerovaného servletu. Syntax je nasledovná:

<% kód v Jave %>

Skriptlety, podobne ako výrazy JSP, majú prístup k tzv. implicitným objektom (request, response, session, out ad.), ktorým sa budem venovať v ďalšej časti. Tieto objekty podstatne zjednodušujú tvorbu JSP stránok. Ak potrebujete dostať niečo na stránku aj zo skriptletu, treba použiť premennú out. Uvediem krátky príklad:

<%
String method = request.getMethod();
out.println(„Method: “ + method);
%>

Skriptlety môžu vykonávať ďaleko viac úloh ako výrazy. Napríklad nastavovať záhlavie odoziev a stavové kódy. Vyvolávať rôzne vedľajšie efekty, napr. práca s databázou, odoslanie emailu atď. Môžete používať klasické cykly, podmienky a iné Javovské konštrukcie. Iným použitím skriptletov je podmienené použitie HTML v spojení s JSP. Ide o to, že kód vo vnútri skriptletu sa vkladá do metódy _jspService() presne tak, ako je napísaný, a HTML kód pred a za skriptletom sa vkladá do out.print(). To znamená, že kód skriptletu nemusí byť kompletný. Môže obsahovať neuzavreté bloky kódu. Tieto otvorené bloky môžu ovplyvniť výsledný HTML a JSP kód stránky. Lepšie bude asi uviesť jednoduchý príklad:

<%
Integer visits = (Integer) session.getAttribute(„visitcounter“);
if (visits == null) {
  visits = new Integer(0);
  session.setAttribute(„visitcounter“,visits);
%>
  Vitajte na Interval.cz. Ste tu po prvý krát.
<%
}
else {
  visits = new Integer (visits.intValue() + 1);
  session.setAttribute(„visitcounter“,visits);
%>
  Vitajte na Interval.cz. Naše stránky ste navštívili už <%= visits %> krát.
<%
}
%>

V príklade ide o počítanie prístupu na stránku. Počet prístupov visits sa ukladá do aktuálnej session, ktorá má (môže mať) obmedzenú životnosť. Keď ukončíte browser, visits stratí platnosť.

Deklarácia JSP

Deklarácia umožňuje definovať metódy, premenné alebo polia, ktoré sa vložia do tela servletu mimo metódy _jspService(). Deklarácia nevytvára žiadny výstup, ale bežne sa používa v spojení s výrazmi a skriptletmi. Má nasledujúci tvar:

<%! kód v Jave %>
<%!
private String hello = „Hello World!“;
public String getString() {
  return hello;
}%>
<%= hello %>

Komentáre JSP

Majú v podstate rovnaký význam ako klasické HTML komentáre, rozdiel je v tom, že nikdy nie sú posielané na klienta. Zapisujú sa takto:

<%– JSP komentár –%>

V ďalšej časti sa pozrieme na implicitné objekty a direktívy JSP.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *