JSP (JavaServer Pages) tekniikka Lähde Arvo Lipitsäinen, JSP JavaServer Pages, 2003



Samankaltaiset tiedostot
directive attr1= value1 attr2= value2 %>

JSP (JavaServer Pages) tekniikka Lähde Arvo Lipitsäinen, JSP JavaServer Pages, 2003

XHTML - harjoitus. Tehtävä1: Tee xhtml tiedosto käyttäen notepad (muistio) ohjelmaa. Tiedoston tallennus notepad (muistio) ohjelmassa:

Tutkitaan sitten HTML-dokumenttien anatomiaa, jotta päästään käsiksi rakenteisten dokumenttien käsitteistöön esimerkkien kautta.

Alkuun HTML5 peliohjelmoinnissa

Java-kielen perusteet

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

Java-kielen perusteet

Listarakenne (ArrayList-luokka)

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Java-kielen perusteet

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Java-kielen perusteita

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Olio-ohjelmointi Javalla

Taulukot. Jukka Harju, Jukka Juslin

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

1 Tehtävän kuvaus ja analysointi

Ohjelmoinnin peruskurssi Y1

Java-kielen perusteita

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

PHP tehtävä 3 Atte Pekarinen TIKT13A

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

Proseduraalinen dokumentti: sisältö, rakenne ja ulkoasu yhdessä, esim. worddokumentti

Ohjelmoinnin perusteet Y Python

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ehto- ja toistolauseet

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

7. Näytölle tulostaminen 7.1

Sisältö. 22. Taulukot. Yleistä. Yleistä

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Metodien tekeminen Javalla

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Ohjelmoinnin perusteet Y Python

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Tietotyypit ja operaattorit

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Attribuutit. Copyright IT Press Tämän e-kirjan kopiointi, tulostaminen ja jakeleminen eteenpäin luvatta on kielletty.

Ohjelmoinnin jatkokurssi, kurssikoe

Sisältö. 2. Taulukot. Yleistä. Yleistä

Rajapinta (interface)


Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

17. Javan omat luokat 17.1

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

Mikä yhteyssuhde on?

1. Omat operaatiot 1.1

ITKP102 Ohjelmointi 1 (6 op)

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

14. Poikkeukset 14.1

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely.

16. Javan omat luokat 16.1

Sunin määrittelemä JSP 1.1 (javaserver pages) yhdistää

Harjoitustyö (TKO_2023)

Ohjelmoinnin perusteet Y Python

9. Periytyminen Javassa 9.1

Ohjelmointi 2 / 2010 Välikoe / 26.3

17. Javan omat luokat 17.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Java-API, rajapinnat, poikkeukset, UML,...

Verkkosivut perinteisesti. Tanja Välisalo

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

7. Oliot ja viitteet 7.1

15. Ohjelmoinnin tekniikkaa 15.1

9. Periytyminen Javassa 9.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Olio-ohjelmointi Syntaksikokoelma

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

15. Ohjelmoinnin tekniikkaa 15.1

Harjoitustyö: virtuaalikone

/ * PROSESSORIN C-KIELINEN OHJELMA */

14. Poikkeukset 14.1

Microsoft Visual Studio 2005

Luokan sisällä on lista

P e d a c o d e ohjelmointikoulutus verkossa

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Ohjelmoinnin perusteet Y Python

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Luento 5. Timo Savola. 28. huhtikuuta 2006

4. Luokan testaus ja käyttö olion kautta 4.1

Digitaalisen median tekniikat. JSP ja XML

Ohjelmointi 2 / 2011 Välikoe / 25.3

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Transkriptio:

1(63) JSP (JavaServer Pages) tekniikka Lähde Arvo Lipitsäinen, JSP JavaServer Pages, 2003 mahdollistaa dynaamisen web-sisällön luonnin eli HTML-.DHTML-, XHTML- ja XML-dokumentit luodaan palvelimella dynaamisesti ennen dokumenttien lähettämistä käyttäjän-ohjelmistolle tiedosto tallennetaan jsp-loppuisena jsp-sivuun upotettu koodi suoritetaan palvelimella ennen kuin sivu lähetetään selaimeen Web-palvelin JSP-Container HTTP-pyyntö HTML-sivu käännös selain ajo Web-palvelimessa on JSP-Container alusta, joka tekee JSP-sivusta servletin, jonka se kääntää ja käynnistää. Java-serveltti JSP-sivun kääntäminen serveletiksi tapahtuu ensimmäisellä JSP-sivun kutsukerralla, seuraavan kutsun yhteydessä JSP- Container kutsuu valmista servlettiä. Jos jsp-tiedosto muuttuu, Container-alusta kääntää sen uudelleen serveltiksi. JSP-tiedosto

2(63) EL (Excression Language) ja JSTL Lähde: Arvo Lipitsäinen, JSTL- JavaSrver Pages Standard Library, 2004 JSTL on JSP:n standardi tagikirjasto JSTL 1.0 kuvaus valmistui 2002 Päämäärä helpottaa JSP-sivujen kirjoittamista Sisältää neljä tagikirjastoa: o Ydinkirjasto o XML:n käsittely o Kansainvälistäminen o Relaatitietokannan käsittely Sisältää EL (Expression Language)-lausekielen

3(63) Esimerkki: <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <%@ page isthreadsafe="true"%> <%@page import="java.util.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html xmlns="http://www.w3.org/1999/xhtml"> <html> <body> <h3>jstl-toimintoja</h3> <p> <c:out value="hyvää Päivää!" /><br><br> Pieni yhteenlasku EL-kielellä: <c:out value=" 1 + 2 = ${1 + 2}" /><br><br> Kertolasku muuttujilla luku1 = 5 ja luku2 = 9<br> <c:set var="luku1" value="5" /> <c:set var="luku2" value="9" /> luku1 * luku2 = <c:out value=" ${luku1 * luku2}" /> </p> </body> </html> tulostuu:

