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



Samankaltaiset tiedostot
WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

T Hypermediadokumentin laatiminen. Sisältö. Tavoitteet. Mitä on www-ohjelmointi? Arkkitehtuuri (yleisesti) Interaktiivisuuden keinot

Visual Basic -sovelluskehitin Juha Vitikka

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

Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

8. Näppäimistöltä lukeminen 8.1

directive attr1= value1 attr2= value2 %>

4. Lausekielinen ohjelmointi 4.1

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

Taustaa. CGI-ohjelmointi

8. Näppäimistöltä lukeminen 8.1

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

P e d a c o d e ohjelmointikoulutus verkossa

Case TUHTI. Projektin tunnuslukuja. ! Suuri perusjärjestelmäuudistus! Työt alkoivat kesällä ! Java luokkia n. 5000

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

1 www-sivujen teko opetuksessa

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Pedacode Pikaopas. Web-sovelluksen luominen

5. HelloWorld-ohjelma 5.1

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

12. Näppäimistöltä lukeminen 12.1

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri. Järjestelmäarkkitehtuuri

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


5. HelloWorld-ohjelma 5.1

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

Pakkauksen kokoaminen

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

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

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmoinnin perusteet Y Python

Asko Ikävalko, k TP02S-D. Ohjelmointi (C-kieli) Projektityö. Työn valvoja: Olli Hämäläinen

Javan perusteita. Janne Käki

Verkkosivut perinteisesti. Tanja Välisalo

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

KIURU Tietotekniikan sovellusprojekti

Ohjelmointi 2 / 2010 Välikoe / 26.3

17. Javan omat luokat 17.1

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

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

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

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

KYMENLAAKSON AMMATTIKORKEAKOULU Tietotekniikan koulutusohjelma / Tietoverkkotekniikka. Joni Korjala APACHE WWW-PALVELIN Seminaarityö 2012

7. Näytölle tulostaminen 7.1

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

Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut

Tietokannan webbikytkentä. Janne Petäjä

20. Javan omat luokat 20.1

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

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

HSMT Web-sovellustekniikoista

CSS - tyylit Seppo Räsänen

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

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

Tiedostonhallinta. Yleistä

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

Microsoft Visual Studio 2005

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

17. Javan omat luokat 17.1

Järjestelmäarkkitehtuuri (TK081702) AJAX, Asynchronous JavaScript And XML. AJAX, Asynchronous JavaScript And XML

Web Services tietokantaohjelmoinnin perusteet

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Taulukot. Jukka Harju, Jukka Juslin

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

