Harri Laine 1. Digitaalisen median tekniikat, s2007 HY/TKTL, palvelinohjelmointi_1. Palvelinohjelmointi

Samankaltaiset tiedostot
Digitaalisen median tekniikat, k2004 HY/TKTL, palvelinohjelmointi_1 21/04/2004. Harri Laine 1. Palvelinohjelmointi. Staattinen www-sivu

Digitaalisen median tekniikat. Palvelinohjelmointi Harri Laine 1

Digitaalisen median tekniikat. Palvelinohjelmointi

Taustaa. CGI-ohjelmointi

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

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

Digitaalisen median tekniikat. Luento 4: JavaScript

Digitaalisen median tekniikat. JSP ja XML

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

Digitaalisen median tekniikat JavaScript

Digitaalisen median tekniikat JavaScript Harri Laine 1

05/04/2004. Digitaalisen median tekniikat, k2004 HY/TKTL, javascript_1. Harri Laine 1. JavaScript

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

1 PHP-sovelluksen toiminta

3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä.

Helsingin yliopisto, TKTL Tietokantojen perusteet, s 2000 WWW-tietokantasovellukset Harri Laine 1. vapaamuotoiset tiedot

Digitaalisen median tekniikat xhtml - jatkuu

SQL Buddy JAMK Labranet Wiki

Digitaalisen median tekniikat xhtml - jatkuu Harri Laine 1

Erittäin nopea tapa saada kehitysympäristö php:lle pystyyn Voidaan asentaa muistitikulle

KIURU Tietotekniikan sovellusprojekti

Digitaalisen median tekniikat xhtml - jatkuu

directive attr1= value1 attr2= value2 %>

Olio-ohjelmointi Javalla

PHP:n alkeita ja taustaa. Markus Norrena

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

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmoinnin perusteet Y Python

Harjoitustyö: virtuaalikone

1.1 Internetistä lyhyesti. Mikä Internet on? 1.2 Maailmanlaajuinen verkko

Written by Administrator Saturday, 28 August :51 - Last Updated Tuesday, 22 February :45

Kieliversiointityökalu Java-ohjelmistoon. Ohje

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Pedacode Pikaopas. Web-sovelluksen luominen

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

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

815338A Ohjelmointikielten periaatteet

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Haka-palveluiden valvonta ja tilastointi AAIEye -työkalun avulla. Mika Suvanto, CSC

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

VERKKOSOVELLUSTEN OHJELMOINTI, JOHDATUS PHP:HEN

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

Tietokannan webbikytkentä. Janne Petäjä

Yleinen ohjeistus Windows tehtävään.

TIE Principles of Programming Languages CEYLON

Security server v6 installation requirements

Java-kielen perusteet

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

Microsoft Visual Studio 2005

Ohjelmoinnin peruskurssi Y1

20. Javan omat luokat 20.1

Ohjelmoinnin peruskurssi Y1

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

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

15. Ohjelmoinnin tekniikkaa 15.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

2. PEHMEÄ XHTML XRAJAHTML

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Security server v6 installation requirements

Ohjelmoinnin perusteet Y Python

Webpalvelin muistitikulle - Ohje

OSA I Aloitetaan. Oppitunti. 1. PHP: Kotisivusta portaaliin 2. PHP:n asentaminen 3. Ensimmäinen skriptisi. 17 Johdanto

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Alkuun HTML5 peliohjelmoinnissa

Paavo Räisänen. WampServer palvelimen asennus ja käyttö Eclipsen kanssa, sekä ensimmäinen FTP yhteys.

Ohjelmoinnin jatkokurssi, kurssikoe

Tieto- ja tallennusrakenteet

Ohjelmoinnin perusteet Y Python

15. Ohjelmoinnin tekniikkaa 15.1

Laajuus 5 op Luennot: 12 x 2t Harjoitukset: 7 viikkoharjoitusta harjoitusten tekemiseen saatavissa apua 2 ryhmää / harjoitus

4. Lausekielinen ohjelmointi 4.1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Java-kielen perusteet

Palvelinpuolen ohjelmointi

Ohjelmoinnin peruskurssien laaja oppimäärä

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

LINUX-HARJOITUS, MYSQL

OPPITUNTI 20 Tilan tallentaminen istuntofunktioilla

Loppukurssin järjestelyt

Harjoitustyö 3: Verkkosivujen toiminnallisuus (JavaScript)

Ohjelmointi 1 Taulukot ja merkkijonot

