27
HELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 1(27) 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 selain Web-palvelin JSP-Container HTTP-pyyntö Java-serveltti JSP-tiedosto käännös ajo HTML-sivu Web-palvelimessa on JSP-Container –alusta, joka tekee JSP-sivusta servletin, jonka se kääntää ja käynnistää. 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.

W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

1(27)

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

selain

Web-palvelin JSP-Container

HTTP-pyyntö

Java-serveltti

JSP-tiedosto

käännös

ajo

HTML-sivu

Web-palvelimessa on

JSP-Container –alusta,

joka tekee JSP-sivusta

servletin, jonka se

kääntää ja käynnistää.

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.

Page 2: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

2(27)

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

Page 3: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

3(27)

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:

Page 4: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

4(27)

EL-kielen literaalit

Literaalit ovat eri tyyppisten vakioiden merkitsemistapoja.

Tyyppi Kuvaus

Boolean true tai false .

Esim. true, false

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

Page 5: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

5(27)

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’]

Page 6: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

6(27)

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

Backgammon

14.50

edellyttää että:

Ohjelman pääserveltti on

lähettänyt attribuutin

tuoteX, joka on Tuote-

luokan olio ja jolla on

getKoodi(),getNimi() ja

gteHinta() metodit.

Page 7: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

7(27)

EL tuntee seuraavat sisäiset objektit:

Sisäinen objekti Kuvaus

pageScope sisältää kaikki oliot, joiden näkyvyys on sivu (page)

requestScope sisältää kaikki oliot, joiden näkyvyys on pyyntö (request)

sessionScope sisältää kaikki oliot, joiden näkyvyys on istunto (session)

applicationScope sisältää kaikki oliot, joiden näkyvyys on sovellus

(application)

param sisältää pyynnön parametrit

paramValues sisältää pyynnön parametrit merkkijonotaulukkona

header sisältää http-pyynnön otsikkotiedot

headerValues sisältää http-pyynnön otsikkotiedot

merkkijonotaulukkona

initParam sisältää init-paramterit, jotka annetaan esim. web.xml-

kuvaimessa

cookie sisältää cookie-tiedot

pageContext sisältää javax.servlet.jspPageContext-olion

Page 8: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

8(27)

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:

Page 9: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

9(27)

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>

Page 10: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

10(27)

Yleiskäyttöiset tagit (Core tag library)

<c:out>

toiminto laskee lausekkeen arvon, muuttaa sen merkkimuotoon ja

kirjoittaa tuloksen JspWriter-tyyppiseen out-tietovirtaan

syntaksi:

<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}” muutetaanko merkit: <,>,&,’ ja ” vastaaviksi

merkkientiteeteiksi: &lt;,&gt;,&amp;,&#039; ja &#034;

Oletusarvo true, muutetaan

default=”oletusarvo” 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

Page 11: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

11(27)

<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>

Page 12: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

12(27)

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:

Page 13: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

13(27)

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

Page 14: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

14(27)

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);

Page 15: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

15(27)

<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>

Page 16: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

16(27)

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:

Page 17: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

17(27)

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)

Page 18: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

18(27)

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)));

request.setAttribute( "tuotelista", lista);

disp = request.getRequestDispatcher("WEB-INF/koe6.jsp");

disp.forward(request, response);

tulostuu:

Page 19: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

19(27)

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:

Page 20: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

20(27)

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

Page 21: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

21(27)

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!

Page 22: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

22(27)

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>

Page 23: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

23(27)

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:

Page 24: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

24(27)

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);

}

Page 25: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

25(27)

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>

...

Page 26: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

26(27)

tulostuu, kun käyttäjä avaa ikkunan ensimmäisen kerran:

seuraavaksi hän painaa Kirjaudu-nappulaa tulostuu:

Page 27: W eb - p al v el i n J S P - C o n t ai n ermyy.haaga-helia.fi/.../JSP_JSTL_materiaali.pdfHELIA ICT2TN007 Seija Lahtinen 9.9.2010 Tiedosto: JSP_JSTL_materiaali.doc 2(27) EL (Excression

HELIA ICT2TN007

Seija Lahtinen 9.9.2010

Tiedosto: JSP_JSTL_materiaali.doc

27(27)

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","[email protected]");

request.setAttribute("sex","Female");

}

disp = request.getRequestDispatcher("WEB-INF/koe8.jsp");

disp.forward(request, response);

}