4(63) EL-kielen literaalit Literaalit ovat eri tyyppisten vakioiden merkitsemistapoja. Tyyppi Boolean true tai false. Esim. true, false Kuvaus Kokonaisluku Numeroita 0-9, joita voi edeltää etumerkki ( + tai - ). Esim. 123, -29 Desimaaliluku Numeroita 0-9, joiden välissä voi olla piste erottamassa kokonaisosan desimaaleista. Numeroiden edessä voi olla etumerkki ( + tai - ) ja numeroiden jäljessä voi olla e tai E - kirjaimella erotettu eksponentti, joka on kokonaisluku. Esim. 52.99, -10.0, 1.2e5 Merkkijono Lainausmerkkien (") tai hipsukoiden (') sisällä. Esim. "Ville", 'Veera'. Merkkijonossa esiintyvää "- ja \-merkkiä edeltää \-merkki. Esim. "C:\\levy", "Nimi \"Matti\" on yleinen" Null-osoite null

5(63) Operaattorit Operaattori Kuvaus. ominaisuuden haku [] taulukko () lausekkeiden ryhmittely + yhteenlasku - vähennyslasku tai negatiivinen etumerkki / tai div jakaminen % tai mod jakojäännös == tai eq yhtäsuuruus!= tai ne eri suuruus < tai lt pienempi kuin > tai gt suurempi kuin <= tai le pienempi tai yhtä suuri kuin >= tao ge suurempi tai yhtä suuri kuin && tai and looginen and-operaatio tai or looginen or-operaatio! tai not komplementti empty tyhjä arvo (null, tyhjä merkkijono tai tyhjä taulukko) Operaattorit: [ ] ja. Olion ominaisuuteen voi viitata joko piste-operaattorin avulla tai taulukon nimettynä alkiona eli oikeasti kutsutaan ko. olion getattribuutti-metodia: tuotex.koodi tuotex[ koodi ]

6(63) Esimerkki. <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <%@ page isthreadsafe="true"%> <%@ page import="java.util.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>tuote</h3> <p> <c:out value="${tuotex.koodi}" /><br> <c:out value="${tuotex.nimi}" /><br> <c:out value="${tuotex.hinta}" /><br><br> <c:out value="${tuotex['koodi']}" /><br> <c:out value="${tuotex['nimi']}" /><br> <c:out value="${tuotex['hinta']}" /><br> </p> </body> </html> tulostuu Tuote 123 Backgammon 14.50 123 edellyttää että: Ohjelman pääserveltti on lähettänyt attribuutin tuotex, joka on Tuoteluokan olio ja jolla on getkoodi(),getnimi() ja gtehinta() metodit. Backgammon 14.50

7(63) EL tuntee seuraavat sisäiset objektit: Sisäinen objekti pagescope requestscope sessionscope applicationscope param paramvalues header headervalues initparam cookie pagecontext Kuvaus sisältää kaikki oliot, joiden näkyvyys on sivu (page) sisältää kaikki oliot, joiden näkyvyys on pyyntö (request) sisältää kaikki oliot, joiden näkyvyys on istunto (session) sisältää kaikki oliot, joiden näkyvyys on sovellus (application) sisältää pyynnön parametrit sisältää pyynnön parametrit merkkijonotaulukkona sisältää http-pyynnön otsikkotiedot sisältää http-pyynnön otsikkotiedot merkkijonotaulukkona sisältää init-paramterit, jotka annetaan esim. web.xmlkuvaimessa sisältää cookie-tiedot sisältää javax.servlet.jsppagecontext-olion

8(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>muuttujan näkyvyys</h3> <p> <c:set var="tunnus" value="abc" scope="page" /> <c:set var="tunnus" value="kissa" scope="request" /> <c:set var="tunnus" value="kävelee" scope="session" /> <c:set var="tunnus" value="tikapuita" scope="application" /> <c:set var="tunnusx" value="taivaaseen!" scope="session" /> tunnus: <c:out value="${tunnus}" /><br> pagescope.tunnus: <c:out value="${pagescope.tunnus}" /><br> requestscope.tunnus: <c:out value="${requestscope.tunnus}" /><br> sessionscope.tunnus: <c:out value="${sessionscope.tunnus}" /><br> applicationscope.tunnus:<c:out value="${applicationscope.tunnus}" /><br> tunnusx: <c:out value="${tunnusx}" /><br> </p> </body> </html> Tulostaa:

9(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>header</h3> <c:out value="user-agent: ${header['user-agent']}" /><br> <c:out value="accept-encoding: ${header['accept-encoding']}" /><br> <c:out value="accept-language: ${header['accept-language']}" /><br> <c:out value="accept-charset: ${header['accept-charset']}" /><br> <c:out value="accept: ${header['accept']}" /><br> </body> </html>

10(63) Yleiskäyttöiset tagit (Core tag library) <c:out> syntaksi: toiminto laskee lausekkeen arvon, muuttaa sen merkkimuotoon ja kirjoittaa tuloksen JspWriter-tyyppiseen out-tietovirtaan <c:out value= arvo [escapexml= {true false} ] [default= oletusarvo] /> tai <c:out value= arvo [escapexml= {true false} ] > oletusarvo </c:out> value= arvo tulostettava lauseke escapexml= {true false} default= oletusarvo muutetaanko merkit: <,>,&, ja vastaaviksi merkkientiteeteiksi: <,>,&,&#039; ja " Oletusarvo true, muutetaan ilmoittaa tulostettavan tiedon oletusarvon, jos lausekkeen arvo lakettuarvo on null Esim. <h3>c:out-kokeilut</h3> <br/> seuraava lause tulostaa lauekkeen arvon: <c:out value ="1 + 2 = 3 " /> <br/> tulostuu

11(63) <c:set> toiminta antaa muuttujalle arvon Syntaksi 1: muuttuja saa annetun arvon: <c:set value="arvo" var="muuttujannimi" [scope="{page reguest session application}"]/>, missä attribuutti value ilmoittaa muuttujan saaman arvon, attribuutti var muuttujan nimen ja valinnainen attribuutti scope muuttujan näkyvyysalueen. Oletusnäkyvyys-alue on page. Syntaksi 2: muuttuja saa elementin sisällön arvokseen: <c:set var="muuttujannimi" [scope="{page reguest session application}"]> sisältö </c:set> Syntaksi 3: Kohteena olevan olion ominaisuus saa annetun arvon: <c:set value="arvo" target="kohdeolio" property="ominaisuudennimi"/>, missä attribuutti value ilmoittaa ominaisuuden saaman arvon, attribuutti target kohteena olevan olion ja attribuutti property olion ominaisuuden nimen. Syntaksi 4: Kohteena olevan olion ominaisuus saa elementin sisällön arvokseen. <c:set target="kohdeolio" property="ominaisuudennimi"> sisältö </c:set>

12(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>muuttujan arvo</h3> <c:set var="testi" scope="request"> Windowsissa vakava tietoturvaaukko </c:set> <c:out value="${testi}" /><br> </body> </html> Tulostuu:

13(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <%@page import="tuotteet.tuote" %> <body> <h3>tuote</h3> <c:set value="10001" target="${tuotex}" property="koodi" /> <c:set value="backgammon" target="${tuotex}" property="nimi" /> <c:set value="20.56" target="${tuotex}" property="hinta" /> <br/> <c:out value="${tuotex.koodi}" /><br> <c:out value="${tuotex.nimi}" /><br> <c:out value="${tuotex.hinta}" /><br> </p> </body> </html> tulostuu: 10001 Backgammon 20.56 Ehdolliset toiminnat <c:if> if-lause Syntaksi: <c:if test="ehto" var="muuttujannimi" [scope="${page request session application}"] /> tai <c:if test="ehto" [var="muuttujannimi"] [scope="${page request session application}"]> sisältöä </c:if> Attribuutin test arvo (true/false) määrittää, prosessoidaanko elementin sisältö vai ei Attribuutin var arvoksi tulee ehtolausekkeen arvo (true/false) Attribuutti scope ilmoittaa muuttujan näkyvyysalueen, oletus on page

14(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>el-kielen if-lauseen testi</h3> <c:if test="${servletinilmoitus==true}" var="ilmoitus"> <br/> <c:out value="tervetuloa / VÄLKOM / WELCOME!" /> </c:if> <br/><br/> <c:out value="ilmoitus=" /> <c:out value="${ilmoitus}" /> <br/> <c:if test="${ilmoitus==true}" > <br/> <c:out value="näkemiin / ADJÖ / GOOD BYE!" /> </c:if> </body> </html> tulostuu: Pääservletti on käynnistänyt sivun seuraavasti: request.setattribute ("servletinilmoitus",true); disp = request.getrequestdispatcher("web-inf/koe4.jsp"); disp.forward(request, response);

15(63) <c:choose>,<c:when>,<c:otherwise> Monivalinta, vastaa javan switch-case-lausetta syntaksi: <c:choose> <c:when test= ehto1>valinta 1 </when> <c:when test= ehto2>valinta 2 </when> <c:when test= ehton>valinta N </when> <c:otherwise>viimeinen valinta </otherwise> </choose>

16(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> <title>monivalinta-lause</title> </head> <body> <form> Kirjoita nimi: <input type="text" name="nimi" size="15" /> <br/> Valitse nimi: <select name="kieli"> <option>suomi</option> <option>ruotsi</option> <option>englanti</option> <option>espanja</option> <option>muu</option> </select> <br/> <input type="submit" value=" - Paina - " /> </form> <br/> <h2> <c:choose> <c:when test="${param.kieli==\"suomi\"}" > Terve, </c:when> <c:when test="${param.kieli==\"ruotsi\"}" > Tjänare, </c:when> <c:when test="${param.kieli==\"englanti\"}" > Hello, </c:when> <c:when test="${param.kieli==\"espanja\"}" > Hola, </c:when> <c:when test="${param.kieli==\"muu\"}">?!# $ 6??#@$%&?ÅÄÖ, </c:when> <c:otherwise> </c:otherwise> </c:choose> <c:out value="${param.nimi}" /> </h2> </body> </html> tulostaa, kun käyttäjä on kirjoittaa nimen, valitsee kielen ja painaa paina-nappulaa:

17(63) Toistorakenne <c:foreach> A) Taulukkorakenteen läpikäynti <c:foreach [var= varname ] items= collection [varstatus= varstatusname ] [begin= alku end= loppu [step= askel ]]> Sisältöa <c/foreach> Items on pakollinen ja voi olla : o Tavallinen taulukko o Collection-luokan olio,vector, ArraytList,LinkedList,Treeset o Iterator-, Enumeration- tai Map-olio o String-olio, joka sisältää pilkulla toisistaa erotettuja merkkijonoja var on muuttujan nimi, jonka avulla viitataan käsiteltää taulukon alkiota begin on taulukon indeksi,josta taulukon läpikäynti alkaa, end on indeksi, johon läpikäynti päättyy ja step ilmaisee indeksin korotuksen (vrt. Java for-lause)

18(63) Esim. <body> <h2>tuoteluettelo </h2> <table border="1"> <th>tuotteen koodi</th> <th>tuotteen nimi</th> <th>hinta (eur)</th> <c:foreach var="tuote" items="${tuotelista}"> <tr> <td><c:out value="${tuote.koodi}" /> </td> <td><c:out value="${tuote.nimi}" /> </td> <td><c:out value="${tuote.hinta}" /> </td> </tr> </c:foreach> </table> </body> </html> Pääservletissä on tuoteluettelon aktivointi seuraava: ArrayList lista = new ArrayList(); for (int i=0; i<10;i++) lista.add(new Tuote(i+10,"tuote"+i+10, ( 2.07+i))); tulostuu: request.setattribute( "tuotelista", lista); disp = request.getrequestdispatcher("web-inf/koe6.jsp"); disp.forward(request, response);

19(63) B) Toistaminen n-kertaa <c:foreach [var= varname ] [varstatus= varstatusname ] begin= alku end= loppu [step= askel ]> Sisältöa <c/foreach> var on indeksi, begin indeksin alkuarvo ja end loppuarvo, step ilmaiseen indeksin kasvatuksen (vrt. Java for-lause) Esim. <h3>kierrokset</h3> <c:foreach var="i" begin="1" end="5" > <c:out value="kierros ${i}"/> <br/> </c:foreach> tulostuu:

20(63) Internet-resurssin käsittely <c:import> tuo JSP-sivulle dataa ulkoisesta URL-osoitteesta syntaksi: <c:import url= url [context= context ] [var= varname ] [scope= {page request session application} ] [charencoding= charencoding ]> sisältö </c:import> url ilmaisee URL-osoitteen, mistä sisältö haetaan, context ilmoittaa perusosoitteen, jos url on suhteellinen osoite esimerkkejä URL-osoitteista: o Absolute URL: <c:import url="http://sample.com/welcome.html"/> o Relative URL (to the current context): <c:import url="/copyright.html"/> o Relative URL with a foreign context: <c:import url="/mylogo.html" context="/common"/> var ilmoittaa muuttujan, johon haettu sisältö tallentuu charencoding ilmaisee merkkien koodaustavan scope ilmaisee muuttujan näkyvyyden

21(63) Esim. <body> <h2>jstl-esimerkki: import-tagi</h2> <p>seuraava teksti on peräisin teksti.txt-tiedostosta</p> <c:import url="teksti.txt" /> </body> </html> tulostuu: Kun teksti.txt:n sisältö on: Abc kissa kävelee tikapuita pitkin taivaaseen. Tikapuut halkesi, pikku kissa putosi. MIAUUUU!

22(63) JSP-sivun ja pääservletin välinen kommunikointi Jsp-sivu vie tietoa pääservletille kahdella tavalla: A) Linkin-avulla B) Painikkeen avulla A) Linkki Syntaksi: <a href= pääservletti? parametri1=arvo1 & parametri2=arvo2... > Esim. <a href="kokeilut?action=hae&asiakas=mina&salasana=itse">hae</a> B) Painike Syntaksi: <form action= pääservletti method= get/post > <input type= submit name= toiminta value= paina > </form>

23(63) Esim. <form action="kokeilut" method="get" > Paikka: <select name="paikka" > <option value="30" <c:if test="${paikka==\"30\"}">selected </c:if> > Permanto(30 eur) </option> <option value="40" <c:if test="${paikka==\"40\"}">selected </c:if> > Parveke (40 eur)</option> <option value="50" <c:if test="${paikka==\"50\"}">selected </c:if> > Aitio (50 eur)</option> </select> Lippujen lukumäärä: <input type="text" name="maara" size="3" maxlength="3" value="${maara}" > <br/> Yhteensä: <input type="text" name="yhteensä" size="6" readonly value="${yhteensa}"> <br/> <input type="submit" name="action" value="laske"> </form> tulostaa Tilanne Laske-nappulan painalluksen jälkeen:

24(63) Pääservletti vastaanottaa tietoa JSP-sivulta: ServletRequest-luokan metodit: String getparameter(string); String [] getparametervalues(string); Ks. http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/servletrequest.html esim. protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getparameter("action"); RequestDispatcher disp ; if (action!= null && action.equals("laske")) { int paikka =Integer.parseInt(request.getParameter("paikka")); int maara=integer.parseint(request.getparameter("maara")); } int summa = maara*paikka; request.setattribute ("yhteensa",""+summa); request.setattribute("maara",""+maara); request.setattribute("paikka",""+paikka); } disp = request.getrequestdispatcher("web-inf/koe8.jsp"); disp.forward(request, response);