PHP tehtävä 3 Atte Pekarinen TIKT13A

Käytin tehtävän tekemiseen Xubuntu käyttöjärjestelmää aikaisemmin tekemältäni LiveUSB-tikulta.

P e d a c o d e ohjelmointikoulutus verkossa

7/20: Paketti kasassa ensimmäistä kertaa

Taulukot. Jukka Harju, Jukka Juslin

Luento 3. Jouni Ikonen - Jouni.Ikonen lut.fi

7. Näytölle tulostaminen 7.1

18. Abstraktit tietotyypit 18.1

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

Visma Fivaldi selainohjeet Internet Explorer

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

OPPITUNTI 3 Ensimmäinen skripti

Conversion Counter. Asennusopas

Harjoitus 5 (viikko 48)

Ohjelmoinnin peruskurssien laaja oppimäärä

Transkriptio:

Digitaalisen median tekniikat Staattinen www-sivu Palvelimelle tallennettu valmis sivu Sama URL antaa aina saman sisällön Teknisesti sivu voi muodostua monesta osasta, esimerkiksi kuvat ovat eri tiedostoja www-palvelinohjelmistot mahdollistavat myös sivun rakentamisen siten, että sivu on pilkottu useisiin eri tiedostoihin, esimerkiksi useille sivuille yhteiset osat on koottu erillisiin tiedostoihin. SSI (Server Side Include) on yksinkertainen tekniikka sivun kokoamiseen palvelimessa Harri Laine 1 Harri Laine 2 Apache-pavelin tarjoaa yksinkertaisen kielen palvelimessa tapahtuvien täydennysten määrittelyyn. SSI (server side include) täydennyslauseet ovat rakenteeltaan muotoa: <!-- #komento parametri= arvo.--> Tärkeimpiä komentoja on include, jolla voidaan liittää sivuun tiedostoja tai ohjelmien tuloksia <!-- #include file= taydennys.shtml --> korvautuu tiedoston taydennys.shtml sisällöllä tätä muotoa käytettäessä tiedoston on oltava samassa hakemistossa kuin täydennettävä tai sen alihakemistossa Harri Laine 3 Muoto <!-- #include virtual=../includes/a.html --> ei rajoita URL:iasamaan hakemistoon Tässä voidaan antaa myös ohjelmakutsu <!-- #include virtual= /cgi_bin/ohjelma.cgi?par=xyz --> Täydennyksinä voidaan myös tulostaa muuttujien arvoja, esim. <!-- echo var= DOCUMENT_NAME --> tulostaa dokumentin nimen ja <!-- echo var= LAST_MODIFIED --> tulostaa dokumentin viimeisen ylläpitoajankohdan Harri Laine 4 SSI-elementeillä voidaan myös määritellä uusia muuttujia ja asettaa niille arvoja sekä määritellä ehdollisia osia otettavaksi dokumenttiin. Alla SSI:llä toteutetttu pätkä valikkomääritystä, jossa aktiivinen valinta ilmaistaan taulukkoalkion luokituksena luokkaan active. <!--#if expr="\"$document_name\"=\"index.shtml\"" --> <td class="active"> <!--#else --> <td class="passive"> <!--#endif --> <a href="index.shtml">ajankohtaista</a> valikko jatkuu: <!--#if expr="\"$document_name\"=\"kurssikuvaus.shtml\"" --> <td class="active"> <!--#else --> <td class="passive"> <!--#endif --> <a href="kurssikuvaus.shtml">kurssikuvaus</a> Idea tässä on se, että usealla dokumentilla on sama valikko ja SSI koodi leimaa vuorossa olevan dokumentin nimen perusteella Harri Laine 5 Harri Laine 6 Harri Laine 1

