**JSP** je technológia Java, ktorá pomáha softvérovým vývojárom obsluhovať dynamicky generované webové stránky, založené na HTML, XML alebo ostatných typoch dokumentov.

Na internete sa možno stretnúť s dvoma základnými typmi stránok, statické a dynamické. Obsah statickej stránky je rovnaký a to bez ohľadu na to aký užívateľ sa ku stránke prihlási. Naproti tomu dynamické stránky prispôsobujú svoj obsah užívateľovi t. j. reagujú na jeho impulzy, menia podľa jeho potrieb, pamätá si jeho nastavenie od minulej návštevy a dáva mu len informácie, ktoré potrebuje.

**JSP** patrí medzi technológiu tvorby dynamických stránok na webovom serveri; okrem nej sa možno stretnúť s CGI (Common Gateway Interface), ASP (Active Server Pages), PHP (PHP: Hypertext Preprocessor) a JavaScript (ide o technológiu používanú na strane klienta). JSP dokument je zmesou kódu Javy, XML, JDBC, HTML a JavaScriptu.

Technológia JSP
---------------

Stránka JSP sa skladá z viacerých častí:

* Skriptovacie elementy,
* direktívy,
* inštrukcie (akcie),
* elementy XML.

Príklad jednoduchej stránky JSP:

```
<% if (session.isNew()) %>
	Prosím nech sa páči vstúpiť!
<% else %>
	Vitajte späť!
```

V „preklade" to znamená:

```
JAVA: Ak užívateľ ešte nenavštívil tento webový server
HTML: Prosím nech sa páči vstúpiť!
JAVA: inak
HTML: Vitajte späť!
```

### Preklad JSP dokumentu

Popis procesu prekladu dokumentu JSP:

1. Vytvorenie dokumentu JSP napr. index.JSP
2. Umiestnenie dokumentu na server, kde beží kontajner JSP
3. Užívateľ navštívi dokument index.JSP
4. Po zadaní prvého požiadavku na dokument kontajner JSP preloží dokument do jazyku Java. Výsledný preložený dokument bude mať názov \_index.java
5. Preklad \_index.java do bytového kódu \_index.class
6. Kontajner JSP načíta súbor triedy a na základe zistenej definície vytvorí nový objekt. Dochádza k inicializácii všetkých premenných. Tento krok môžeme pomenovať ako inicializácia samotného dokumentu JSP.
7. Kontajner vytvorí zodpovedajúci dokument a odošle ho k užívateľovi. Tento dokument neobsahuje žiadny zostatkový kód JSP t. j. užívateľ dostane dokument (Prosím nech sa páči vstúpiť!) alebo dokument (Vitajte späť!).
8. Pri ďalších požiadavkách na dokument JSP sa vraciame len k bodu číslo 7 až do chvíle kým kontajner príslušnej triedy neodstráni.
9. Ak kontajner JSP potrebuje uvoľniť časť pamäte a nikto dokument JSP nepožaduje môže kontajner súbor triedy z pamäti vymazať alebo keď správca systému sa rozhodne kontajner JSP vypnúť. Objekt je z pamäte uvoľnený.
10. Pri ďalšej návšteve sa kontajner JSP vracia k bodu 6.

### Skriptovacie značky

Dokument JSP obsahuje dva druhy značiek resp. elementov a to HTML a príkazy JSP. HTML elementy sú ohraničené špicatými zátvorkami (znakmi nerovnosti < a > ). Príkazy JSP špicaté zátvorky a znak %. Technológia JSP používa tri druhy skriptovacích elementov a to deklarácia, výrazy a skriplety.

#### Deklarácia

Deklarácia sa vytvára tak, že sa zapíše v jazyku Java medzi značky <%! a %>.
Príklad:

```
<%! int pocet=100; %>
```

Príklad vytvorí premennú „pocet dátového typu int" a inicializuje sa na hodnotu 100. Hodnota premennej sa môže meniť. K inicializácii dokumentu dochádza veľmi zriedka (možno ho pokladať za jednorazovú činnosť).

#### Výrazy (Expressions)

Výraz JSP vzniká napísaním výrazu v jazyku Java a uzatvorenia ho medzi značky <%= a %>.

```
<%= pocet+1 %>
```

Výraz JSP sa vyhodnotí ako 101. Pri návšteve stránky sa na miesto premennej počet doplní jej hodnota t. j. 100. Dôležité je, že výraz „pocet + 1" nemení hodnotu premennej „pocet", ktorá ostáva na hodnote 100.

#### Skriplety

Skriplet časť kódu v jazyku Java ohraničený znakmi <% a %>.

```
<%
For (int i=100; i >=0; i--){
%>
	Na polici stojí <%= i %> fľašiek piva. <br>
<%
}
%>
```

Alebo