25(63) Pääservletti lähettää tietoa JSP-sivulle: Metodi: void setattribute(string attribuutinnimi, String attribuutinarvo); Esim. <body> <h3>henkilön tiedot </h3> <br/> <form action="kokeilut" method="post"> Kirjaudu: <br/> käyttäjätunnus: <input type="text" name="kayttaja" size="15" maxlength="15" /> <br/> salasana: <input type="password" name="sala" size="5" maxlength="5" /> <br/> <input type="submit" name="action" value="kirjaudu" /> </form> <FORM action="kokeilut" method="get"> <input type="hidden" name="tunnus" value="${tunnus}" > <input type="hidden" name="nimi" value="${nimi}" > <P> First name: <INPUT type="text" name="etunimi" value="${etunimi}" size="25" maxlength="25"><br/> Last name:<input type="text" name="sukunimi" value="${sukunimi}"><br/> email: <INPUT type="text" name="email" value="${email}"><br/> <br/>sukupuoli: <br/> <c:if test="${sex==\"female\"}" > <INPUT type="radio" name="sex" value="male"> Male<BR/> <INPUT type="radio" name="sex" value="female" checked > Female<BR/> </c:if> <c:if test="${sex!=\"female\"}" > <INPUT type="radio" name="sex" value="male" checked > Male<BR/> <INPUT type="radio" name="sex" value="female" > Female<BR/> </c:if>...

