Elikkä olis tarkotus tallentaa erään java appletti "pelin" ennätykset palvelimelle teksti tiedostoon. Ajattelin toteuttaa sen jotenkin niin, että appletti lähettää tiedot php scriptille joka kirjottaa ne tiedostoon. Kuinkahan tämä tiedon lähetys java appletin ja php scriptin välillä onnsituisi järkevästi? Appletti vois tietysti siirtää selaimen toiseen osoitteeseen ja siirtää informaation osoitteen mukana, mutta se menee vähän kömpelöksi. Jos onnistuis niin, ettei tarvi selaimen osotteen muuttua mikskään?
Ite tein taannoin pienen tietovisan ja aikamoista säätöä oli noiden applettien oikeuksien kanssa. En ehdi nyt hirveästi kirjoittelemaan, joten pastean yhden noista Tulos-luokan funktioista. Siitä varmaan saa jujun selville.
/** * lähettää tuloksen tiedostolle post-metodia käyttäen * * @param hakemisto appletin hakemisto * @todo parempi virheenkäsittely */ public void tallennaTulos(String hakemisto) { URL url; URLConnection urlConn; DataOutputStream tulostus; BufferedReader br; String str; try { /* alustetaan yhteys */ url = new URL(hakemisto + "tallennatulos.php?salaisuus=banaani"); urlConn = url.openConnection(); /* ... ja yhteyden muuttujat */ urlConn.setDoInput(true); // viedään tietoa urlConn.setDoOutput(true); // ja otetaan myös vastaan urlConn.setUseCaches(false); // ei käytetä välimuistia /* pyynnön content-type */ urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); /* * viedään tallennettavat tiedot varmuuden vuoksi URLEncoderin läpi ja käytetään * perinteistä merkistöä ISO-8859-1 */ tulostus = new DataOutputStream(urlConn.getOutputStream()); String content = "nimi=" + URLEncoder.encode(this.nimi, "ISO-8859-1") + "&pisteet=" + URLEncoder.encode(Integer.toString(this.pisteet), "ISO-8859-1"); tulostus.writeBytes(content); tulostus.flush(); tulostus.close(); /* lähetyksen jälkeen on otettava vielä mahdollinen vastaus vastaan. ei tehdä sille kuitenkaan mitään */ br = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); while ((str = br.readLine()) != null) { } // while br.close(); } catch (Exception ex) { System.out.println("Tuloksen tallennus epäonnistui."); } // catch } // tallennaTulos
Tuossa siis lähetetään data post-metodia käyttäen ja tuloksen käsittely hoidetaan sitten tuolla php-tiedostossa (olettaen että salasana on banaani, toki tuon voisi tehdä paljon fiksumminkin :)).
Hirveen monimutkasta O_o
Elämä on. Aina ei käy kaikki hirveen helposti. Eikä tuo edes ole hirveän monimutkaista, tuossahan on kaikki mitä tarvitaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.