JSP Veebindus on üheksakümnendatest aastatest alates pidevalt kasvanud ning mitmed firmad on jõudumööda lahendusi pakkunud, mis peaksid nii kasutajate kui programmeerijate elu kergemaks tegema. Algsete CGI- programmide kõrvale on mõeldud hulga vahendeid. CGI-programmiks võis olla igas keeles kirjutatud programm, mis kasutaja saadetud andmed sai keskkonnamuutujast (get-meetod) või standardsisendist (post-meetod) ning väljundi saatis standardväljundisse, mis sealt omakorda kasutajale suunati. Ajapikku mõeldi välja vahendeid, kus õnnestus vähema koodikirjutamisega luua veebilehti. Et ei peaks programmi sisse pikki staatilisi tekste kirjutama või neid mujalt failidest lugema, vaid et võiks üksikud arvutatavad kohad kergesti HTML-lehe sisse kirjutada. Nii loodi PHP, ASP ning kuna end veebispetsideks pidavad Java loojad ei tahtnud rongist maha jääda, tuli neilgi oma vahend selleks teha, mille nimeks sai Java Server Pages ehk JSP. Tutvustavates artiklites märgitakse, et kuna JSP loodi ASP-st hiljem, siis oli võimalik varem tehtud vigu arvestada ning JSP võimalikult töökindlaks ning rudimendivabaks teha. Võibolla on neil osalt õigus, aga eks igaüks pea omaloodut kiitma, oma laps ikka kõige armsam. Kirjutatav tekst püütakse jätta võimalikult HTMLi sarnaseks, et algsel tutvumisel vaatepilt liialt ära ei ehmataks. Programmi käsud ning väljastatavad väärtused tuleb kuidagi muust tekstist eristada. JSP (ning ASP) juures on koodi algustunnuseks "<%" ning lõputunnuseks "%>", nii et kogu kirjutatav tekst jääb nurksulgude ning protsendimärkide vahele. Kuna protsendiga algavat elemendi nime HTML-is pole, siis õnnestubki algul veebiserveris läbi vaadata lehe kood, käivitada sisse kirjutatud käsud ning saata tulemus kasutaja seilurile. Kui tahetakse avaldise väärtus lihtsalt kasutajale saata, siis tuleb koodiosa alustada sõnega "<%=".
<% for(int i=1; i<=20; i++){ %>
<%= i*i+"
" %>
<% } %>
Suur osa aktiivsete veebilehtede võludest ja võimalustest on
seotud sellega, et serveris koostatakse kasutajalt saadetud andmete
põhjal temale sobiv lehekülg. Tavaliseks veebilehele andmete
saatmise formaadiks on lehe aadressile järgnev küsimärk, mille järgi
tulevad parameetrid ning nende väärtused. Näiteks
nimeleht.html?nimi=Juku&vanus=15 . Käsu getParameter abil
leitakse JSP lehel parameetri nime järgi kasutaja saadetud väärtus.
Oa sees on nüüd <%=nimehoidja.annaNimi() %> Oa kirjeldamisel lisatud parameeter scope="session" tähendab, et oas paiknevad andmed ei hävine koos lehe väljastamisega, vaid kui sama kasutaja mõne aja (sessiooni kestus, vaikimisi paarkümmend minutit) pärast uuesti sama oa poole pöördub, on seal andmed, mis eelmisest külastusest jäid. Nii on võimalik iseenesest pideva ühenduseta HTTP protokolli abil luua kasutajale mulje nagu oleks tema andmed pidevalt meeles ning järgmisel korral mäletatakse, mida kasutaja viimati tegi. Kui eelmises näites teatati pidevalt, et nimeks on Triin, siis alla näitesse teisel korral sisenemisel on seal juba olemas eelmisest korrast meelde jäetud Katrin.
Oa sees on nüüd
<%=nimehoidja.annaNimi() %>
Suure osa loodud ubade ülesandeks on andmebaasist
saabunud teabe edastamine. JSP lehel saab küsida ning sisestada
andmeid soovitud kujul, oa ülesandeks jääb draiveri ja ühenduste eest
hoolitsemine ning niimoodi võib veebilehe kirjutaja eest peita
tehnilise keerukuse ning jätta selle kergemini kogu asutuse peale paari
asjatundja hooleks. Järgnev uba loob konstruktori käivitamisel
ühenduse andmebaasiga ning see jääb avatuks kogu oa eluea jooksul.
Avalikult kasutatavad on kolm meetodit on tabeli loomiseks, andmete
küsimiseks ning sisestamiseks. Andmetabel koostatakse ainult ühe
kirje ning ühe väljaga. Selles peaks leiduma poes parasjagu
müüdavate pallide arv. Andmevahetusega seotud käsud algavad get-i
ja set-iga seetõttu, et hiljem võiks palliarv'u oa omadusena kasutada.
Kui sama suuruse muutmiseks on siinkirjeldatud kujul meetodid, siis
suudetakse nende omadustega vastavas keskkonnas automaatselt
ümber käia.
package k1;
import k1.*;
import java.sql.*;
public class Baasiuba1{
Connection cn;
Statement st;
public Baasiuba1(){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
cn=DriverManager.getConnection("jdbc:odbc:baas1", "", "");
st=cn.createStatement();
}catch(Exception e){
System.out.println(e);
}
}
public void looBaas() throws SQLException{
String lause="CREATE TABLE pallid (kogus int);";
st.executeUpdate(lause);
lause="INSERT INTO pallid (kogus) values ('0');";
st.executeUpdate(lause);
}
public void setPalliarv(int arv) throws SQLException{
String lause="UPDATE pallid SET kogus="+arv+";";
st.executeUpdate(lause);
}
public int getPalliarv() throws SQLException{
String lause="SELECT kogus FROM pallid;";
ResultSet rs=st.executeQuery(lause);
rs.next();
return rs.getInt("kogus");
}
}
Baasiloomine tuleb käivitada tavalise käsklusega. Pallide
arvu teada saamiseks piisab pallibaasi-nimelise oa omaduse palliarv
küsimisest.