编写和读取servlet时的java.io.EOFException
我在applet端有以下代码:
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"); }
在servlet方面,我收到如下代码:
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(); } }
当我单击调用applet端代码的按钮时,出现以下错误:
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.(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)
为什么我收到此错误? 我输出时刷新了,我也关闭了连接,但是我得到了错误。 有什么理由吗?
最后关闭ObjectOutputStream。
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
第一个request.getParameter()
然后request.getInputStream()
这个案例必须是tomcat上的课程例外,但不是weblogic上的课程例外
- Spring JPA / Hibernate EmptyInterceptor没有注入Entitymanager / Spring bean
- Spring Data JPA JpaRepository.save(实体)不返回数据库默认值
- 比较器不适用于Arrays.sort
- 生成安全cookie令牌以持久存储
- 在Eclipse中调试期间,是否可以跳转到一行并在调试期间执行它?
- 在macOS Sierra 10.12.1上安装rJava:链接器错误licuuc
- Text Search无法使用Spring Boot MongoDB
- Oracle JDBC UCP和Java
- 如何为SQL查询转义字符串(没有预处理语句)