,QWHUQHWVHODLPHQNl\WWlPLQHQ±,QWHUQHW([SORUHU

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

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

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

HOJ J2EE & EJB & SOAP &...

HSMT J2EE & EJB & SOAP &...

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

16. Javan omat luokat 16.1

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

OPPITUNTI 3 Ensimmäinen skripti

VisualStudio Pikaopas, osa 1: WEB sivujen suunnittelu

Interaktiivinen tarinankerronta

ASENNUS- JA KÄYTTÖOHJE

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

6 XML-työkalut 1. 6 XML-työkalut

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.3.0

Alkuun HTML5 peliohjelmoinnissa

Transkriptio:

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 lukuisia parannuksia vanhempiin tekniikoihin. JavaServer Pages Dynaamista PC WORLD web-ohjelmointia Sunin määrittelemä JSP 1.1 (javaserver pages) yhdistää Microsoftin ASP:n (active server pages) ja wwwpalvelimella ajettavien Java-ohjelmien eli servletien parhaat puolet. Siinä missä ASP on tulkattava kieli, perustuu JSP tavallisiin käännettyihin servleteihin. Tämän ansiosta JSP on huomattavasti ASP:tä suorituskykyisempi. Www-sivujen suunnittelijalle JSP-sivu näyttää ASP-sivun kaltaiselta. Ohjelmakoodin tunnisteena käytetään samoja <% %> -tageja, joten sivujen muokkaus onnistuu myös vaikka Dreamweaver-editorilla. Mutta siihen yhtäläisyydet oikeastaan loppuvatkin. Palvelimelle määritellään tiedostopäätteet, jotka sisältävät JSP-koodia. Yleensä päätteenä käytetään.jsp:tä. Kun web-palvelimelta pyydetään tällaista sivua ensimmäisen kerran, käy niin sanottu JSP container -sovellus sivun läpi ja generoi siitä tavallista java-koodia, joka käännetään servletiksi. Koodi tallennetaan erityiseen cache-hakemistoon, josta sitä voi tarkastella. Tarvittaessa JSP-sivuilla voidaan käyttää Javan sijasta muitakin ohjelmointikieliä, mikä tosin on harvinaista. Nirso JSP-parseri ymmärtää vain JSP-tageja ja päästää kaikki muut merkit läpi tulostamalla ne yksinkertaisesti out.print()- metodilla. JSP-tagien sisällä oleva koodi taas kopioidaan sellaisenaan servletiin generoidun koodin sekaan. JSP-tekniikkaa voidaankin käyttää lähes minkälaisten sivujen generointiin tahansa, mukaanlukien xml ja wml. Sitä voi hyödyntää myös tavallisten tekstitiedostojen päivittämisen automatisointiin. JSP-sivun ensimmäinen lataus kestää servletin koodin generointiin ja java-tavukoodiksi kääntämiseen menevän ajan, yleensä joitakin sekunteja. Seuraavilla kerroilla palvelin vertaa sivun ja siitä generoidun servletin aikaleimoja toisiinsa. Niiden ollessa samat hoitaa valmis palvelinohjelma pyynnön käsittelyn. Sivun muuttuessa osaa palvelin ottaa uuden servletin automaattisesti käyttöön. TARKKAA HOMMAA Nykyiset html-editorit eivät osaa tarkistaa sivujen JSP-osuuksia. Yksikin virhe estää generoidun servletin kääntämisen, mikä ilmenee keskeytyksenä ja kutsupinon tulostumisena. Virheiden etsimiseen joutuu usein käyttämään web-palvelimen lokia, jonne käännösvaiheen virheet tulostuvat. Virhetilanteiden vaikutusta käyttäjille voi vähentää erillisillä virhesivuilla, joille suoritus siirretään, jos sivun käsittelyssä tapahtuu virhe. Käännösvirheiden lisäksi generoitu servlet tai sen kutsumat beanit voivat aiheuttaa myös ajonaikaisia virheitä. Niiden metsästäminen saattaa joskus olla haastavaa, mutta apuna voi käyttää servletien debuggaamiseen tarkoitettuja ohjelmistoja. PAPUPATA PORISEMAAN JavaBeansit eli beanit ovat Java-luokkia, jotka noudattavat määriteltyä nimeämiskäytäntöä. Alunperin rajapinta luotiin käyttöliittymäkomponenttien käsittelyä yhtenäistämään, mutta se soveltuu mainiosti myös JSP:n kaltaisiin tekniikoihin. Yksinkertaisimmillaan beania käytetään pelkästään tiedon säilyttämiseen. Ohjelmakoodin listauksessa 1 oleva KahviPapubean sisältää yhden luokkamuuttujan "laatu" ja ns. getter-metodin muuttujan arvon lukemiseen (getlaatu()) sekä setter-metodin arvon asettamiseen (setlaatu()). Boolean-totuusarvojen lukemiseen voidaan käyttää lisäksi issuodatinkarkeus()-nimeämistä. Metodit voisi toki nimetä poikkeavastikin, mutta JSP tarjoaa suoran tuen tätä muotoa noudattaville beaneille. Jättämällä pois getter- tai setter-metodi voidaan arvon lukeminen tai muuttaminen estää. Tällainen esimerkki löytyy listauksesta 2, josta kaikessa epäloogisuudessaan on jätetty pois eurojen määrän asettaminen. Sen sijaan beanin arvoa "markat" kutsutaan liipaisinarvoksi (trigger property), koska sen muuttaminen aiheuttaa automaattisesti myös vastaavan eurojen määrän laskemisen. Beanit toteuttavat usein Serializable-rajapinnan. Sen avulla 54 MikroPC 5 / 2001 W W W. M I K R O P C. N E T

L I S T A U K S E T 1 J A 2 L I S T A U S 1 Yksinkertainen JavaBean package fi.mikropc.jspdemo; import java.io.serializable; public class KahviPapu implements Serializable { private String laatu = ""; public String getlaatu() { return laatu; public void setlaatu(string laatu) { this.laatu = laatu; L I S T A U S 2 Markat euroiksi muuntava bean package fi.mikropc.jspdemo; import java.io.serializable; public class Euromuunnin implements Serializable { private double markat = 0; private double eurot = 0; public double getmarkat() { return markat; public void setmarkat(double markat) { this.markat = markat; this.eurot = markat / 5.94573; public double geteurot() { return eurot; ja beanin arvoa muutetaan tagilla: <jsp:setproperty name="omapapu" property="laatu" value="espresso"/> JSP osaa automaattisesti kutsua oikeaa getter- tai setter-metodia. getproperty-esimerkki voitaisiin korvata myös seuraavalla javakoodin pätkällä: <% out.print(omapapu.getlaatu()); %> Tagimuoto on kuitenkin selkeämpi lukea ja se erottaa esityksen toteutuksesta: valittuun kohtaan sivua halutaan beanin "omapapu" arvo "laatu". Sivun kannalta ei ole kiinnostavaa, että arvo saadaan itse asiassa kutsumalla beanin metodia getlaatu(). Lisäksi BeanInfo-luokan avulla itse pyyntö voikin olla konepellin alla ohjattu aivan toiselle metodille. Tagimuodolla on lisäksi vielä yksi valttikortti: automaattiset tyyppimuunnokset. JSP huolehtii jsp:getpropertyn palauttaman tyypin muuttamisesta String-olioksi. Vastaavasti se muuntaa jsp:setpropertyn value-arvon kyseisen setter-metodin tietotyyppiä vastaavaksi. Sivuille voi sijoittaa myös lausekkeiden (expression) arvoja: <%= omapapu.getlaatu() %> Lausekkeita voi käyttää esimerkiksi edellä esitettyyn tapaan sisällyttämään metodikutsun paluuarvon sivulle. Lauseke voi kuitenkin olla mikä tahansa Java-lauseke ja sisältää jopa kommentteja: <%= 40 * 5.94573 /* 40 euroa markkoina */ %> palvelin voi tallettaa beanin levylle tai lähettää sen esimerkiksi toiselle palvelimelle kuormanjakoa varten. VAIN MUUTAMAN TAGIN TÄHDEN Beanien käsittelyyn JSP tarjoaa kolme tagia, joissa käytetään xml-standardin mukaista esitysmuotoa. Beanin määrittelyyn käytetään tagia: JSP huolehtii myös lausekkeiden tyyppimuunnoksista. Huomaa, että lausekkeen perässä ei ole puolipistettä. Beaniin voi kuulua lisäksi indeksoituja arvoja. Esimerkiksi arvo viikonpaivat voisi sisältää seitsemän arvoa. Tagit eivät tar- Sanasto <jsp:usebean id="omapapu" class="fi.mikropc.jspdemo.kahvipapu"/> Tagin jälkeen voidaan sivulla hyödyntää fi.mikropc. jspdemo.kahvipapu-luokkaan kuuluvaa oliota tunnisteella "omapapu". Koska koko komento sisältyy tagiin, suljetaan tagi sen lopussa olevalla kauttaviivalla. Komennon lopettamiseen voitaisiin käyttää myös erillistä sulkutagia </jsp:usebean>. usebean-komento kuuluu jsp-nimiavaruuteen. Xml:n määrittelemät nimiavaruudet estävät nimeämiskonflikteja. Bean täytyy sijoittaa web-palvelimen classpath-polkuun, jotta palvelin sen löytäisi. Beania muutettaessa täytyy palvelin uudelleenkäynnistää, jotta uusi versio beanista tulee käyttöön. Listauksen 1 beanin ainoa arvo haetaan sivulle tagilla: <jsp:getproperty name="omapapu" property="laatu"/> Servlet ASP JSP JavaBeans IIS JavaScript Scripletti Www-palvelimessa toimiva java-ohjelma. (active server pages) Microsoftin IIS-www-palvelimissa käytetty ohjelmistotekniikka. Mahdollistaa dynaamiset sivustot ja yhteydet tietokantaan. (JavaServer Pages). Helposti käyttöönotettava ASP:n tapainen skiptauskieli dynaamisten web-sivujen tekoon. Java-luokkia, jotka noudattavat määriteltyä nimeämiskäytäntöä. (Internet Information Server) Microsoftin wwwpalvelinohjelmisto. Java-sovellusten toimintaa ohjaava pienohjelma, joka on upotettu www-sivulle. Www-sivu, jossa on dynaamisella html:llä koodattuja ja skriptikielellä ohjattavia osia. W W W. M I K R O P C. N E T MikroPC 5 / 2001 55

L I S T A U K S E T 3, 4, 5 J A 6 L I S T A U S 3 euromuunnin.html Lomake, joka pyytää käyttäjältä markkamäärän ja lähettää sen eurot.jsp-sivun käsiteltäväksi: <form action="eurot.jsp"> Anna markkamäärä: <input type="text" name="markat"><br> <input type="submit" value="muunna"> </form> L I S T A U S 4 eurot.jsp Euromuunnin ilman beania (kutsutaan euromuunnin.html-lomakkeen kautta): <%= request.getparameter("markat")%> markkaa on:<br> <strong><%= Integer.parseInt(request.getParameter("markat")) / 5.94573 %></strong> euroa. <jsp:setproperty name="omapapu" property="markat" param="markat"/> </jsp:usebean> <jsp:getproperty name="omapapu" property="markat"/> markkaa on:<br> <strong><jsp:getproperty name="omapapu" property="eurot"/></strong> euroa. L I S T A U S 6 eurotaulukko.jsp Taulukon generointi ja toistorakenteen käyttäminen JSP-sivulla: <jsp:usebean id="omapapu" class="fi.mikropc. jspdemo.euromuunnin"/> <table> <tr><td>markkoja</td><td>euroja</td></tr> <% for (int i = 1; i <= 20; i++) { omapapu.setmarkat(i); %> <tr><td><jsp:getproperty name="omapapu" property="markat"/></td> <td><jsp:getproperty name="omapapu" property="eurot"/></td></tr> <% %> </table> L I S T A U S 5 eurot.jsp Euromuunnin beanin avulla (kutsutaan euromuunnin.html-lomakkeen kautta): <jsp:usebean id="omapapu" class="fi.mikropc.jspdemo.euromuunnin"> joa kuitenkaan mahdollisuutta indeksin välittämiseen, joten tällaisten arvojen käsittely pitää tehdä java-koodilla: <% omapapu.setviikonpaivat(0, "maanantai"); %> Muuttujien arvojen käsittelyn lisäksi beanit voivat tietysti sisältää minkälaisia ja -nimisiä metodeja tahansa. KEVÄÄN MUOTIKAMPAUS SCRIPLETTI Suoraan JSP-sivulle kirjoitettua ohjelmakoodia kutsutaan scripletiksi. Listaus 4 näyttää, miten listauksen 3 mukaisen html-sivun lomakkeen tiedot käsitellään kirjoittamalla koodi suoraan lomakkeen käsittelevälle JSP-sivulle. Request-olio sisältää sivulle saapuneen http-pyynnön, josta annettu markkamäärä luetaan. Koska scripletien sisältö kopioidaan sellaisenaan servletiin, voi scripletejä hyödyntää monipuolisesti. Kannattaa kuitenkin käyttää harkintaa, sillä suuret määrät ohjelmakoodia, monimutkaiset toistorakenteet ja etenkin out.print-komentojen sisällä olevat html-ohjauskoodit tekevät sivun rakenteesta sekavan. Ohjelmakoodi on syytä sijoittaa mahdollisuuksien mukaan beaneihin. Vastaava euromuunnin on toteutettu listauksessa 5 ai- 56 MikroPC 5 / 2001 W W W. M I K R O P C. N E T

emmin esiteltyä listauksen 2 beania käyttäen. Listauksessa 6 on scripleteillä tehty taulukko. Sivu luo taulukon, jossa on 1 20 markan arvot euroina. Saman voisi toteuttaa myös lisäämällä beaniin taulukon palauttavan metodin generoi- Taulukko(). Tämä tekisi sivusta huomattavasti selkeämmän lukea mutta piiskaa sille, joka moisen metodin koodaa. Jos myöhemmin haluttaisiin muuttaa mitä tahansa, esimerkiksi korvata "markat" lyhenteellä mk tai "eurot" (euromerkki!)-symbolilla, pitäisi muutokset tehdä suoraan beaniin. PULLEAT PUSKURIT Toisin kuin hätäinen voisi luulla, JSP-sivulle sijoitettu komento <% out.print("veijo was here"); %> ei suinkaan tuo välittömästi Veijon puumerkkiä selaimen näyttöön. JSP:n out-olio kuuluu javax.servlet.jsp.jspwriter-luokkaan, ja tämän olion kautta tehtävä tulostus tapahtuu normaalisti puskuroituna. Puskurin oletuskoko on kahdeksan kilotavua, mutta sitä voi tarvittaessa kasvattaa tai puskurin voi poistaa käytöstä kokonaan. Puskuroinnin ansiosta sivulla voidaan muuttaa http-vastauksen (response) otsaketietoja tai siirtää suoritus toiselle sivulle, kunhan puskuria ei vielä ole kertaakaan tyhjennetty. Suoritus siirretään toiselle sivulle tagilla: SCOPE-ARVON VAIKUTUS BEANIN ELINIKÄÄN Scopen arvo Beanin elinikä Page Vain sivu, jossa bean määritellään <jsp:usebean>-tagilla. Request Sivu, jossa bean määritellään ja kaikki mahdolliset sivut, joita siihen sisällytetään tai joille suoritus siirretään. Session Nykyinen ja kaikki tulevat kutsut session eliniän aikana. Application Nykyinen ja kaikki tulevat kutsut, jotka kuuluvat samaan sovellukseen. Sovellus sisältää sivut, jotka ovat nykyisen sivun hakemistossa tai jossain sen alihakemistossa. Esimerkiksi /acme/tuotteet/hilavitkutin.jsp kuuluu samaan sovellukseen kuin /acme/tilaus.jsp. <jsp:forward page="uusisivu.jsp"/> JSP-sivulle voidaan myös sisällyttää toisen tiedoston sisältö: <jsp:directive.include file="mainosbanneri.html"/> Toiminnaltaan tagi vastaa C:n esiprosessoijan #include-komentoa. Include-tagien määrää sivulla ei ole rajoitettu. Tiesitkö, että maailman käytetyin raportointiohjelmisto on Crystal Reports? Nyt julkistettu uusi versio 8.5 perustuu entistä vahvemmin webraportointiin. Yksi uusista parannuksista on täydellinen yhteensopivuus myös XML-tietokantaan. Näin WAP-raportit tulivat mahdollisiksi suoraan tietokannastasi. Voit halutessasi asettaa raportit päivittymään automaattisesti! Crystal Reportsin virallinen maahantuoja Datium Oy on erikoistunut Crystal Decisionsin tuotteilla tehtäviin raportointiprojekteihin. Jos haluat uudistaa yrityksesi raportoinnin, voimme tehdä sen teille alusta loppuun. rationalize your future Tutustu myös koulutustarjontaamme ja tarkista jälleenmyyjäsi osoitteessa www.datium.fi. Datium Oy, Ohjelmakaari 1, 40500 Jyväskylä / puh: 014-445 1700 / fax: 014-445 1701 / www.datium.fi / sales@datium.fi

TÄYSISTUNTOJA Html:n siirtämiseen käytetty http ei tarjoa minkäänlaista tilatietoisuutta. Selain ottaa yhteyden palvelimeen, pyytää siltä haluamansa sivun ja sen saatuaan röyhkeästi katkaisee yhteyden edes hyvästelemättä. Istuntojen (session) hallinta on kuitenkin oleellinen osa useita web-sovelluksia. Esimerkiksi käyttäjän tehdessä ostoksia webbikaupassa ostoskorin sisältö säilytetään istuntotietojen avulla. Onneksi istuntojen hallinta on toteutettu JSP:ssä esimerkillisesti. Yksinkertaisimmillaan riittää beanin eliniän (scope) määrittely usebean-tagin yhteydessä, ja JSP huolehtii muusta automaattisesti. Mahdollisuudet eliniän määrittelyyn on esitelty oheisessa taulukossa. Beanin elinikä määritellään esimerkiksi seuraavasti: <jsp:usebean id="omapapu" class="fi.mikropc.jspdemo.kahvipapu" scope="session"/> Ilman eksplisiittistä määrittelyä beanin eliniäksi asetetaan arvo "page". Normaalisti istuntoja hallitaan hyödyntämällä käyttäjän koneella säilytettäviä evästeitä (cookies). Jos evästeet eivät ole käytössä tai esim. selain ei niitä tue, voidaan session tunniste säilyttää myös linkkien osoitteiden perässä (url rewriting), mutta tämä tekniikka vaatii jokaisen linkin muokkaamista. JSP tarjoaa sivulle HttpSession-luokkaan kuuluvan olion session, johon voidaan sisällyttää muita olioita setattribute()-metodilla. Olioita voidaan myöhemmin pyytää saman session-olion getattribute()-metodilla. Palvelin huolehtii tietojen assosioimisesta oikeisiin istuntoihin. Istuntojen vanhenemisajan asettamiseen käytetään session-olion setmaxinactiveinterval()-metodia. Linkkejä lisätiedon lähteille Dynaamisten webtekniikoiden kehitys Kymmenisen vuotta sitten esiteltiin html-kieli ja internetiin ilmestyi nopeasti runsaasti etenkin opiskelijoiden tekemiä nopeasti vanhenevia kotisivuja. Samaan aikaan alkoi syntyä myös dynaamisempia sivustoja. Hakupalvelujen, kauppapaikkojen ja sääsivujen tiedot generoitiin joko käyttäjän tai ulkoisen lähteen antamien tietojen perusteella. Silloiset www-palvelimet tarjosivat sivujen dynaamiseen muodostamiseen ainoastaan erittäin yksinkertaisen cgi-rajapinnan (common gateway interface). Lomakkeen käsittelyyn kirjoitettiin usein Perl-kielinen ohjelma, joka luki lomakkeessa annetut tiedot ja generoi käyttäjälle sivun vastaukseksi. Käyttäjän painettua lomakkeen lähetyspainiketta palvelin käynnisti Perl-tulkin omassa prosessissaan. Perl-ohjelma muodosti valmiin html-sivun ja palautti sen sisällön palvelimelle. Uuden prosessin luomisen raskaus ja tulkatun Perlin hitaus aiheutti monille palvelimille skaalautuvuusongelmia, kun käyttäjien määrä kasvoi. Lisäksi vastinesivut olivat karuja, kun html-koodi kirjoitettiin suoraan ohjelmaan. Pienenkin muutoksen tekeminen vaati aina muutoksia ohjelmaan. FastCGI ja mod_perl -tekniikoiden avulla Perl-ohjelmien suorituskykyä on saatu sittemmin huomattavasti parannettua. www.jspinsider.com/ Kattava kokoelma JSP-tietoa ja -linkkejä. jakarta.apache.org/ Ilmainen JSP- ja servlet-container. www.jguru.com/jguru/faq/ Runsaasti paljon kysyttyjä faq-vastauksia JSP-ongelmiin. java.sun.com/products/jsp/ Sunin viralliset JSP-sivut, joista löytyy mm. JSP:n määritykset. java.sun.com/products/javabeans/ Sunin viralliset JavaBeans-sivut. KAHVIA KONEESEEN Sun esitteli Java-ohjelmointikielen viitisen vuotta sitten. Saman ohjelman toimiminen eri ympäristöissä, C++:sta tuttu syntaksi ja monet edistyneet ominaisuudet tekivät Javasta nopeasti suositun. Alkuaikoina ohjelmien suorituskyky jätti tosin toivomisen varaa. Alussa Java-ohjelmat olivat lähinnä selaimissa toimivia yksinkertaisia pelejä tai graafisia efektejä. Innostus sovelmiin (applet) kuitenkin laantui nopeasti. Sovelmien käynnistyminen kesti kauan, suoritus oli hidasta ja selainten Java-ympäristöt olivat bugisia. Nykyisin sovelmia käytetään vähän, mutta Java-ohjelmat ovat siirtyneet selaimista palvelimiin, missä niitä kutsutaan servleteiksi. Servletit eivät kuitenkaan poistaneet suurta ongelmaa: edelleen htmlkoodi generoitiin ohjelmallisesti. Lisäksi tulkattavien Perl-ohjelmien muokkaukseen riitti tekstieditori, mutta servletit piti muokkauksen jälkeen kääntää vielä Java-tavukoodiksi. TIETO JA KUKKASET ERIKSEEN Kaiken kukkuraksi sivun lopullisen ulkoasun näkeminen suoraan Perlkoodista vaatisi ennustajan. Lisäksi samaa tietoa pitäisi voida hyödyntää useissa yhteyksissä, esimerkiksi web- ja wap-sivuilla. Avuksi on kehitetty erilaisia wwwpalvelinlaajennuksia ja sovelluspalvelimia, jotka osaisivat suorittaa htmlsivuille sijoitetun ohjelmakoodin ennen sivun lähettämistä sen pyytäjälle. Tällä hetkellä ehkä yleisimmin käytössä oleva tekniikka on Microsoftin ASP. ASP:ssa ohjelmointikielenä käytetään yleensä Visual Basiciin perustuvaa VB Scriptiä. Suuremmat projektit kootaan ActiveX-komponenteista. ASP:n suosion ansiosta muihinkin kuin windowsilla pyöriviin palvelimiin on lisätty ASP-tuki. ActiveXkomponentit toimivat yleensä vain windowsissa. Microsoftin.NET-arkkitehtuuri sisältää uuden ASP-version ASP+. Se parantaa huomattavasti ohjelmien suorituskykyä, koska ASP+-sivut käännetään JSP:n tavoin tavukoodimuotoon. 58 MikroPC 5 / 2001 W W W. M I K R O P C. N E T