26(63) tulostuu, kun käyttäjä avaa ikkunan ensimmäisen kerran: seuraavaksi hän painaa Kirjaudu-nappulaa tulostuu:

27(63) Mitä tapahtuu pääservletin doget-metodissa? protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getparameter("action"); RequestDispatcher disp ; boolean painettu= false; if (action!= null && action.equals("kirjaudu")) { String kayttaja = request.getparameter("kayttaja"); String salasana=request.getparameter("sala"); request.setattribute("tunnus","a1010101"); request.setattribute("nimi","toimitusjohtaja Wilma Lahtinen"); request.setattribute("etunimi", "Ronja"); request.setattribute("sukunimi","röverdotter"); request.setattribute("email","ronja@skog.se"); request.setattribute("sex","female"); } } disp = request.getrequestdispatcher("web-inf/koe8.jsp"); disp.forward(request, response);

28(63) JSP-elementti on olemassa kolmenlaisia elementtejä: A) Direktiivejä (directive element) B) Skriptejä (scripting selement) C) Toimintoelementtejä (action elements) A) Direktiivit direktiivin yleinen muoto: <%@ directive attr1= value1 attr2= value2 %> Direktiivi page Selitys page-direktiivi määrittää useita JSP-sivun ominaisuuksia. Direktiivillä on seuraavat attribuutit: - language ilmoittaa sivulla käytettävän skriptikielen. JSP 1.2 tukee vain Javaa - extends määrittää, mistä luokasta JSP-sivua vastaava servletti periytetään. Tätä attribuuttia ei pidä normaali tapauksissa käyttää - import ilmoittaa ne pakkaukset ja luokat, jotka ovat käytettävissä JSP-sivuilla - session ilmoittaa, onko JSP-sivun mahdollista perustaa istunto - buffer määrittää JSP-sivun puskurointimallin - autoflush määrittää, tyhjennetäänkö puskuri automaattisesti - isthreadsafe ilmoittaa, mikä on JSP-sivun säikeiden turvallisuustaso

29(63) include taglib - info määrittää vapaamuotoisen JSP-sivua koskevan merkkimuotoisen informaation. Informaatio saadaan Servlet.getServletInfo()-metodilla - iserrorpage ilmoittaa, onko JSP-sivu jonkun toisen JSP-sivun virheilmoitussivu - contenttype määrittää JSP-sivun merkkien koodauksen (oletuksena ISO-8859-1) ja JSP-sivun sisältötyypin - pageencoding määrittää JSP-sivun merkkien koodauksen (oletuksena ISO-8859-1) include-direktiivin avulla sijoitetaan JSP-sivulle tekstiä jostakin ulkoisesta tiedostosta JSP-sivun käännöksen aikana taglib-direktiivi ilmoittaa, että JSP-sivu käyttää ulkoista tagikirjastoa Esim. Esim. </body> </html> <%@page import="java.util.*" %> <html> <body> Tänään on <%= new Date().toString() %> </body> </html> <html> <head><title>include-direktiivi</title></head> <body> <%@include file="copyright.html" %> <h1>include</h1> <p>jsp:n include-direktiivin avulla voidaan tuoda tekstiä www-sivulle käännösaikaan. </p> </body> </html> copyright.html-tiedoston sisältö: <hr>copyright 2002 Ville Villaton, Vallattomat & Kumppanit<hr>

30(63) B) Skriptit Skriptielementtien sisään voi kirjoittaa Java-kielisiä käskyjä. Skriptielementtien alkumerkintä on <% ja loppumerkintä on %>. JSP 1.2 määrittää seuraavat skriptielementit: 1) Määrittely (declaration) Esimerkki. 1) määrittely (declaration), esim. <%! int a; %> 2) skriptletti (scriptlet), esim. <% out.println("terve"); %> 3) lauseke (expression), esim. <%= Math.PI*r*r %> <%! Java_tyyppi java_muuttuja ; %> Määrittelyskriptin alkutagi on <%! ja loppustagi on %> määrittää JSP-sivulla käytettäviä muuttujia ja metodeja. Määrittelyjen on oltava täydellisiä käskyjä. Määrittelyelementissä ei voida kirjoittaa out-tietovirtaan. Määrittelyt astuvat voimaan, kun JSP-sivu initialisoidaan. <%! public String poo(int n) { if ( n < 0) return "negatiivinen"; else return "positiivinen"; } %>

