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

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

directive attr1= value1 attr2= value2 %>

ICT1TN004. Lomakkeet. Heikki Hietala

Java-kielen perusteet

HSMT Web-sovellustekniikoista

WWW ja servletit. Luku Johdanto

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

Java-kielen perusteet

Palvelinpuolen ohjelmointi

Java-kielen perusteet

Java-kielen perusteita

Tuotteiden tiedot: Lisää uuden tuotteen tiedot. Muuta tai poista tuotteen tiedot. Selaa kaikkien tuotteiden tietoja.

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

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

Lomake kannattaa asemoida taulukkoon: table. Silloin selitteet ja kentät saadaan sarakkeisiin. Kenttien ulkoasu voidaan määritellä tyyleillä.

Digitaalisen median tekniikat xhtml - jatkuu Harri Laine 1

Listarakenne (ArrayList-luokka)

Taulukot. Jukka Harju, Jukka Juslin

Digitaalisen median tekniikat xhtml - jatkuu

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

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

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

Digitaalisen median tekniikat xhtml - jatkuu

Java-kielen perusteita

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

20. Javan omat luokat 20.1

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

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

Lomakkeet HTML5. Elina Ulpovaara. Testaus: IE9 Firefox7 Opera11 Chrome

7. Näytölle tulostaminen 7.1

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

Digitaalisen median tekniikat. JSP ja XML

koodipolku iteraation muokkauksessa Dokumentti: koodipolkuesimerkki.doc Päiväys: Projekti : AgileElephant

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

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1

Olio-ohjelmointi Javalla

Metodien tekeminen Javalla

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

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

KOHDELUOKAN MÄÄRITTELY

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

2. PEHMEÄ XHTML XRAJAHTML

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

Sisältö. XML, XHTML ja CSS XML XML. XML:n ja HTML:n ero. XML kieliä XML XHTML CSS XSL. T Hypermediadokumentin laatiminen 2002

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

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

Rajapinta (interface)

ITKP102 Ohjelmointi 1 (6 op)

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

Olio-ohjelmointi Syntaksikokoelma

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

Ohjelmoinnin perusteet Y Python

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

16. Javan omat luokat 16.1

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

7. Oliot ja viitteet 7.1

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

1. Omat operaatiot 1.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

18. Abstraktit tietotyypit 18.1

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

Ohjelmoinnin peruskurssi Y1

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

15. Ohjelmoinnin tekniikkaa 15.1

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Alkuun HTML5 peliohjelmoinnissa

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointi 2, välikoe

Luokan muodostimet (Constructors)

Taulukoiden käsittely Javalla

1 Tehtävän kuvaus ja analysointi

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

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

Ohjelmoinnin jatkokurssi, kurssikoe

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

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

15. Ohjelmoinnin tekniikkaa 15.1

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

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

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

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

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

14. Poikkeukset 14.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Python-ohjelmointi Harjoitus 2

Johdatusta selainohjelmointiin

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3

Java-kielen perusteita

Transkriptio:

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

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:

4(27) 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(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 ]

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 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(27) 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(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:

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>

10(27) 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> seuraava lause tulostaa lauekkeen arvon: <c:out value ="1 + 2 = 3 " /> tulostuu

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>

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:

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" /> <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(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"> <c:out value="tervetuloa / VÄLKOM / WELCOME!" /> </c:if> <c:out value="ilmoitus=" /> <c:out value="${ilmoitus}" /> <c:if test="${ilmoitus==true}" > <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(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>

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" /> Valitse nimi: <select name="kieli"> <option>suomi</option> <option>ruotsi</option> <option>englanti</option> <option>espanja</option> <option>muu</option> </select> <input type="submit" value=" - Paina - " /> </form> <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(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)

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))); tulostuu: request.setattribute( "tuotelista", lista); disp = request.getrequestdispatcher("web-inf/koe6.jsp"); disp.forward(request, response);

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}"/> </c:foreach> tulostuu:

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

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!

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>

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}" > Yhteensä: <input type="text" name="yhteensä" size="6" readonly value="${yhteensa}"> <input type="submit" name="action" value="laske"> </form> tulostaa Tilanne Laske-nappulan painalluksen jälkeen:

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

25(27) Pääservletti lähettää tietoa JSP-sivulle: Metodi: void setattribute(string attribuutinnimi, String attribuutinarvo); Esim. <body> <h3>henkilön tiedot </h3> <form action="kokeilut" method="post"> Kirjaudu: käyttäjätunnus: <input type="text" name="kayttaja" size="15" maxlength="15" /> salasana: <input type="password" name="sala" size="5" maxlength="5" /> <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"> Last name:<input type="text" name="sukunimi" value="${sukunimi}"> email: <INPUT type="text" name="email" value="${email}"> sukupuoli: <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(27) tulostuu, kun käyttäjä avaa ikkunan ensimmäisen kerran: seuraavaksi hän painaa Kirjaudu-nappulaa tulostuu:

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","ronja@skog.se"); request.setattribute("sex","female"); } } disp = request.getrequestdispatcher("web-inf/koe8.jsp"); disp.forward(request, response);