Mulla on Swingillä tehty työpöytä -ohjelma. Yhdessä sen toiminnossa voi syöttää henkilön tiedot ja lähettää ne netin kautta ihan muualla olevan palvelimen tietokantaan.
Tein nyt tuolle palvelinkoneelle Tomcatiin servletin, joka hoitaa tuon henkilön tietokantaan tallentamisen.
Kysymys kuuluu, että miten saan tolta työpöytäohjelmalta lähetettyä vaikka henkilö olion tolle servletille ? Servletin pitäisi sitten myös lähettää joku ok muuttuja takasin swing ohjelmalla onnistumisesta. Oisko heitää koodiesimerkillä ?
Entä miten voin varmistaa, että se on varmasti se työpöytäohjelma, joka sitä servlettiä on kutsumassa eikä vaikka joku hakkeri ?
Vai pitäisikö tommonen homma hoitaa jollain SOAP:illa tms ?
Tein nyt tuolle palvelinkoneelle Tomcatiin servletin, joka hoitaa tuon henkilön tietokantaan tallentamisen.
Kysymys kuuluu, että miten saan tolta työpöytäohjelmalta lähetettyä vaikka henkilö olion tolle servletille ? Servletin pitäisi sitten myös lähettää joku ok muuttuja takasin swing ohjelmalla onnistumisesta. Oisko heitää koodiesimerkillä ?
Entä miten voin varmistaa, että se on varmasti se työpöytäohjelma, joka sitä servlettiä on kutsumassa eikä vaikka joku hakkeri ?
Vai pitäisikö tommonen homma hoitaa jollain SOAP:illa tms ?
Vastaukset 10
Vanhimmat
Yleensä kai tollaset tehdään vaikka beanillä, jota jutsutaan vaikka sitten RMI:llä.
http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/rmi_iiop_pg.html
mutta onnistuuhan se servletilläkin.
Pistä servlettiisi jokin salainen avain, jonka vain työpöytäohjelmasi ja servletti tietää.
Sitten lasket siitä tiivisteen. Otat vaikka kellonajan ja päivämäärän muodossa
pp.kk.vvvv + täydet tunnit + salainen avain
koko rimpsu vois olla vaikka
21.11.2004 10 lj345l345jh3l4DFGHdfg345#¤%#¤%dfgdfg
Siitä saat MD5 tiivisteen javan omilla funtioilla:
http://www.spiration.co.uk/post/1199
sen lähetät sitten servletille henkilötietojen kanssa. Servlet laskee saman tiivisteen ja jos ne tästää, niin viesti tulee työpöytäohjelmasta.
Jos servlet palauttaa http responsessa HTTP 200 OK, niin silloin ei tullu mitää virhettä. Vois kai se revlet laittaa response headeriksi jokun itse tekemänkin.
Kiitoksia. Oisko vielä heittää jotain koodinpätkää esimerkiksi, että miten vaikka tommonen olio kannattaa lähettää servetille ? Vai lähetetäänkö se ihan vaan requestina:
http://palvelimen.osoite/servletti?henkilo=henkilo
Tuota RMI:tä kannattaa kai käyttää silloin kun siirrettävää tavaraa on paljon?
Jos tavaraa on paljon niin voi käyttää esim. POST:ia. Itse kokeilisin HttpClient:iä.
http://jakarta.apache.org/commons/httpclient/
=============================
Kopio esimerkistä:
HttpClient client = new HttpClient();
PostMethod httppost = new PostMethod("http://localhost:8080/httpclienttest/body");
File file = new File(args[0]);
httppost.setRequestBody(new FileInputStream(file));
httppost.setRequestContentLength( (int)file.length());
client.executeMethod(httppost);
Mä mieteskelen vähän samanlaista asiaa. Lähinnä, että mikä mahtaa olla Javalla paras/järkevin tapa siirtää enempi dataa (esim. olioita ja vektoreita) työpöytäohjelman ja palvelimen välillä. Eli työpöytä -ohjelma käy aina välillä hakemassa palvelinkoneen tietokannoista tavaraa ja myös tallentaa sitä sinne.
Tee vaikka toStream() ja createFromStream() metodit niihin luokkiin. Sitten streamaat sen luokan kun haluat lahettaa sen ja toisessa paassa luot sen saman luokan streamista.
Niin ja jatkan viela etta laittaisin noi serverin ja desktopin yhteiset luokat (jotka siis haluat streamata) johonkin pakettiin joka ei kuulu serveriin eika desktoppiin. Sitten otat sen molemmissa kayttoon. Nain sulla ei ole kuin yhden kerran se sama luokka sun koodissasi (jos ajattelit kopioida sen molempiin) ja nain ei tule yllapidettavyysongelmia.
Kun sinulla on työpöytäsovelluksella yhteys tietokantaan niin miksi se pitää hoitaa servletin kautta???
No eipä viitti laittaa myytäväksi tulevaan softaan mukaan tietokantayhteyksiä ja -lauseita.
JavaServlets kirja julkaisija DOCENDO
hinta n 65 e
Tuossa kirjassa on ratkaisut "probleemaasi" selvällä suomenkielellä. Muutoinkin aivan erinomainen kirja servleteistä.
En viitsi kopioida kirjan esimerkkejä tänne.