サーブレット(Tomcat 6でホストされている)にjava直列化オブジェクトを送信しようとするアプレットがあります。 URLは正しく、アプレットは正しいサーブレットに到達しますが、サーブレット側で何かを読むことになると、エラーが発生します。ここでサーブレットでシリアル化されたオブジェクトを読み取るときのEOFException
は、アプレットのコードです:ここで
String adresse = "/Applic_ClientsPartners/NewMemberServlet";
URL page = getDocumentBase();
String protocole = page.getProtocol();
String host = page.getHost();
int port = page.getPort();
System.out.println(protocole + "://" + host + ":" + port + adresse);
URL serv = new URL(protocole, host, port, adresse);
URLConnection conn = serv.openConnection();
conn.setUseCaches(false);
conn.setDefaultUseCaches(false);
//conn.setRequestProperty("Content-Type", "application/x-java-serialized-object");
conn.setRequestProperty("Content-Type", "application/octet-stream");
conn.setDoInput(true);
conn.setDoOutput(true);
System.out.println("Connection open");
ObjectOutputStream oos = new ObjectOutputStream(conn.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(conn.getInputStream());
System.out.println("Envoi de 'test'"); //sending a test String
String t = "test";
oos.writeObject(t);
System.out.println("test flush");
oos.flush();
System.out.println("test between flush & writeObject");
oos.writeObject(nouveau); //this is a serializable custom object
oos.flush();
//Boolean result = ois.readBoolean();
ois.close();
oos.close();
System.out.println("Streams fermés"); //streams closed successfully
サーブレットのコードです:
response.setContentType("application/octet-stream");
ObjectInputStream ois = new ObjectInputStream(request.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(response.getOutputStream());
System.out.println("AVAILABLE " + ois.available());
System.out.println("Pré read test");
String t = (String) ois.readObject();
System.out.println(t + " lu");
Cards.Member nouveau = (Cards.Member) ois.readObject();
System.out.println("Post read test");
oos.close();
ois.close();
System.out.println("Streams fermés"); //Streams closed successfully
return;
私は試してみる...コースの両方を囲むキャッチ(IOExceptionをする例)。エラーは以下の通りです:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at Servlets.NewMemberServlet.doPost(NewMemberServlet.java:96)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
私は本当にここに何が起こっているか理解していない:サーブレットのObjectInputStreamのは、何を取得するようだが、私はHTTPトンネルとはいえ、同じWebプロジェクト内の別のアプレット、サーブレットを持って、彼らは完璧に働いていますか?
任意の助けいただければ幸いです:)
例外を発生させるものです.readObjectには2つの呼び出しは()、がありますか? – vz0
標準出力に表示されるテスト出力は何ですか? – biziclop
readObject()を最初に呼び出すと、例外がスローされます。テスト出力はアプレットのすべてが表示されますが、サーブレットは "Préread test"で停止します(readObject()の最初の呼び出しの直前)。お役に立てれば。 – Lupuss