31(63) 2) Skriptletti (scriptlet) Skriptletin alkutagi on <% ja lopputagi %> Skriptletissä voi olla kaikkia skriptikielen (Javan) mukaisia rakenteita. Skriptletin suoritus tapahtuu JSP-sivun pyynnön käsittelyn aikana. Skriptletissä voidaan kirjoittaa out-tietovirtaan. Esimerkki. <% if(a < 10) { %> pieni kokonaisluku <% } else { %> suurempi kokonaisluku <% } %> ONGELMA: Kaikilla käyttäjillä ei ole Java-kääntäjää 3) Lauseke (expression) Skriptilausekkeen alkutagi on <%= ja lopputagi on %> JSP-sivun lauseke on skriptikielen (Java-kielinen) lauseke, jonka arvo on lasketaan ja muutetaan String-tyyppiseksi merkkijonoksi. Lausekkeen arvo kirjoitetaan out-tietovirtaan. Lauseke suoritetaan HTTP-pyynnön aikana. Esimerkki. <%= new java.util.date().tostring() %>

32(63) Esimerkki <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>kokeilut</title> </head> <body> <%@ include file="copyright.html"%> <h1>include</h1> <p>jsp:n include-direktiivin avulla voidaan tuoda tekstiä www-sivulle käännösaikaan. </p> <p> Tänään on <%= new Date().toString() %> </p> <%! int luku = 15; %> <%! public String poo(int n){ if(n < 0) return("negatiivinen"); else return("positiivinen");} %> JSP-direktiivi include JSP-lauseke JSP-määrittely: muuttuja luku ja funktio poo JSP-sivulle voidaan sijoittaa skriptejä. Edellinen oli määrittely.<br/> Seuraava on skriptletti. Siinä voi olla mitä tahansa Java-koodia.<br/> <% for(int i = 0; i < 3; i++) skriptletti out.println("hurraa!<br> "); %> Seuraava on lauseke (expression), jonka arvo sijoitetaan sivulle.<br/> Lausekkeen arvo on <%= poo(luku) %> </body> JSP-lauseke </html> tulostuu:

33(63) Java-muuttujien näkyvyys Java-koodi sijoitetaan servletissä juuri siihen paikkaan, missä JSPtagit, <%... %>, ovat. Jos koodissa on määritelty muuttujia, ne voivat näkyä tagien rajoittaman alueen ulkopuolella, paitsi jos ne määritellään java-lohkon sisälle, ne eivät näy toisen java-lohkon sisällä. Esim. 1 <html> <head><title>jsp-sivu </title></head> <body> <center> <h1>jsp-sivu</h1> <br/>ensimmäinnen JSP-lohko <br/> <% String nimi = "Pirkko Paju"; out.println(nimi); %> <br/>toinen JSP-lohko<br/> <% nimi = "Pekka Puska"; out.println(nimi); %> </body> </html> Esim. 3 <html> <head><title>jsp- Sivu</title></head> <body> <center> <h1>jsp-sivu</h1> <br/> Ensimmäinnen JSP-lohko <br/> <% String nimi = "Pirkko Paju"; out.println(nimi); %> <br/>toinen JSP-lohko<br/> <% String nimi = "Pekka Puska"; out.println(nimi); %> </body> </html> Esim. 2 <html> <head><title>jsp- Sivu</title></head> <body> <center> <h1>jsp-sivu</h1> <br/> Ensimmäinnen Java-lohko <br/> <% { String nimi = "Pirkko Paju"; out.println(nimi); } %> <br/>toinen Java-lohko<br/> <% { String nimi = "Pekka Puska"; out.println(nimi); } %> </body> </html>

34(63) Ehtolauseet ja toistorakenteet - JSP-sivulla voidaan käyttöö Javan ehtolauseita ja toistorakenteita. JSPSivu4: <% int a = 2, b = 1; if(a > b) {%> a on suurempi kuin b <% } else {%> b on suurempi kuin a <%} %> Tulostuu: a on suurempi kuin b... <% String [] varit = {"Sininen", "Punainen", "Vihreä", "Keltainen"}; %> <form name=lomake> Valitse väri<br/><br/> <select name=valinta> <% for(int i = 0; i < varit.length; i++) { %> <option><% out.println(varit[i]); } %> </select> </form>... - Tulostuu:

35(63) JSP:n standardin toimintoelementit (standard actions) JSP:ssä on toimintoelementtejä (action), joilla voidaan luoda ja käyttää olioita ja komponentteja. JSP:n standardit toimintoelementit ovat seuraavat: <jsp:usebean> <jsp:setproperty> <jsp:getproperty> <jsp:include> <jsp:forward> <jsp:param> <jsp:plugin>

36(63) <jsp:usebean> <jsp:usebean> -elementin avulla saadaan JSP-sivun käyttöön Java-olio. Toiminto liittää Java-olion annettuun id-attribuutin arvoon. Toiminto etsii ensin annetut kriteerit täyttävää oliota ja jos sellaista ei löydy, se yrittää luoda annettujen attribuuttien mukaisen olion. Olion etsintäkriteerit ovat olion nimi (id-attribuutti) ja näkyvyysalue. Syntaksi: <jsp:usebean id="name" scope="page request session application typespec /> typespec ::=class="classname" class="classname" type="typename" type="typename" class="classname" beanname="beanname" type="typename" type="typename" beanname="beanname" type="typename" <jsp:usebean>-toiminnolla on seuraavat attribuutit: - id id-attribuutti identifioi JSP-sivuun liitetyn olion (olion nimi) - scope scope-attribuutti ilmaisee näkyvyysalueen, missä olio on käytettävissä. Se voi saada jonkin arvoista: page, request, session, application. Oletuksena on page. - class class-attribuutti ilmoittaa JSP-sivuun liitettävän olion luokan - beanname beanname-attribuutti ilmoittaa JSP-sivuun liitettävän JavaBean-komponentin nimen - type type-attribuutti määrittää JSP-sivuun liitettävän muuttujan tyypin. Attribuutin avulla on mahdollista antaa muuttujalle eri tyyppi kuin itse olion tai komponentin tyyppi. Tyyppi voi olla olion tyypin kantaluokka tai rajapinta, jonka olio toteuttaa. Esim. <jsp:usebean id="kori" scope="session" class="kauppa.ostoskori" />

37(63) <jsp:setproperty> annetaan JavaBean-komponentin ominaisuudelle jokin arvo. Syntaksi: <jsp:setproperty name="beanname" { prop_expr } /> Prop_expr ::= property= "*" property="propertyname" [ param="parametername" ] property="propertyname" value="{string <%= expression%>}" <jsp:setproperty>-toiminolla on seuraavat attribuutit: - name name-attribuutti on olio tai JavaBean-komponentti, joka on määritetty aikaisemmin <jsp:usebean>-elementissä. - property property-attribuutti ilmoittaa komponentin ominaisuuden, jota halutaan muuttaa. Jos ominaisuuden arvoksi annetaan "*", elementti etsii kaikki request-olion parametrien nimet, joilla on sama nimi kuin beanname komponentin ominaisuuksilla (attribuuteilla), ja vie parametrien arvot ominaisuuksien arvoiksi. Ko. komponentin ominaisuuksilla pitää olla set-metodit. Parametrit ovat yleensä HTML:n elementtejä, joiden arvot kirjoittaa käyttäjä. - param property saa arvokseen ServeletRequest-olion param-nimisen parametrin. Jos param-määrettä ei ole, property saa arvokseen Servletrequest-olion property-nimisen parametrin arvon. - value value-attribuutti ilmaisee arvon, jonka ominaisuus saa. Esim. <jsp:usebean id="kori" scope="session" class="kauppa.ostoskori" /> <jsp:setproperty name= kori property= numero value= 123 /> <jsp:usebean id="cart" scope="session" class="session.carts" /> <jsp:setproperty name="cart" property="*" />

