Harjoitustyön vaatimukset ========================= Valmis: toukokuun loppuun mennessä, ohjausajat vähenevät kovasti kohti kuun loppua... - vähintään kaksi lomaketta (eli erillistä jsp-sivua, vrt. malli) toinen koko datan näyttämiseksi ja toinen yksittäisen alkion näyttämiseksi - oikeellisuustarkistukset GET ja POST- parametreille - kommentit (ja sanotaan kommenteissa jos synkronointi tekemättä) - (poikkeuskäsittely) - tiedostot files.txt:n avulla kuten harjoitustyökin, ks: http://www.mit.jyu.fi/vesal/kurssit/ohjelmointi2008/paate/paateW2.txt - palautusta varten tiedostot kuten varsinaisellakin kurssilla - lisäksi erittäin mielellään palvelin auki jonnekin. Mikroluokista Sovjet ja Finland on muutettu niin, että niistä voi jättää palvelimen auki porttiin 8080 (?) ja sitten teille on profiilia muutettu (?) niin, että työaseman voi lukita siksi aikaa kun työtä käy näyttämässä ohjaajalle. Siis näyttöä varten: 1) Tee files.txt kuten ohj2-kurssilla ja tiedostot nettiin 2) Käynnistä kotona tai mikroluokassa palvelin 3) Testaa viereisessä koneessa jotta palvelin toimii. Kirjoita ylös tarvittava URL. 4) Lukitse palvelinkone. 5) Tule näyttämään työtäsi. - tarvittaessa porttia voi vaihtaa etsimällä jonoa: port="8080" serverin Serverin server.xml -tiedostosta ja vaihtamalla siihen haluamansa portin. - ongelmia HT:n kanssa - data-tiedostoja ei löydy. Käynnistä Eclipse tiedostojen hakemistossa - valittaa ali.jarista. Lisää Ali.jar J2EE riippuvuuksiin Esimerkki mitä tapahtuu jos syötettä ei tarkisteta ================================================== Oletetaan että jsp-sivulla on hakukentta nimihakua varten. Käyttäjä kirjoittaa kenttaan esim: kalle Koodissa hakukentän arvo on luettu muuttujaan hakukentta Sitten kutsutaan tietokantaa: tulos = kanta.query("select * from jasenet where nimi = \""+hakukentta+"\";"); Tämä tuottaa tietokantaan kyselyn: select * from jasenet where nimi = "kalle"; Mutta jos ilkeämielinen käyttäjä kirjoittaakin hakuehdoksi: kissa"; delete from jasenet; select * from jasenet where nimi = " niin tietokantaan meneekin komennot: select * from jasenet where nimi = "kissa"; delete from jasenet; select * from jasenet where nimi = ""; eli koko jasenet-taulun sisältö tuohotaan. Tämän vuoksi syötteet on aina tarkistettava tällaisten väärinkäytösten varalta. Esim. poistetaan syötteestä kaikki lainausmerkit. Toinen väärinkäytös on päästää syötteeseen JavaScriptiä. Jos JS pääsee läpi käyttäjä voi luoda lomakkeen jossa kysytään esim. salasanoja ja ne toimitetaan sitten paikkaan johon ne eivät kuuluisi. Esimerkki synkronoinnista: ============================ Jasenet.java ============= private Object locklkm = new Object(); /** * Lisää uuden jäsenen tietorakenteeseen. Ottaa jäsenen omistukseensa. * @param jasen lisätäävän jäsenen viite. Huom tietorakenne muuttuu omistajaksi * @throws SailoException jos tietorakennen on jo täynnä */ public void lisaa(Jasen jasen) throws SailoException { synchronized (locklkm) { if ( lkm >= alkiot.length ) throw new SailoException("Liikaa alkioita"); alkiot[lkm] = jasen; lkm++; } muutettu = true; }