- - PR -
Servlet Application間プログラム(EOFException)
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-04-22 18:55
ゆ〜いちです。 次のようなソースを書いているのですが、Servlet側の☆部分ででEOF Exception が発生してしまいます。ネット上で検索など行って対処を行ったつもりなのですが、 方法がわかりません。ご教授いただけませんでしょうか? #BufferdInputStreamなど試したのですが、同様にEOFExceptionを発生します... 環境としてはWindows 2000上でTomcat(4.1.30)を単独で動かしている状態です。 -- Servlet側 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{ System.out.println("Starting request!!!"); ObjectInputStream ois = new ObjectInputStream(request.getInputStream()); ----- ☆ //CLASSPATHにオブジェクトが含まれていない場合CLASSNOTFOUNDが発生するはず… Object capsule = ois.readObject(); // Objectに処理を実行。加工する。そのデータを返す。 // ここから応答を作成する。 response.setContentType("application/octet-stream"); ObjectOutputStream oos = new ObjectOutputStream(response.getOutputStream()); oos.writeObject(capsule); oos.flush(); oos.close(); }catch(ClassNotFoundException cnfEx){ ServletException sEx = new ServletException("TransactionController:service:CLASS NOT FOUND EXCEPTION occured... "); throw sEx; }catch(Exception ex){ ServletException sEx = new ServletException("TransactionController:service:EXCEPTION occured... " + ex.toString()); throw sEx; } } -- Application側 public static void main(String[] args) { try{ URL url = new URL("http://localhost:8080/control"); System.err.println("接続開始"); URLConnection conn = url.openConnection(); Object obj = new Object(); writeObject(conn,obj); Object recObj = readObject(conn); }catch(IOException ioex){ System.err.println(ioex.toSring()); }catch(Exception ex){ System.err.println(ex.toSring()); } } private void writeObject(URLConnection conn, Object capsule) throws IOException, Exception{ try{ conn.setUseCaches(false); conn.setRequestProperty("CONTETN_TYPE", "application/octet-stream"); conn.setDoInput(true); conn.setDoOutput(true); ObjectOutputStream oos = new ObjectOutputStream(conn.getOutputStream()); System.out.println("Writing Object..."); oos.writeObject(capsule); oos.flush(); oos.close(); }catch(IOException ioex){ throw ioex; }catch(Exception ex){ throw ex; } } private Object readObject(URLConnection conn) throws ClassNotFoundException, IOException, Exception{ Object capsule = null; try{ ObjectInputStream ois = new ObjectInputStream(conn.getInputStream()); System.out.println("waiting response"); capsule = ois.readObject(); ois.close(); }catch(ClassNotFoundException cnfEx){ throw cnfEx; }catch(IOException ioex){ throw ioex; }catch(Exception ex){ throw ex; } return capsule; } | ||||
|
投稿日時: 2004-04-22 20:40
詳しいことはわからないので参考までに。
クライアント側に問題があると思います。 Servletが受け付けるリクエストはHTTP(POSTまたはGET)ですから、ぜんぜん関係ない データを送りつけられてもちゃんと受け取ることができないのではないでしょうか? | ||||
|
投稿日時: 2004-04-23 00:29
ゆ〜いちさん、こんにちは。
なんとか助けてあげたいのですが、
これの意味が理解できません。 『ネット上で検索など行ったが、方法がわからず、対処できません。』 とか、 『ネット上での検索の方法がわからず、対処できません。』 ならわかるのですが。 まず、その辺がきちんとできないと、問題を解決することは難しいでしょう。 ※ HttpServletが受け付けるリクエストは POST, GETだけではありません。 | ||||
|
投稿日時: 2004-04-23 00:52
たしかにHTTPの他のリクエスト(PUT,HEAD,DELETE)も実装クラスでメソッドが正しくオーバーライドされていれば正しく処理されるでしょうね。 ゆ〜いちさんのクライアントが送信しているのはそもそもHTTPではないので無理だと思うのですが。 サーブレットではなく普通にServerSocketで実装すれば問題なく動くでしょうね。 サーブレットでなければ駄目なのですか? | ||||
|
投稿日時: 2004-04-23 05:59
unibon です。こんにちわ。
動いてもよさそうな気がするのですが、なにか足りないか変なのでしょうね。 いきなり ObjectInputStream/ObjectOutputStream を使うよりも、まずは InputStream/OutputStream に対してバイト単位のバイナリーを書き・読み、をしてみてうまくいくか試されてはどうでしょうか。ストリームを介してバイナリーの書き・読みができれば、あとは ObjectInputStream/ObjectOutputStream でラップするだけです。
とりあえず、ここ、綴りが違っています("CONTETN_TYPE" ではなく "CONTENT_TYPE" ?)。あまり関係はなさそうですが。 | ||||
|
投稿日時: 2004-04-23 08:00
Httpでクライアント→サーバに任意のストリーム送りたいなら、PUTメソッド
を使用します。 あと、リクエストヘッダとコンテンツを意識して使用することが必要です。 どうしても、俺仕様のクライアント・サーバにしたければ、 HttpServletではなく、Servletをサブクラス化するべきです。 リクエストヘッダの形式すら HTTPと全く違うものを使用することも できますが、その場合は Tomcatでなく ServletContainerも 作り直す必要があります。 | ||||
|
投稿日時: 2004-05-09 12:13
ゆ〜いちです。
返事が遅くなりまことに申し訳ありませんでした。Lotus Notes R5と連携させる 必要があり(JDK 1.1.x環境)、任意のストリームメソッドを送って処理を実現させ る必要があり、四苦八苦していました。 皆様の意見から、少し設計コードを見直し、処理の変更を実装させていただきまし た。いろいろとご迷惑をおかけしまことに申し訳ありませんでした。今後ともご指 導いただけましたら幸いです。 | ||||
|
投稿日時: 2005-06-13 00:54
はじめまして、RanRanです
私も同じ様なエラーを遭遇してしまいまして、全然解決できないです。 ぜひ教えてください。 環境は Apache1.3.33+TOMCAT5.5.9+Java JDK1.5.0_03 Linux RedHat9 (Server) WindowsXP (Client) です。 一般的なServletは動くことが確認されています。 以下のようにAppletの中に getInputStream()がEOFExceptionが発生しています。 よろしく、ご指導をお願いします。 --------------- Applet URL codeBase=getCodeBase(); url=new URL(codeBase.getProtocol(),codeBase.getHost(),8080,servlet); con=url.openConnection(); con.setRequestProperty("CONTENT-TYPE","application/octet-stream"); con.setUseCaches(false); con.setDoInput(true); con.setDoOutput(true); oos=new ObjectOutputStream(con.getOutputStream()); outputProc(oos,command);//objEventSource); oos.flush(); InputStream is=null; try{ is=con.getInputStream(); } catch(EOFException e){ // <<<<<<<<<<<<<<<<<<<<<<< ここでエラー } ois=new ObjectInputStream(is); inputProc(ois); oos.close(); ois.close(); ------------ Servlet public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ ObjectInputStream objIn=new ObjectInputStream(request.getInputStream()); response.setContentType("application/octet-stream"); ObjectOutputStream objOut=new ObjectOutputStream(response.getOutputStream()); invokeInput(objIn); // input process synchronized(this){ invokeOutput(objOut); // output process } objOut.flush(); objIn.close(); objOut.close(); } |
1|2|3
次のページへ»