38(63) <jsp:getproperty> hakee komponentin ominaisuuden arvon, muuttaa sen Stringmerkkijonoksi ja sijoittaa sen out-tietovirtaan. Komponentti, jonka ominaisuutta haetaan, täytyy olla perustettu aikaisemmin <jsp:usebean>-elementillä. Syntaksi: <jsp:getproperty name="beanname" property="propertyname" /> Esimerkki., missä name on olion nimi, joka on määritetty aikaisemmin <jsp:usebean>-elementissä ja jonka ominaisuutta haetaan, ja property on haettava ominaisuus. <%@ page import = "java.util.*, kauppa.ostoskori" %> <jsp:usebean id="kori" scope="session" class="kauppa.ostoskori" /> <html> <head><title>kirjaostokset</title></head> <body> <center> <h1>kirjaostokset</h1> <br /> Tilauksen numero: <jsp:getproperty name="kori" property="numero" /> <br /> Tilaajan nimi: <jsp:getproperty name="kori" property="nimi" /> <br /> </body> </html> Ostokori-luokassa on oltava attribuuteilla getattribuuttimetodit.

39(63) <jsp:include> mahdollistaa pyynnön aikana tuoda ja sisällyttää JSP-sivuun ulkoinen staattinen tai dynaaminen resurssi. (Staattinen resurssi tarkoittaa esim. staattista HTML-sivua. Dynaaminen resurssi tarkoittaa esimerkiksi toista JSP-sivua. Dynaaminen resurssi täytyy ensin prosessoida ja prosessin tulos tuodaan JSP-sivuun.) Syntaksi: <jsp:include page="urlspec" flush="true" />,missä page on sisällytettävän resurssin URL-osoite ja flush on pakollinen ja ilmaisee puskurin olevan tyhjennetty. Sen arvo pitää olla true. Toinen muoto toiminnalle on seuraavassa, missä sisällytettävälle sivulle välitetään yksi tai useampi parametri: <jsp:include page="urlspec" flush="true"> <jsp:param name="paramname" value="paramvalue" /> </jsp:include> Esimerkki <jsp:include page="copyright.html" flush="true" /> Esim. Seuraava päiväys tulee toisesta jsp-sivusta <html> <body> Seuraava päiväys tulee toisesta jsp-sivusta <jsp:include page="pvm.jsp" flush="true" /> </body> </html> Pvm.jsp: <%= new java.util.date().tostring() %> <%@ page import="java.util.*, java.text.*" %> <html> <body> <% Date aika = new Date(); SimpleDateFormat format = new SimpleDateFormat ("dd.mm.yyyy"); String pvm = format.format(aika); %> Paivays <%= pvm %> </body> </html>

40(63) <jsp:forward> siirtää voimassa olevan pyynnön käsittelyn toiselle resurssille: staattiselle sivulle, JSP-sivulle tai servletille. Samalla vanhan sivun suorittaminen loppuu. Syntaksi: <jsp:forward page="relativeurl" />, missä page on uuden resurssin URL-osoite. Toinen muoto toiminnalle on seuraavassa, missä siirrettävälle sivulle välitetään yksi tai useampi parametri: <jsp:forward page="urlspec"> <jsp:param name="paramname" value="paramvalue" /> </jsp:forward> <jsp:param> välittää parametreja ja niiden arvoja jsp:include, jsp:forward ja jsp:plugin -toimintojen kanssa. Syntaksi: <jsp:param name="paramname" value="paramvalue" /> <jsp:plugin> avulla voidaan sisällyttää jsp-sivuun apletteja tai javabeanin

41(63) Kommentit JSP:n kommentti on JSP-sivujen dokumentointia varten. Kommentin sisältö jää vain JSP-sivulle. Container hylkää sen kokonaan tehdessään JSP-sivusta servlettiä. <%-- kommentoivaa tekstiä --%> Tavalliseen HTML-kommenttiin voidaan kirjoittaa JSP-elementti, joka ei näy sivulle <!-- HTML:n kommentti, jossa on JSP-elementti <%= JSP-lauseke %>. Kommentin loppu --> JSP-sivuun voidaan viedä Javan kommentit seuraavasti; <% /* Javan usean rivin kommentti */ // Javan yhden rivin kommentti %>

42(63) EL (Excression Language) ja JSTL Lähde: Arvo Lipitsäinen, JSTL- JavaSrver Pages Standard Library, 2004 JSTL on JSP:n standardi tagikirjasto JSTL 1.0 kuvaus valmistui 2002 Päämäärä helpottaa JSP-sivujen kirjoittamista Sisältää neljä tagikirjastoa: o Ydinkirjasto o XML:n käsittely o Kansainvälistäminen o Relaatitietokannan käsittely Sisältää EL (Expression Language)-lausekielen

43(63) Esimerkki: <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <%@ page isthreadsafe="true"%> <%@page import="java.util.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html xmlns="http://www.w3.org/1999/xhtml"> <html> <body> <h3>jstl-toimintoja</h3> <p> <c:out value="hyvää Päivää!" /><br><br> Pieni yhteenlasku EL-kielellä: <c:out value=" 1 + 2 = ${1 + 2}" /><br><br> Kertolasku muuttujilla luku1 = 5 ja luku2 = 9<br> <c:set var="luku1" value="5" /> <c:set var="luku2" value="9" /> luku1 * luku2 = <c:out value=" ${luku1 * luku2}" /> </p> </body> </html> tulostuu:

