Newsgroup: it.comp.java
Titolo: Ancora su applet e servlet

Scusate se insisto sempre con lo stesso problema, ma forse nei post 
precedenti sono stato meno chiaro. E poi sono bloccato qui da venerdě 
scorso e non riesco proprio a capire cosa c'č che non va.
Sarň breve: ho visto che per la comunicazione tra applet e servlet molti 
consigliano di aprire dall'applet una connessione tramite un oggetto 
URLConnection verso il sevlet, e da questo oggetto ottenere gli stream 
opportuni. Riporto per chiarezza le operazione che compio nel metodo 
doPost(...) del servlet e sull'applet
/* Servlet
....*/
ObjectInputStream in = new ObjectInputStream(request.getInputStream());
RequestData data = (RequestData)in.readObject();
in.close();
String s = "OK";
OutputStream outstr = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outstr);
oos.writeObject(s);
oos.flush();
oos.close();
//....
/* Applet
....*/
URLConnection connection = getServletConnection();
ObjectOutputStream out = new ObjectOutputStream( new 
BufferedOutputStream(connection.getOutputStream()));
out.writeObject(data);
out.flush();
out.close();
BufferedInputStream instr = new 
BufferedInputStream(connection.getInputStream());
// System.out.println(instr.available());
ObjectInputStream inputFromServlet = new ObjectInputStream(instr); // 
<<-----------------------------------------
String result = (String) inputFromServlet.readObject();
inputFromServlet.close();
instr.close();
System.out.println(result);
//....
In questo modo riesco a spedire l'oggetto di tipo RequestData al 
servlet, e riesco a leggere sull'applet la stringa "OK" inviatami in 
risposta dal servlet.
L'oggetto di tipo RequestData perň contiene dei campi che dovranno 
essere inseriti in un database MySQL. Per fare questo ho scritto una 
classe DbHandler, che nelle mie intenzioni dovrebbe occuparsi di 
effettuare le query SQL necessarie ai controlli di consistenza dei dati, 
e all'inserimento di questi nelle tabelle del database.
Ho pensato quindi di condizionare l'invio della risposta del servlet 
all'applet ad un controllo preventivo dei dati, in questo modo:
//Servlet
ObjectInputStream in = new ObjectInputStream(request.getInputStream());
RequestData data = (RequestData)in.readObject();
in.close();
DbHandlar dbh = new DbHandler(); // nel costruttore effettuo la 
connessione JDBC
String s = dbh.check(data); // questo metodo restituisce un certa 
stringa se i dati rispettano certe condizioni, un'altra stringa (o al 
limite null) altrimenti
OutputStream outstr = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outstr);
oos.writeObject(s);
oos.flush();
oos.close();
Se faccio girare questo servlet, ottengo la seguente eccezione quando 
provo a leggere la risposta dall'applet, alla riga indicata con la 
freccia trateggiata nel codice riportato sopra:
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
MiaApplet.actionPerformed(DataHandler.java:67)
(continua...)
Lo ho provate veramente tutte, ma non sono riuscito a capire cosa 
succede. Se faccio stampare il risultato di instr.available() alla riga 
commentata prima di quella con la freccia, nel primo caso ottengo un 
valore superiore a 0, nel secondo caso, immediatamente prima del 
verificarsi dell'eccezione quindi, ottengo 0.
Inoltre non sono ancora riuscito a capire come debuggare un servlet con 
Eclips+Lomboz: faccio il deploy, lancio l'application server (Tomcat) e 
tutto, ma il debug di un servlet non sono proprio riuscito a farlo...
Sapreste darmi qualche suggerimento su come risolvere i miei problemi?
Vi ringrazio anticipatamente per l'attenzione.
Ciao, GePs

GePs wrote:
 > [CUT]
Penso di aver risolto.
Non vi dico dove stavo sbagliando, mi do solo un suggerimento per il 
futuro: controllare bene le query prima di dare fastidio a tutto il mondo!
Ciao!