Sivun index.html kohdalla edelliset lauseet tuottaisivat sisällön: <td class="active"> <a href="index.shtml">ajankohtaista</a> <td class="passive"> <a href="kurssikuvaus.shtml">kurssikuvaus</a> Harri Laine 7 SSI:ssä näkyvät kaikki CGI-ympäristömuuttujat, myös QUERY_STRING (eli kysymysmerkin jälkeinen kutsuparametrit sisältävä osa URL:sta), mutta sillä ei pääse käsiksi QUERY_STRING:n osiin, siis yksittäisiin kutsuparametrien arvoihin SSI:llä ei voi myöskään käsitellä tietokantoja eikä kirjoittaa muuta kuin luotavalle sivulle Lähinnä käyttö on valikkojen yms. yhteisten osien kokoamista, katso esimerkkinä kurssin index.shtml sivu. (../dime/k07/index.txt) Harri Laine 8 SSI-määreitä sisältävän tiedoston tyyppitunnuksena on yleensä.shtml Tiedostolla pitää ainakin tktl:n ympäristössä olla suoritusoikeus (x omistajalle riittää) SSI:n mahdollisuudet muokata sivua ovat hyvin rajalliset. Enemmän mahdollisuuksia on tarjolla käynnistettäessä erillisiä palvelinohjelmia tuottamaan sivuja tai käyttämällä palvelimessa suoritettavia www-sivuun upotettuja palvelinskriptejä. Sivun tuottamistyökalut eivät välttämättä hallitse SSI-täydennyksiä Harri Laine 9 Harri Laine 10 Perinteinen ratkaisu palvelimella olevien ohjelmistojen käynnistämiseen on CGI (Common Gateway Interface) CGI määrittää tavan, millä web-selain webpalvelimen kautta kommunikoi palvelinkoneessa toimivan ohjelman kanssa. Kommunikointi perustuu joukkoon ympäristömuuttujia sekä ohjelman syöttö- ja tulosvirran ohjaukseen Ympäristömuuttujia: DOCUMENT_ROOT HTTP_COOKIE HTTP_HOST HTTP_REFERER HTTP_USER_AGENT HTTPS PATH QUERY_STRING The root directory of your server The visitor's cookie, if one is set The hostname of the page being attempted The URL of the page that called your program The browser type of the visitor "on" if the program is being called through a secure server The system path your server is running under The query string (see GET, below) Harri Laine 11 Harri Laine 12 Harri Laine 2

