JavaServer Pages

JavaServer Pages – technologija, leidžianti dinamiškai generuoti HTML, XML, ar kito tipo puslapius. Ši technologija suteikia galimybę į statinį puslapį įterpti Java kodą ir kitą dinaminį turinį.

JSP puslapyje kaitaliojasi įprastine HTML kalba parašyti fragmentai bei java kalba parašytos sekcijos. J2EE serveris vykdo puslapyje esantį java kodą kuris iš anksto specialia JSP direktyva deklaruotiems kintamiesiems priskiria reikiamas reikšmes. Kita JSP direktyva šias reikšmes galima reikiamoje vietoje įterpti į dokumentą.

Gerai parašytoje sistemoje JSP puslapio kodas atsakingas tik už paties dokumento generavimą. Sąveika su duomenų bazėmis, sudėtingesni skaičiavimo algoritmai, sprendimų priėmimas bei kiti panašūs algoritmai turi būti koduojami aukštesniame, EJB lygyje (JSP puslapis turi kviesti EJB modulius).

Paprastas pavyzdys 
<html>
  <body>
<%!String intarpas; %>
    <p>Cia paprastas HTML tekstas</p>
<%
  // O čia java kodas:
  int s = 0;
  for (int i = 1; i < 10; i++)
    s += i;
  intarpas = "Skaiciu nuo vieno iki devyniu suma: "+s;
%> 
</pre>
<p>Java kodo rezultatas:</p>
<b><i><u> <%= intarpas %></b></i></u>
  </body>
</html>

Puslapis naršykėje atrodys taip (tikrinta su JOnAS):

Čia paprastas HTML tekstas

Java kodo rezultatas:
 Skaičių nuo vieno iki devynių suma: 45

Pavyzdys su ciklu 
JSP nesunku generuoti ir iš anksto nežinomo ilgio sąrašą, lentelę ar kitą panašų dokumento elementą. Šiuo atveju programuojamas java ciklas su jame esančia HTML sekcija, kuri į generuojamą dokumentą keliskart įterpiama pakartotinai:

<ul>
<%
 for (int i = 0; i <3; i++)
   {
     %>
     <li> <%=i %> </li>
     <%
   }
%>
</ul%>

Ši seka generuos trijų eilučių sąrašą:
<li>1<li>
<li>2<li>
<li>3<li>

Parametrai 
JSP java kodas gali pasiekti keletą iš anksto apibrėžtų kintamųjų, iš kurių svarbiausias yra request (angl užklausa). Iš request objekto galima sužinoti, kokie buvo puslapio kvietimo parametrai (jei puslapis generuojamas kaip vartotojo atsakas į užpildyta HTML formą) bei kokie yra anksčiau toje naršyklėje pasidėti slapukai. Slapukams padėti naudojamas kitas iš anksto apibrėžtas kintamasis, response. Slapukai dažniausiai reikalingi įsiregistravimui į slaptažodžiu apsaugotą sistemą.

JSP puslapio dalys 

JSP puslapis paprastai turi tokias dalis:
 statiniai duomenys, pavyzdžiui, HTML
 JSP direktyvos (directives), pavyzdžiui, „include“ direktyva
 JSP skripto elementai ir kintamieji
 JSP veiksmai
 papildomi (custom) tag'ai

Statiniai duomenys 

Statiniai duomenys yra tiesiogiai perrašomi į HTTP atsakymą. Taigi paprastas HTML failas yra suprantamas kaip korektiškas JavaServer puslapis be jokių specifinių JSP elementų. Tokiu atveju į HTTP atsakymą visą laiką būtų siučiama ta pati informacija. Bet JSP tikslas yra papildyti puslapį dinaminiu turiniu, todėl vien tik paprasto HTML pateikimas JSP kompiliatoriui retai kada yra prasmingas.

JSP direktyvos 

JSP direktyvos kontroliuoja kaip JSP kompiliatorius generuoja servletą. Žemiau pateiktas galimų direktyvų sąrašas:

 include – Include direktyva informuoja JSP kompiliatorių įterpti () pilną failą į redaguojamą. Įterpimą galima įsivaizduoti kaip veiksmą „įterpti“ toje vietoje kur įrašyta direktyva. Include direktyva funkcionuoja panašiai kaip include C preprocesoriuje.
     <%@ include file="betkoksfailas.jspf" %>
 page – Yra keletas page direktyvos variantų:

Pavyzdžiai:
   <%@ page import="java.util.*" %>
   <%@ page contentType="text/html" %>
   <%@ page isErrorPage=false %>
   <%@ page isThreadSafe=true %>

Tik import direktyva gali būti naudojama daugiau nei vieną kartą tame pačiame JSP puslapyje.

 taglib – Taglib direktyva nurodo kad bus naudojama JSP žymių () biblioteka. Direktyva reikalauja kad būtų nurodytas prefiksas (prefix) ir tag'o biblioteką aprašantis URI.
     <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

JSP skripto elementai ir kintamieji

Standartiniai skripto kintamieji 
Visąlaik prieinami skripte yra šie kintamieji:
 out – JSPWriter, naudojamas perduoti duomenis į HTTP atsakymo srautą (stream).
 page – Pats servletas.
 pageContext – PageContext objekto instanc'as (?lt) laikantis su visu puslapiu susijusią informaciją. Tokiu būdu keliems JSP gali būti perduodamas tas pats HTML puslapis.
 request – HTTP request objektas.
 response – HTTP response objektas.
 session – HTTP session objektas kuris gali būti naudojamas sekti vartotojo sesijai tarp atskirų puslapių.

J2EE