2010-04-19 26 views
3

J'ai le code suivant sur le côté applet:java.io.EOFException lors de l'écriture et la lecture servlet froma

URL servlet = new URL(appletCodeBase, "FormsServlet?form=requestRoom"); 
URLConnection con = servlet.openConnection(); 

con.setDoOutput(true); 
con.setDoInput(true); 
con.setUseCaches(false); 
con.setRequestProperty("Content-Type", "application/octet-stream"); 

ObjectOutputStream out = new ObjectOutputStream(con.getOutputStream()); 
out.writeObject(user);//user is an object of a serializable class 
out.flush(); 
out.close(); 

ObjectInputStream in = new ObjectInputStream(con.getInputStream()); 
status = (String)in.readObject(); 
in.close(); 
if("success".equals("status")) { 
    JOptionPane.showMessageDialog(rootPane, "Request submitted successfully."); 
} else { 
    JOptionPane.showMessageDialog(rootPane, "ERROR! Request cannot be made at this 
    time"); 
} 

Dans le côté servlet je reçois le code comme suit:

form = request.getParameter("form"); 
    if("requestRoom".equals(form)) { 
     String fullName, eID, reason; 
     UserRequestingRoom user; 

     try { 
      in = new ObjectInputStream(request.getInputStream()); 
      user = (UserRequestingRoom)in.readObject(); 
      fullName = user.getFullName(); 
      eID = user.getEID(); 
      reason = user.getReason(); 

      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/chat_applet","root",""); 
      PreparedStatement statement = con.prepareStatement("INSERT INTO REQCONFROOM VALUES(\"" + fullName + "\",\"" + eID + "\",\"" + reason + "\")"); 
      statement.execute(); 

      out = new ObjectOutputStream(response.getOutputStream()); 
      out.writeObject("success"); 
      out.flush(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      out = new ObjectOutputStream(response.getOutputStream()); 
      out.writeObject("fail"); 
      out.flush(); 
     } 
    } 

Lorsque Je clique sur le bouton qui appelle le code du côté de l'applet, je reçois l'erreur suivante:

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) 
    at com.org.RequestRoomForm.requestActionPerformed(RequestRoomForm.java:151) 

    **//Line 151 is "ObjectInputStream in..." line in the applet code** 

    at com.org.RequestRoomForm.access$000(RequestRoomForm.java:7) 
    at com.org.RequestRoomForm$1.actionPerformed(RequestRoomForm.java:62) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

Pourquoi suis-je recevoir cette erreur? J'ai rincé quand j'ai sorti, j'ai fermé les connexions aussi, mais j'ai l'erreur. Une raison pour cela?

+0

Avez-vous débogués votre servlet (ou au moins fait quelques sorties de journaux) à assurez-vous que vous atteignez effectivement le servlet et entrez le bloc if? De l'exception côté client, il semble que le servlet (ou un autre composant serveur) n'écrit rien dans le flux de réponse, de sorte que le client échoue immédiatement en raison de la réponse vide. – jarnbjo

+0

oui. Il ne montre aucune indication que l'exécution atteint servlet. Quoi qu'il en soit, j'ai dû diviser mon obéissance sérialisable et l'envoyer via l'URl elle-même (via &). Le résultat est trop brut - une URL très longue. Mais il fait le travail à la fin. – mithun1538

Répondre

10

Fermez ObjectOutputStream à la fin.

ObjectOutputStream out = new ObjectOutputStream(con.getOutputStream()); 
out.writeObject(user);//user is an object of a serializable class 
out.flush(); 
out.close(); //Don,t close your out here 

ObjectInputStream in = new ObjectInputStream(con.getInputStream()); 
status = (String)in.readObject(); 
in.close(); 

out.close(); //Close your out after reading the input 
-2

premier request.getParameter()
puis request.getInputStream()

ce cas doit bien sûr exception sur tomcat, mais pas sûr exception sur weblogic