44(63) EL-kielen literaalit Literaalit ovat eri tyyppisten vakioiden merkitsemistapoja. Tyyppi Boolean true tai false. Esim. true, false Kuvaus Kokonaisluku Numeroita 0-9, joita voi edeltää etumerkki ( + tai - ). Esim. 123, -29 Desimaaliluku Numeroita 0-9, joiden välissä voi olla piste erottamassa kokonaisosan desimaaleista. Numeroiden edessä voi olla etumerkki ( + tai - ) ja numeroiden jäljessä voi olla e tai E - kirjaimella erotettu eksponentti, joka on kokonaisluku. Esim. 52.99, -10.0, 1.2e5 Merkkijono Lainausmerkkien (") tai hipsukoiden (') sisällä. Esim. "Ville", 'Veera'. Merkkijonossa esiintyvää "- ja \-merkkiä edeltää \-merkki. Esim. "C:\\levy", "Nimi \"Matti\" on yleinen" Null-osoite null

45(63) Operaattorit Operaattori Kuvaus. ominaisuuden haku [] taulukko () lausekkeiden ryhmittely + yhteenlasku - vähennyslasku tai negatiivinen etumerkki / tai div jakaminen % tai mod jakojäännös == tai eq yhtäsuuruus!= tai ne eri suuruus < tai lt pienempi kuin > tai gt suurempi kuin <= tai le pienempi tai yhtä suuri kuin >= tao ge suurempi tai yhtä suuri kuin && tai and looginen and-operaatio tai or looginen or-operaatio! tai not komplementti empty tyhjä arvo (null, tyhjä merkkijono tai tyhjä taulukko) Operaattorit: [ ] ja. Olion ominaisuuteen voi viitata joko piste-operaattorin avulla tai taulukon nimettynä alkiona: tuotex.koodi tuotex[ koodi ]

46(63) Esimerkki. <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <%@ page isthreadsafe="true"%> <%@ page import="java.util.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html xmlns="http://www.w3.org/1999/xhtml"> <%@page import="tuotteet.tuote" %> <jsp:usebean id="tuotex" class="tuotteet.tuote" > <jsp:setproperty name="tuotex" property="koodi" value="1234" /> <jsp:setproperty name="tuotex" property="nimi" value="sakkipeli" /> <jsp:setproperty name="tuotex" property="hinta" value="12.55" /> </jsp:usebean> <body> <h3>tuote</h3> <p> <jsp:getproperty name="tuotex" property="koodi" /><br> <jsp:getproperty name="tuotex" property="nimi" /><br> <jsp:getproperty name="tuotex" property="hinta" /><br><br> <c:out value="${tuotex.koodi}" /><br> <c:out value="${tuotex.nimi}" /><br> <c:out value="${tuotex.hinta}" /><br><br> <c:out value="${tuotex['koodi']}" /><br> <c:out value="${tuotex['nimi']}" /><br> <c:out value="${tuotex['hinta']}" /><br> </p> </body> </html> Sivu näyttää selaimen näytössä seuraavalta: Tuote-luokassa oltava set- ja getattribuuttimetodit

47(63) EL tuntee seuraavat sisäiset objektit: Sisäinen objekti pagescope requestscope sessionscope applicationscope param paramvalues header headervalues initparam cookie pagecontext Kuvaus sisältää kaikki oliot, joiden näkyvyys on sivu (page) sisältää kaikki oliot, joiden näkyvyys on pyyntö (request) sisältää kaikki oliot, joiden näkyvyys on istunto (session) sisältää kaikki oliot, joiden näkyvyys on sovellus (application) sisältää pyynnön parametrit sisältää pyynnön parametrit merkkijonotaulukkona sisältää http-pyynnön otsikkotiedot sisältää http-pyynnön otsikkotiedot merkkijonotaulukkona sisältää init-paramterit, jotka annetaan esim. web.xmlkuvaimessa sisältää cookie-tiedot sisältää javax.servlet.jsppagecontext-olion

48(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>muuttujan näkyvyys</h3> <p> <c:set var="tunnus" value="abc" scope="page" /> <c:set var="tunnus" value="kissa" scope="request" /> <c:set var="tunnus" value="kävelee" scope="session" /> <c:set var="tunnus" value="tikapuita" scope="application" /> <c:set var="tunnusx" value="taivaaseen!" scope="session" /> tunnus: <c:out value="${tunnus}" /><br> pagescope.tunnus: <c:out value="${pagescope.tunnus}" /><br> requestscope.tunnus: <c:out value="${requestscope.tunnus}" /><br> sessionscope.tunnus: <c:out value="${sessionscope.tunnus}" /><br> applicationscope.tunnus:<c:out value="${applicationscope.tunnus}" /><br> tunnusx: <c:out value="${tunnusx}" /><br> </p> </body> </html> Tulostaa:

49(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>header</h3> <c:out value="user-agent: ${header['user-agent']}" /><br> <c:out value="accept-encoding: ${header['accept-encoding']}" /><br> <c:out value="accept-language: ${header['accept-language']}" /><br> <c:out value="accept-charset: ${header['accept-charset']}" /><br> <c:out value="accept: ${header['accept']}" /><br> </body> </html>

50(63) Yleiskäyttöiset tagit (Core tag library) <c:out> syntaksi: toiminto laskee lausekkeen arvon, muuttaa sen merkkimuotoon ja kirjoittaa tuloksen JspWriter-tyyppiseen out-tietovirtaan <c:out value= arvo [escapexml= {true false} ] [default= oletusarvo] /> tai <c:out value= arvo [escapexml= {true false} ] oletusarvo <c:out> value= arvo tulostettava lauseke escapexml= {true false} default= oletusarvo muutetaanko merkit: <,>,&, ja vastaaviksi merkkientiteeteiksi: <,>,&,&#039; ja " Oletusarvo true, muutetaan ilmoittaa tulostettavan tiedon oletusarvon, jos lausekkeen arvo lakettuarvo on null Esim. <h3>c:out-kokeilut</h3> <br/> seuraava lause tulostaa lauekkeen arvon: <c:out value ="1 + 2 = 3 " /> <br/> tulostuu

51(63) <c:set> toiminta antaa muuttujalle arvon Syntaksi 1: muuttuja saa annetun arvon: <c:set value="arvo" var="muuttujannimi" [scope="{page reguest session application}"]/>, missä attribuutti value ilmoittaa muuttujan saaman arvon, attribuutti var muuttujan nimen ja valinnainen attribuutti scope muuttujan näkyvyysalueen. Oletusnäkyvyys-alue on page. Syntaksi 2: muuttuja saa elementin sisällön arvokseen: <c:set var="muuttujannimi" [scope="{page reguest session application}"]> sisältö </c:set> Syntaksi 3: Kohteena olevan olion ominaisuus saa annetun arvon: <c:set value="arvo" target="kohdeolio" property="ominaisuudennimi"/>, missä attribuutti value ilmoittaa ominaisuuden saaman arvon, attribuutti target kohteena olevan olion ja attribuutti property olion ominaisuuden nimen. Syntaksi 4: Kohteena olevan olion ominaisuus saa elementin sisällön arvokseen. <c:set target="kohdeolio" property="ominaisuudennimi"> sisältö </c:set>

52(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>muuttujan arvo</h3> <c:set var="testi" scope="request"> Windowsissa vakava tietoturvaaukko </c:set> <c:out value="${testi}" /><br> </body> </html> Tulostuu:

53(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <%@page import="tuotteet.tuote" %> <jsp:usebean id="tuotex" class="tuotteet.tuote" > <jsp:setproperty name="tuotex" property="koodi" value="1234" /> <jsp:setproperty name="tuotex" property="nimi" value="sakkipeli" /> <jsp:setproperty name="tuotex" property="hinta" value="12.55" /> </jsp:usebean> <body> <h3>tuote</h3> <jsp:getproperty name="tuotex" property="koodi" /> <br/> <jsp:getproperty name="tuotex" property="nimi" /><br/> <jsp:getproperty name="tuotex" property="hinta" /><br/> <c:set value="10001" target="${tuotex}" property="koodi" /> <c:set value="backgammon" target="${tuotex}" property="nimi" /> <c:set value="20.56" target="${tuotex}" property="hinta" /> <br/> <c:out value="${tuotex.koodi}" /><br> <c:out value="${tuotex.nimi}" /><br> <c:out value="${tuotex.hinta}" /><br> </p> </body> </html> tulostuu:

54(63) Ehdolliset toiminnat <c:if> if-lause Syntaksi: <c:if test="ehto" var="muuttujannimi" [scope="${page request session application}"] /> tai <c:if test="ehto" [var="muuttujannimi"] [scope="${page request session application}"]> sisältöä </c:if> Attribuutin test arvo (true/false) määrittää, prosessoidaanko elementin sisältö vai ei Attribuutin var arvoksi tulee ehtolausekkeen arvo (true/false) Attribuutti scope ilmoittaa muuttujan näkyvyysalueen, oletus on page

55(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>el-kielen if-lauseen testi</h3> <c:if test="${servletinilmoitus==true}" var="ilmoitus"> <br/> <c:out value="tervetuloa / VÄLKOM / WELCOME!" /> </c:if> <br/><br/> <c:out value="ilmoitus=" /> <c:out value="${ilmoitus}" /> <br/> <c:if test="${ilmoitus==true}" > <br/> <c:out value="näkemiin / ADJÖ / GOOD BYE!" /> </c:if> </body> </html> tulostuu: Pääservletti on käynnistänyt sivun seuraavasti: request.setattribute ("servletinilmoitus",true); disp = request.getrequestdispatcher("web-inf/koe4.jsp"); disp.forward(request, response);

56(63) <c:choose>,<c:when>,<c:otherwise> Monivalinta, vastaa javan switch-case-lausetta syntaksi: <c:choose> <c:when test= ehto1>valinta 1 </when> <c:when test= ehto2>valinta 2 </when> <c:when test= ehton>valinta N </when> <c:otherwise>viimeinen valinta </otherwise> </choose>

57(63) Esim. <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> <title>monivalinta-lause</title> </head> <body> <form> Kirjoita nimi: <input type="text" name="nimi" size="15" /> <br/> Valitse nimi: <select name="kieli"> <option>suomi</option> <option>ruotsi</option> <option>englanti</option> <option>espanja</option> <option>muu</option> </select> <br/> <input type="submit" value=" - Paina - " /> </form> <br/> <h2> <c:choose> <c:when test="${param.kieli==\"suomi\"}" > Terve, </c:when> <c:when test="${param.kieli==\"ruotsi\"}" > Tjänare, </c:when> <c:when test="${param.kieli==\"englanti\"}" > Hello, </c:when> <c:when test="${param.kieli==\"espanja\"}" > Hola, </c:when> <c:when test="${param.kieli==\"muu\"}">?!# $ 6??#@$%&?ÅÄÖ, </c:when> <c:otherwise> </c:otherwise> </c:choose> <c:out value="${param.nimi}" /> </h2> </body> </html> tulostaa, kun käyttäjä on kirjoittaa nimen, valitsee kielen ja painaa paina-nappulaa:

58(63) Toistorakenne <c:foreach> B) Taulukkorakenteen läpikäynti <c:foreach [var= varname ] items= collection [varstatus= varstatusname ] [begin= alku end= loppu [step= askel ]]> Sisältöa <c/foreach> Items on pakollinen ja voi olla : o Tavallinen taulukko o Collection-luokan olio,vector, ArraytList,LinkedList,Treeset o Iterator-, Enumeration- tai Map-olio o String-olio, joka sisältää pilkulla toisistaa erotettuja merkkijonoja var on muuttujan nimi, jonka avulla viitataan käsiteltää taulukon alkiota begin on taulukon indeksi,josta taulukon läpikäynti alkaa, end on indeksi, johon läpikäynti päättyy ja step ilmaisee indeksin korotuksen (vrt. Java for-lause)

59(63) Esim. <body> <h2>tuoteluettelo </h2> <table border="1"> <th>tuotteen koodi</th> <th>tuotteen nimi</th> <th>hinta (eur)</th> <c:foreach var="tuote" items="${tuotelista}"> <tr> <td><c:out value="${tuote.koodi}" /> </td> <td><c:out value="${tuote.nimi}" /> </td> <td><c:out value="${tuote.hinta}" /> </td> </tr> </c:foreach> </table> </body> </html> Pääservletissä on tuoteluettelon aktivointi seuraava: ArrayList lista = new ArrayList(); for (int i=0; i<10;i++) lista.add(new Tuote(i+10,"tuote"+i+10, ( 2.07+i))); tulostuu: request.setattribute( "tuotelista", lista); disp = request.getrequestdispatcher("web-inf/koe6.jsp"); disp.forward(request, response);

60(63) C) Toistaminen n-kertaa <c:foreach [var= varname ] [varstatus= varstatusname ] begin= alku end= loppu [step= askel ]> Sisältöa <c/foreach> var on indeksi, begin indeksin alkuarvo ja end loppuarvo, step ilmaiseen indeksin kasvatuksen (vrt. Java for-lause) Esim. <h3>kierrokset</h3> <c:foreach var="i" begin="1" end="5" > <c:out value="kierros ${i}"/> <br/> </c:foreach> tulostuu:

61(63) Internet-resurssin käsittely <c:import> tuo JSP-sivulle dataa ulkoisesta URL-osoitteesta syntaksi: <c:import url= url [context= context ] [var= varname ] [scope= {page request session application} ] [charencoding= charencoding ]> sisältö </c:import> url ilmaisee URL-osoitteen, mistä sisältö haetaan, context ilmoittaa perusosoitteen, jos url on suhteellinen osoite esimerkkejä URL-osoitteista: o Absolute URL: <c:import url="http://sample.com/welcome.html"/> o Relative URL (to the current context): <c:import url="/copyright.html"/> o Relative URL with a foreign context: <c:import url="/mylogo.html" context="/common"/> var ilmoittaa muuttujan, johon haettu sisältö tallentuu charencoding ilmaisee merkkien koodaustavan scope ilmaisee muuttujan näkyvyyden

62(63) Esim. <body> <h2>jstl-esimerkki: import-tagi</h2> <p>seuraava teksti on peräisin teksti.txt-tiedostosta</p> <c:import url="teksti.txt" /> </body> </html> tulostuu: Kun teksti.txt:n sisältö on: Abc kissa kävelee tikapuita pitkin taivaaseen. Tikapuut halkesi, pikku kissa putosi. MIAUUUU!

63(63)