```
<%
For (int i=100; i >=0; i--){

	out.println("Na polici stojí" + i + "fľašiek piva."`;
}
%>
```

Rozdiel medzi skripletom a deklaráciou možno popísať nasledovne. Pri deklarácií je hodnota „pocet" inicializovaná na 100, to však prebieha len pri inicializácií dokumentu (čo nie je až tak často). Skriplet je prevedený pri každej požiadavke na stránku, t. j. premenná i je nastavená na 100, ale každou návštevou sa znižuje až kým jej hodnota nie je 0.

Prehľad elementov kódu JSP|  | Deklarácia | Skriplet | Výraz |
| --- | --- | --- | --- |
| Znaky uzatvorenia | <%! %> | <% %> | <%= %> |
| Obsahuje | Jednu alebo viacej deklarácií v jazyku Java. | Kód v jazyku Java. | Jeden výraz v jazyku Java. |
| Účel | Vytvorí názov a môže mu priradiť i hodnotu. | Poskytuje informáciu systému, aby urobil určitú akciu. | Vracia hodnotu. |
| Spustenie | Pri prvej návšteve stránky alebo v okamihu, keď kontajner JSP opätovne inicializuje stránku. | Kedykoľvek, keď niekto navštívi stránku. | Kedykoľvek, keď niekto navštívi stránku. |
|

#### Komentáre

Komentár je časť textu, ktorý neprekladá ani kontajner JSP ani webový prehliadač. 
Príklady komentárov:

```
<%!
	int count=100; //Hodnota premennej count
%>

<!- Zobrazí inzerát číslo ->

<%-
	Za predpokladu, že máme obrázky očíslované
	od 100 do 111.
-%>
```

### Platnosť a životnosť identifikátorov

**Základné definície**

**Názov (identifikátor)** je slovo použité k označeniu niečoho napr. názvy premenných, názvy metód a pod. 

**Platnosť** názvu je oblasť kódu, v ktorej je možné daný názov používať pre označenie určitého významu.

**Životnosť** názvu je dynamický interval, ktorý určuje, ako dlho bude názov rezervovaný v pamäti. 
Lokálna premenná metódy (premenná s platnosťou metódy) je deklarovaná vo vnútri metódy jazyka Java. Platnosť tejto premennej sa obmedzuje iba na danú metódu. Životnosť premennej sa obmedzuje na jedno volanie metódy. Ak je metóda volaná po druhýkrát, je premenná znovu vytvorená a opätovne inicializovaná.

Premenná na úrovni triedy (premenná s platnosťou triedy) je deklarovaná mimo metódy. Platnosť tejto premennej môže zahrňovať mnoho metód. Premenná prežije zavolanie jedinej metódy a pokiaľ je metóda zavolaná po druhýkrát, premenná sa znovu nevytvára a nie je znovu inicializovaná.
Príklad:

```
<%!
	int i=30;
	
	public void mojaMetoda (JspWriter out) throws Exception {
		int j=10;
		out.println("Vnútri metódy: sa i rovná" + i);
		out.println("Vnútri metódy: sa j rovná" + j);
		i++;
}
%>
```

```
Mimo metódy: <br />
i sa rovná <%= i %>. <br />
Keď sa pričíta k premennej i hodnotu 1 <% i++ %> bude
sa hodnota premennej i rovnať <%= i %>. <p>

Volanie metódy mojaMetoda():<br />
<% mojaMetoda(out); %><br />
<% mojaMetoda(out); %><br />
```

Premenná j je deklarovaná vnútri metódy mojaMetoda () t. j. premenná j je lokálnou premennou tejto metódy. Prístup k tejto premennej má len kód vnútri danej metódy. Premenná i nie je deklarovaná vnútri metódy t. j. má teda platnosť triedy, čo znamená, že ju možno používať na celej JSP stránke. Hodnota premennej i má platnosť triedy, takže jej hodnota je inicializovaná len pri inicializácií dokumentu JSP, tak pri ďalšej návšteve táto hodnota sa mení.

Premenná i nie je deklarovaná vo vnútri metódy. Má teda platnosť triedy. Je ju možné používať na celej stránke. Premenná i má rovnako ako iné premenné s platnosťou triedy, dlhú životnosť. Existuje tak dlho, dokiaľ nie je odstránená stránka JSP, na ktorej bola definovaná. Hodnota 30 je inicializovaná iba pri inicializácií dokumentu JSP. Keď premenná i objaví na stránke po druhýkrát, rovná sa jej hodnota už číslu 31 a nie 30.

Referencie
----------

1. 1 2 3 4 5 6 7 8 9 10 11 12  Burd, Burd, Barry. 2003. JSP: JavaServer Pages Podrobný průvodce. Praha : Computer Press, 2003. 80-7226-804-X.