REMOTE_ADDR REMOTE_HOST REMOTE_PORT REMOTE_USER The IP address of the visitor The hostname of the visitor (if your server has reverse-name-lookups on; otherwise this is the IP address again The port the visitor is connected to on the web server The visitor's username (for.htaccessprotected pages) SCRIPT_FILENAME SCRIPT_NAME SERVER_ADMIN SERVER_NAME SERVER_PORT The full pathname of the current CGI The interpreted pathname of the current CGI (relative to the document root) The email address for your server's webmaster Your server's fully qualified domain name (e.g. www.cgi101.com) The port number your server is listening on REQUEST_METHOD REQUEST_URI GET or POST The interpreted pathname of the requested document or CGI (relative to the document root) SERVER_SOFTWARE The server software you're using (e.g. Apache 1.3) Harri Laine 13 Harri Laine 14 CGI-ohjelma voi olla kirjoitettu millä ohjelmointikielellä tahansa. Miten ympäristömuuttujat näkyvät ohjelmalle riippuu ohjelmointikielestä Tyypillisesti ohjelman käynnistyspyyntöön liittyy parametreja, jotka välitetään joko ympäristömuuttujan QUERY_STRING kautta (GET) tai standardisyöttövirran kautta (POST) Ohjelman ensimmäisiä tehtäviä on purkaa parametrit ja toimia sitten saatujen arvojen perusteella. Harri Laine 15 Perinteisesti ohjelmat on CGI liittymän kautta käynnistetty käsittelemään jokaista pyyntöä uutena prosessina, suhteellisen raskasta (Windowsissa vielä raskaampaa kuin UNIX:ssa) eikä mahdollista vuorovaikutuksen tilan suoraa säilytystä palvelimen työmuistissa tila pitää tallentaa tietokantaan tai tiedostoihin tai välittää selaimen kautta takaisin palvelimelle seuraavaan palvelupyynnön yhteydessä (esim. evästeenä (cookie) tai lomakkeen piilotietona) CGI on jokaisen www-palvelimen tarjoama perustekniikka Ei edellytä muuta kuin www-palvelimen, ei vie jatkuvasti resursseja Harri Laine 16 Prosessi perustetaan ohjelmaa kutsuttaessa palvelupyyntö lataa palvelu hävitä ohjelma Harri Laine 17 Esimerkki: ostoskorin kokoaminen eväste/ piilokenttä aloita keräys uusi tuote (korin tunnus) uusi tuote (korin tunnus) uusi sivu uusi sivu perusta kori lisää tuote lisää tuote tallenna tallenna tallenna korin tila korin tila korin tila selain prosessit myös koko korin tila voitaisiin kierrättää Harri Laine selaimen kautta 18 hae hae Harri Laine 3

Nykyiset www-palvelimet tarjoavat erilaisia kevytprosessi -ratkaisuja ja myös vuorovaikutuksen tilan säilyttämistä CGI-kutsujenkin yhteydessä. Hyvin yleinen CGI:n yhteydessä käytetty ohjelmointikieli on Perl parametrit helppo purkaa palvelimella sijaitsevien tiedostojen käsittely mahdollista tietokantakäsittely mahdollista sivu tuotetaan kirjoituslauseilla tarjolla valmiita funktioita html-tagien lisäämiseen - servletit Servletit ovat Java-ohjelmointiympäristön tarjoama vanhin tekniikka palvelinohjelmien toteutukseen edellyttävät, että suoritusalusta (esim. Tomcat) on jatkuvasti käynnissä palvelut säikeinä ladataan kerran servletti istuntojen tilat servlettiympäristö palvelin Harri Laine 19 Harri Laine 20 Java Servletit Servletit poikkeavat perinteisestä CGItekniikasta siinä, että servletin koodi ladataan muistiin kerran ja on sen jälkeen valmiina käyttöön palvelut toteutetaan säikeinä, mikä on prosesseja kevyempi toteutus servletit voivat säilyttää vuorovaikutuksen tilan Session-olioina kuten Perlissä html-koodi tuotetaan kirjoituslauseiden avulla funktiokirjastoja tagien lisäämiseen löytyy, mutta nämä eivät ole osa Javan servlet-rajapintaa Palvelinohjelmat voivat tuottaa sivulle yhtä hyvin html-koodia kuin myös JavaScript-koodia. Ne voivat myös tuottaa ja vaihtaa sivuun kytkettyjä tyylimäärityksiä. Harri Laine 21 Harri Laine 22 skriptikielet Sivujen tuottaminen ohjelmointikielen kirjoituslauseilla, kuten Perl:ssä tai Java servleteissä, on suoraviivaista, mutta sivun rakennetta voi olla vaikea hahmottaa. Palvelinpään skriptikielten ideana on säilyttää sivun staattiset osat html, css- tai JavaScript- koodina ja upottaa ohjelmakoodia vain sellaiseen kohtaan, jossa sisältöä on dynaamisesti muutettava tai sisällölle on muuten tehtävä jotain. skriptikielet Palvelimen skriptikieliä on tarjolla useita Netscape palvelin tarjoaa Livescript-kielen (JavaScriptin palvelinversio) Microsoftin asp.net ympäristössä voi käyttää useita kieliä esim JScript, VBScript, jne Apache ympäristössä voi käyttää esimerkiksi phpskriptikieltä, php:n voi kytkeä myös muihin wwwpalvelimiin. JSP (Java Server Pages) edellyttää Javan servlettiympäristöä. Harri Laine 23 Harri Laine 24 Harri Laine 4

PHP (alunperin Personal Home Page Tools) Ensimmäinen versio 1995 Palvelimessa suoritettava skriptikieli, jolla voi mm. muokata www-sivuja käsitellä tietokantoja ja tiedostoja palvelimella tulkattava kieli lähtökohtana C-kieli PHP:n käyttö TKTL:llä on kuvattu harjoituksen 4 lisätehtävässä. Esimerkki: Ohjelma, joka tulostaa kutsuparametrien arvot. http://db.cs.helsinki.fi/~laine/php/pcount.php (huom: php käsittelee toistuvan parametrin arvot eri tavalla kuin ne käsitellään esim Javaservleteissä tai Perl:ssä tarjoaa vain viimeisen) Harri Laine 25 Harri Laine 26 #!/usr/local/bin/php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>parametrilistaus</title> </head> <body> <h2>parametrilistaus</h2> #!/usr/local/bin/php <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>parametrilistaus</title> </head> <body> <h2>parametrilistaus</h2> tarvitaan php-tulkin käynnistämiseen koska tktl:llä php käynnistyy CGI-prosessina Harri Laine 27 Harri Laine 28 <p> <?php $counter=0;?> </p> <p> <?php foreach ($_REQUEST as $param => $value) { echo "$param = $value<br>"; $counter++; }?> <p></p> <p><?php echo "Yhteensä: $counter parametria."?></p> </body> </html> Harri Laine 29 <p> <?php $counter=0;?> </p> <p> upotettu php: alustetaan muuttuja <?php foreach ($_REQUEST as $param => $value) { echo "$param = $value<br>"; $counter++; upotettu php: } käydään läpi assosiatiivinen?> taulukko ja tulostetaan parametrin nimi ja siihen liittyvä arvo <p></p> <p><?php echo "Yhteensä: $counter parametria."?></p> </body> </html> -merkein rajatun merkkijonon sisällä oleva muuttujanimi korvataan muuttujan arvolla Harri Laine 30 Harri Laine 5

Tunnisteet alkavat kirjaimella tai jollain sallituista erikoismerkeistä ja sen jälkeen voi seurata kirjaimia, numeroita tai sallittuja erikoismerkkejä (operaatiosymboleja ei voi käyttää tunnisteissa) Tunnisteet ovat muotoherkkiä (case sensitive) Muuttujissa tunnistetta edeltää aina $ Literaalit numeeriset esim. 123, 12.3, 0123 (octal), 0x123 (hexa) merkkijono: yksin- tai kaksinkertaisissa lainausmerkeissä -rajatuissa muuttujat korvataan arvoillaan -rajatuissa ei $m1= xyz ; $m2= arvo $m1 ; (arvo xyz) $m3= muuttuja $m1 ; (muuttuja $m1) erikoismerkeille C/Java tyylinen korvaus kummassakin muodossa esim \, \n, \\, jne Harri Laine 31 Harri Laine 32 Tietotyypit: kokonaisluvut, liukuluvut, merkkijonot, totuusarvot (false=0,, 0,null, tyhjä olio ; true kattaa kaikki muut) Harri Laine 33 Taulukot: alkioon viitataan indeksoidulla muuttujanimellä $taulukko[indeksi] indeksi voi olla kokonaisluku (myös negatiivinen) tai merkkijono Olkoon x suurin kokonaislukuindeksi, joka taulukossa on käytössä, $taulukko[] viittaa tällöin alkioon $taulukko[x+1], jos taulukossa ei ole vielä yhtään kokonaislukuindeksoitua alkiota $taulukko[] viittaa alkioon $taulukko[0] kokonaislukuindeksit ja merkkijonoindeksit eivät viittaa samaan alkioon toisin kuin JavaScriptissä Harri Laine 34 taulukko: taulukko voidaan luoda array(sisältö) määreellä. $taulukko1= array (10,30,50); $taulukko1[0]==10, $taulukko1[1]==30, $taulukko2= array(1=>10, puu => koivu, metsä ); $taulukko2[1]==10, $taulukko2[ puu ]== koivu, $taulukko2[2]== metsä, taulukko2[0]==null $taulukko3[ kurssi ]=array( DiMe, 2,120); $taulukko3[ kurssi ][0]== DiMe, $taulukko3[ kurssi ][1]==2, PHP tarjoaa valmiina taulukoita CGI-parametrien käsittelyyn $_POST sisältää post-metodilla lähetetyt kutsuparametrit indeksointi parametrin nimellä $_GET sisältää get-metodilla lähetetyt kutsuparametrit $_COOKIE sisältää selaimelta saadut evästeet $_FILES sisältää selaimelta ladatut tiedostot $_REQUEST = $_POST union $_GET union $_COOKIE $_SERVER ja $_ENV : palvelimeen ja yhteyteen liittyvää tietoa skripti: http://db.cs.helsinki.fi/~laine/php/psuper.php?var=taulukko listaa TAULUKON sisällön (ei taulukkotyyppisiä alkioita), Anna taulukon nimi kuten yllä http://db.cs.helsinki.fi/~laine/php/psuper.txt (lähdekoodi, IE:llä katso lähdekoodi) Harri Laine 35 Harri Laine 36 Harri Laine 6

Muuttujat voivat olla globaaleja käytettävissä funktioiden ulkopuolella ja funktioissakin jos ne esitellään globaaleina, paikallisia käytettävissä funktion sisällä arvo suorituskertakohtainen staattisia paikallisia käytettävissä funktion sisällä arvo säilyy suorituskerrasta toiseen superglobaaleja käytettävissä kaikkialla ilman esittelyjä Sijoitus on arvon kopioiva $m1= xyz ; $m2=$m1; $m1= abc ; ($m2 on edelleen xyz ) Erityinen alias sijoitus (&=), jolla saadaan muuttujat viittaamaan samaan muistipaikkaan $m2 &= $m1; $m1= def ($m2 on myös def ) Harri Laine 37 Harri Laine 38 Harri Laine 7