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

Koko: px
Aloita esitys sivulta:

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

Transkriptio

1 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 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 3(63) Esimerkki: <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " <%@ page isthreadsafe="true"%> <%@page import="java.util.*" %> <%@ taglib uri=" prefix="c"%> <html xmlns=" <html> <body> <h3>jstl-toimintoja</h3> <p> <c:out value="hyvää Päivää!" /><br><br> Pieni yhteenlasku EL-kielellä: <c:out value=" = ${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 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 , -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 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 6(63) Esimerkki. <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " <%@ page isthreadsafe="true"%> <%@ page import="java.util.*" %> <%@ taglib uri=" prefix="c"%> <html xmlns=" <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 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 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 8(63) Esim. <html xmlns=" <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 9(63) Esim. <html xmlns=" <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 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 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 12(63) Esim. <html xmlns=" <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 13(63) Esim. <html xmlns=" 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: Backgammon 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 14(63) Esim. <html xmlns=" <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 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 16(63) Esim. <html xmlns=" <head> <meta http-equiv="content-type" content="text/html;charset=iso "> <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 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 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 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 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=" 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 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 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 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 24(63) Pääservletti vastaanottaa tietoa JSP-sivulta: ServletRequest-luokan metodit: String getparameter(string); String [] getparametervalues(string); Ks. 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 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/> <INPUT type="text" name=" " value="${ }"><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 26(63) tulostuu, kun käyttäjä avaa ikkunan ensimmäisen kerran: seuraavaksi hän painaa Kirjaudu-nappulaa tulostuu:

27 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","a "); request.setattribute("nimi","toimitusjohtaja Wilma Lahtinen"); request.setattribute("etunimi", "Ronja"); request.setattribute("sukunimi","röverdotter"); request.setattribute(" ","ronja@skog.se"); request.setattribute("sex","female"); } } disp = request.getrequestdispatcher("web-inf/koe8.jsp"); disp.forward(request, response);

28 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 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 ) ja JSP-sivun sisältötyypin - pageencoding määrittää JSP-sivun merkkien koodauksen (oletuksena ISO ) 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 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 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 32(63) Esimerkki <html xmlns=" <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 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 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 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 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 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 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 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 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 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 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 43(63) Esimerkki: <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " <%@ page isthreadsafe="true"%> <%@page import="java.util.*" %> <%@ taglib uri=" prefix="c"%> <html xmlns=" <html> <body> <h3>jstl-toimintoja</h3> <p> <c:out value="hyvää Päivää!" /><br><br> Pieni yhteenlasku EL-kielellä: <c:out value=" = ${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 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 , -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 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 46(63) Esimerkki. <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " <%@ page isthreadsafe="true"%> <%@ page import="java.util.*" %> <%@ taglib uri=" prefix="c"%> <html xmlns=" <%@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 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 48(63) Esim. <html xmlns=" <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 49(63) Esim. <html xmlns=" <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 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 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 52(63) Esim. <html xmlns=" <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 53(63) Esim. <html xmlns=" 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 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 55(63) Esim. <html xmlns=" <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 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 57(63) Esim. <html xmlns=" <head> <meta http-equiv="content-type" content="text/html;charset=iso "> <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 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 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 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 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=" 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 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(63)

directive attr1= value1 attr2= value2 %>

directive attr1= value1 attr2= value2 %> HAAGA-HELIA OHJELMISTOKEHITYS 1(14) -elementti on olemassa kolmenlaisia elementtejä: A) Direktiivit A) Direktiivejä (directive element) B) Skriptejä (scripting selement) C) Toimintoelementtejä (action

Lisätiedot

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

JSP (JavaServer Pages) tekniikka Lähde Arvo Lipitsäinen, JSP JavaServer Pages, 2003 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

Lisätiedot

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

XHTML - harjoitus. Tehtävä1: Tee xhtml tiedosto käyttäen notepad (muistio) ohjelmaa. Tiedoston tallennus notepad (muistio) ohjelmassa: XHTML - harjoitus Tehtävä1: Tee xhtml tiedosto käyttäen notepad (muistio) ohjelmaa Tiedoston tallennus notepad (muistio) ohjelmassa: Jokaisen XHTML-dokumentin tulisi alkaa XML-määrittelyllä(engl.XML-prologue),

Lisätiedot

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

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

Lisätiedot

Alkuun HTML5 peliohjelmoinnissa

Alkuun HTML5 peliohjelmoinnissa Paavo Räisänen Alkuun HTML5 peliohjelmoinnissa www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida ja levittää ei kaupallisissa tarkoituksissa. Sisällysluettelo 1: Alkusanat 2: Alkuun 3: Pelinäkymä

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia Javascript 2: Ohjelmointikielen ominaisuudet Jaana Holvikivi Metropolia HTML - sivun rakenne ja osiot HTML HEAD STYLE SCRIPT STYLEsheet Javascript file BODY Javascript

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

Lisätiedot

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

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet String-merkkijonoluokka 1 Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet

Lisätiedot

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

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli. HTML & CSS Antti Koivisto HTML (HyperText Markup Language)! HTML on sivujen kuvauskieli.! Se ei ole ohjelmointikieli.! HTML on merkintäkieli, joka koostuu monista merkintä tägeistä ().! Voidaan

Lisätiedot

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

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia)

JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia) JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia) Esim 5.1 laskujärjestys operaattorit var tulos = 5 + 4 * 12 / 4; document.write("5 + 4 * 12 / 4 laskutoimituksen tulos

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Käyttäjän kanssa keskusteleva ohjelma 1 Kirjoittaminen konsolinäkymään //Java ohjelma, joka tulostaa konsoli-ikkunaan public class HeiMaailma { public void aja() { // kirjoitus ja

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

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

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) 1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden

Lisätiedot

PHP tehtävä 3 Atte Pekarinen TIKT13A 4.12.2014

PHP tehtävä 3 Atte Pekarinen TIKT13A 4.12.2014 PHP-kielen perusteet 3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä. Heredoc on ominaisuus PHP-koodaamisessa, jolla voidaan kirjoittaa pitkiä tekstejä

Lisätiedot

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

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public) Tietorakenteet JAVA-OHJELMOINTI Osa 5: Tietorakenteita Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto Olioita ja tietoja voidaan organisoida määrämuotoisiksi tietorakenteiksi Hyödyllisiä

Lisätiedot

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa WWW ja tietokannat WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa tekstiä, kuvia, hyperlinkkejä Staattiset sivut kirjoitettu kerran, muuttaminen käsin ongelmana pysyminen ajantasalla Ylläpito hankalaa,

Lisätiedot

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

Proseduraalinen dokumentti: sisältö, rakenne ja ulkoasu yhdessä, esim. worddokumentti 1 XHTML - aloitus Sisältö: s.2 Taustaa s.4 Elementin rakenne s.7 XHTML dokumentti s.8 DOCTYPE s.11 html s.13 head s.14 meta s.16 title s.17 link s.18 style s.19 body s.22 Lohko- ja inline-elementit s.23

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena Ohjelmointikielet ja -paradigmat 5op Markus Norrena Ko#tehtävä 4 Viimeistele "alkeellinen kuvagalleria". Käytännössä kaksi sivua Yksi jolla voi ladata kuvia palvelimelle (file upload) Toinen jolla ladattuja

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

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

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

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

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

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

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

Lisätiedot

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

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

Attribuutit. Copyright IT Press Tämän e-kirjan kopiointi, tulostaminen ja jakeleminen eteenpäin luvatta on kielletty. 8 Attribuutit Useimmat ohjelmointikielet on suunniteltu tavoitteena määrätty joukko ominaisuuksia. Kun esimerkiksi ryhdyt tekemään kääntäjää, mietit millainen uudella kielellä tehty sovellus on rakenteeltaan,

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

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

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

http://www.microsoft.com/expression/

http://www.microsoft.com/expression/ Verkkojulkaisuharjoitus1 TAVOITE Harjoituksen tarkoituksena on opiskella käyttämään verkkojulkaisueditoria (Microsoft Expression Web) ja käynnistämään verkkosivu internetissä. VERKKOSIVUEDITORIN KÄYTTÖOHJEITA

Lisätiedot

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016)

Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016) Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016) Tietokoneavusteinen opetus -kurssilla opetetaan Adobe Flash CS6:n käyttämistä neljänä kertana: 11.3.2016, 15.3.2016, 18.3.2016 ja 1.4.2016. Harjoituskerroilla

Lisätiedot

Mikä yhteyssuhde on?

Mikä yhteyssuhde on? 1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

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

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

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

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely. XML prosessointi Miten XML dokumentteja luetaan ja kirjoitetaan XML prosessori lukee ja välittää XML dokumentin sovellukselle. Se sisältää entieettikäsittelijän (mahdollisesti) XML jäsentimen Sovellus

Lisätiedot

16. Javan omat luokat 16.1

16. Javan omat luokat 16.1 16. Javan omat luokat 16.1 Sisällys Johdanto. Object-luokka: tostring-, equals-, clone- ja getclass-metodit. Comparable-rajapinta: compareto-metodi. Vector- ja ArrayList-luokat. 16.2 Javan omat luokat

Lisätiedot

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

Sunin määrittelemä JSP 1.1 (javaserver pages) yhdistää TEKSTI: PASI KOVANEN "Taas uusi tekniikka dynaamisten webbisivujen tekoon?!", parahtavat naavapartaiset Perl- ja asp-gurut ja kääntävät sivua. Malttakaa kuitenkin hetki, sillä JavaServer Pages tarjoaa

Lisätiedot

Harjoitustyö (TKO_2023)

Harjoitustyö (TKO_2023) Harjoitustyö (TKO_2023) Jyri Lehtonen (72039) (alkuperäinen 29.1.2008) päivitetty: 8.2.2008 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee Java-appletti, joka kysyy käyttäjältä asioita Java-kielestä.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2010 Välikoe / 26.3 Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään

Lisätiedot

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

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

Java-API, rajapinnat, poikkeukset, UML,... Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)

Lisätiedot

Verkkosivut perinteisesti. Tanja Välisalo 11.2.2009

Verkkosivut perinteisesti. Tanja Välisalo 11.2.2009 Verkkosivut perinteisesti Tanja Välisalo 11.2.2009 WWW-sivujen vieminen omaan kotisivutilaan yliopiston mikroverkossa https://salasana.jyu.fi Klikkaa painiketta Activate WWW Klikkaa painiketta Activate

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

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

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

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

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen Ohjelmointitaito (ict1td002, 12 op) Kevät 2009 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-kehitysympäristö Java-ohjelma ja luokka

Lisätiedot

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1 Digitaalisen median tekniikat JSP ja XML 28.4.2004 Harri Laine 1 JSP hyvin lyhyesti JSP on Java-pohjainen skriptikieli JSP:llä laadittu sivu käännetään java-servletiksi (sivun toteutus vastaa servlettiluokan

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin Ohjausjärjestelmien jatkokurssi Visual Basic vinkkejä ohjelmointiin http://www.techsoft.fi/oskillaattoripiirit.htm http://www.mol.fi/paikat/job.do?lang=fi&jobid=7852109&index=240&anchor=7852109 Yksiköt

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

Lisätiedot

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

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi 1 Javan perusteet Ohjelmointi IPO-malli Java lähdekoodista suoritettavaksi ohjelmaksi Vakio Muuttuja Miten Javalla näytetään tietoa käyttäjälle, miten Javalla luetaan käyttäjän antama syöte Miten Javalla

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

/ * PROSESSORIN C-KIELINEN OHJELMA */

/ * PROSESSORIN C-KIELINEN OHJELMA */ / * PROSESSORIN C-KIELINEN OHJELMA */ #define AVR_ATtiny2313 #define F_CPU 12000000UL #include #include #include void InitUART (unsigned char baudrate); unsigned

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Microsoft Visual Studio 2005

Microsoft Visual Studio 2005 Sovelluksen jako palvelimiksi: Palvelin on sille annettuun vastuulliseen tehtävään erikoistunut sovellusosa. Käyttöliittymäpalvelin (Web-palvelin) vastaa käyttöliittymän toteuttamisesta. Web-palvelin toteuttaa

Lisätiedot

Luokan sisällä on lista

Luokan sisällä on lista 1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa J2EE web-ohjelmointi Teoria ja ohjelmointitehtävät J2EE web-ohjelmointi 3 JOHDATUS OPISKELUUN...7 Opiskelu kurssilla... 7 Kurssin sisältö... 7 Aikataulu...

Lisätiedot

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

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

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

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

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

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

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

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

Digitaalisen median tekniikat. JSP ja XML

Digitaalisen median tekniikat. JSP ja XML Digitaalisen median tekniikat JSP ja 28.4.2004 Harri Laine 1 JSP hyvin lyhyesti JSP on Java-pohjainen skriptikieli JSP:llä laadittu sivu käännetään java-servletiksi (sivun toteutus vastaa servlettiluokan

Lisätiedot

Ohjelmointi 2 / 2011 Välikoe / 25.3

Ohjelmointi 2 / 2011 Välikoe / 25.3 Välikoe / 25.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään liittyvää tehtävää. Aikaa 4 tuntia.

Lisätiedot

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

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus) VISUAL BASIC OHJEITA Kutsuttava ohjelma alkaa kometoparilla Sub... End Sub Sub ohjelmanimi()...koodia... End Sub Muuttujat Muuttujan esittely Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency,

Lisätiedot