servlet通信断時のエラー処理について

このQ&Aのポイント
  • Servletの処理中にクライアントとの通信が切断された場合のエラー処理方法について教えてください。
  • 通信断時にエラーが発生しないため困っています。エラーの発生方法を教えてください。
  • 通信断はレスポンスデータをクライアントへ送信中に発生しています。どなたか知恵をお借りできる方はいらっしゃいますか?
回答を見る
  • ベストアンサー

servlet通信断時の処理について

お世話になります。 Servletの処理中にクライアントとの通信がケーブル不良等が原因で切断された場合、エラー処理をしたいのですが、 エクセプションが発生しません。 発生させる方法は無いでしょうか。 本当に困っております。 通信断になるタイミングは 以下のコードでレスポンスデータをクライアントへ送信中に通信断になる場合です。 public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException,IOException { try { PrintWriter pw = new PrintWriter( new OutputStreamWriter(response.getOutputStream(), "UTF-8")); pw.write("OK"); pw.flush(); pw.close(); }catch(IOException e){ // エラー処理 }catch(Exception e){ // エラー処理 }finally{ // 後処理 } } どなたかご存知の方がいらっしゃいましたらお教え下さい。

  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

HTTP(そのベースとなるTCP/IPのTCP)の仕様上、レスポンスの送信先が受信不能でもそれは検知できないと思うのですが

関連するQ&A

  • doPost+doGet

    public class Class{ public void doPost (HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException try{ //処理 }catch(Exception e){ e.printStackTrace(); } } public void doGet (HttpServletRequest request,HttpServletResponse response){ try{ doPost(request, response); }catch(Exception e){ e.printStackTrace(); } } } この処理は、doGetで送信されたものをdoPostに送って処理するということでよろしいのでしょうか? 分かる方がいましたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • JAVAとGnuplot

    javaからGnuplotを起動させ、グラフのプロットを行いたいのですがうまくいきません。 ソースは String gnuplot_cmd = "plot sin(x)" ; try { p = Runtime.getRuntime().exec("C:~省略~\\wgnuplot.exe"); } catch (IOException e) { e.printStackTrace(); } pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(p.getOutputStream()))); pw.print(gnuplot_cmd); pw.close(); です。 起動はするのですが、プロットの命令がうまく伝わりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 初歩的なソケット通信(java)

    初歩的なソケット通信(java) javaのソケット通信プログラムについて質問させて頂きます。まだまだ基礎の段階なのですが、詰まってしまたので、良かったら教えてください。 以下プログラムコード ------------------------------------- //サーバー側 import java.net.*; import java.io.*; public class Server { static int port = 12345; public static void main(String[] args) { try{ //サーバソケットの作成 ServerSocket ssoc = new ServerSocket(port); //メインループ while(true){ try{ System.out.println("クライアントからの接続を"+ port +"で待ちます"); Socket soc = ssoc.accept(); System.out.println(soc.getInetAddress().getHostName()+"から接続を受けました"); //処理をスレッドに任せます new Connect(soc); }catch(IOException e1){ e1.printStackTrace(); } } }catch(IOException e2){ e2.printStackTrace(); } } } class Connect extends Thread{ private Socket socket = null; public Connect(Socket socket){ this.socket = socket; //スレッド開始 this.start(); } public void run(){ try{ //出力ストリームを取得 OutputStream os = socket.getOutputStream(); PrintWriter out = new PrintWriter(os,true); //入力ストリームを取得 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader in = new BufferedReader(isr); String inputLine; while((inputLine = in.readLine()) != null){ //System.out.println(inputLine); out.println(inputLine); } System.out.println("処理が終わったので接続を切ります"); in.close(); out.close(); socket.close(); }catch(Exception e1){ try{ socket.close(); }catch(Exception e2){ e2.printStackTrace(); } } } }

  • Java・ファイルへの書き込み

    はじめまして。 下記のプログラムで、以下の3つがどのような関係なのかがわかりません。 ("test1.txt")とnew FileWriterの関係 (new FileWriter("test1.txt")とnew BufferedWriterの関係 (new BufferedWriter(new FileWriter("test1.txt")と new PrintWriterの関係 どうかご教示いただきたく、よろしくお願い致します。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Sample7 { public static void main(String[] args){ PrintWriter pw = null; try{ pw = new PrintWriter (new BufferedWriter(new FileWriter("test1.txt"))); pw.println("Hello!"); pw.println("GoodBye"); System.out.println("ファイルに書き込みました。"); }catch(IOException e){ System.out.println("入出力エラーです。"); }finally{ if(pw != null){ pw.close(); } } } }

    • ベストアンサー
    • Java
  • 例外が発生した時にブラウザにメッセージを表示

    Servletで、db検索しその結果をブラウザに表示しています。 SQLExceptionや、NULLPointerExceptionが発生した時に、 今は、 catch(Exception e){ e.printStackTrace(); } としているのでログにエラーを書き出しているだけで、画面にはなにも表示されません。 エラーの時も、PrintWriter pw = response.getWriter();で pw.println("<HTML><HEAD></HEAD>"); pw.println("<body><h1>"); pw.println("エラー発生!"); pw.println("</h1></body></html>"); というふうにブラウザに出力したいのです。 catchブロックの中にはどのように、記述したらいいのでしょうか? ひとつのクラス内で以上の事がしたいのですが、そもそもそれも 無理なのでしょうか?

  • javaにおけるCSV出力時の文字コード改行コード

    JavaでCSVを出力する処理を作りました。 下記コードだとUnix環境で文字コードSJISで改行コードLFで出力されますが、 Windows環境でもUnix環境でも一律、文字コードSJISで改行コードCRLFで出力されるようにしたいです。 何かいい方法はありませんでしょうか。 なお、printlnで出力している行が多い為、 bw,Print("日付" + 変数A + \r\n); というふうに一行づつ変更するのは避けたいと思っております。 try{ PrintWriter bw = new PrintWriter(new BufferdWriter(new OutputStreamWriter(new FileOutputStream(/tmp/test.csv),"SJIS"))); bw.println("日付" + 変数A); bw.println("氏名" + 変数B); ・ ・ ・ }catch(Exception e){ // ログに出力 }

    • ベストアンサー
    • Java
  • JavaのFileWriterについて

    はじめまして。 以下のようなプログラムで、new FileWriter("test1.txt")の【test1.txt】が最終的にどの親クラスのコンストラクタ(メソッド?)に渡されて処理されるのかがわかりません。 new演算子で FileWriterオブジェクトを作成した際に、importした親クラスのFileWriterクラスにあるコンストラクタが呼び出されるのだろうとは思っています。 そこで、JavaのAPIのサイトにて、クラス FileWriterの説明(http://docs.oracle.com/javase/jp/6/api/)を読みましたが、コンストラクタが複数紹介されており、下記のプログラムに当てはまるものがどれか分かりませんでした。 また、クラス FileWriterの説明ページのコンストラクタの概要にあるpublic FileWriter(File file)というコンストラクタの場合、引数リストのFileにもリンクがあり、Fileのリンク先のページであるクラス Fileの説明(http://docs.oracle.com/javase/jp/6/api/)を読みましたが、結局test1.txtがどのクラスのコンストラクタ(メソッド?)でどのように処理されているのかが分かりません。 どうかご教示いただきたく、よろしくお願い致します。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Sample7 { public static void main(String[] args){ PrintWriter pw = null; try{ pw = new PrintWriter (new BufferedWriter(new FileWriter("test1.txt"))); pw.println("Hello!"); pw.println("GoodBye"); System.out.println("ファイルに書き込みました。"); }catch(IOException e){ System.out.println("入出力エラーです。"); }finally{ if(pw != null){ pw.close(); } } } }

    • ベストアンサー
    • Java
  • Socket通信でのデータの受け渡し

    サーバーが受けたデータを、クライアントに返す プログラムですが、 サーバーは、クライアントからのデータを、 while(true){ BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); str=br.readLine(); if(str!=null){ PrintWriter pr=new PrintWriter(s.getOutputStream()); pr.println(str); pr.flush(); }}で、返すようにしています。 クライアントも大体同じです(PrintWriterは、 Buttonを押した時に、取得しています)。 考え方としては、inputstreamは、無限ループで、 取得し、outputstreamは、必要におうじて、取得し データを送っています。 しかし、これだと、一度データを送ると、次から データの受け渡しが出来なくなります。 socketか、inputstreamかoutputstreamのどれかが、 閉じるか、使えなくなるのだと思いますが、 いつもここで、悩んでいます。 (また、無限ループで、BufferedReaderオブジェクト をつくり続けるというのも、ちょっと不安)。 どこに問題があるのか、分かる人教えてください。 お願いします。

    • ベストアンサー
    • Java
  • サーブレットPrintWriterについて

    Javaの初心者でこまってまして・・・ public void doPost(HttpServletRequest request, HttpServletResponse response){ try{ // コンテンツタイプの設定 response.setContentType("text/html; charset=Shift_JIS"); // 外部出力 PrintWriter out = response.getWriter(); out.println("<html>");・・・(1) out.println("<head><title>goo!</title></head>");・・・(2) エラーがおこるような処理・・・(3) out.println("</html>")・・・(4) }catch(エラー ex){ out.println("エラーが発生しました。")・・・(5) } } このようなプログラムがあり、(3)でエラーが出たときに catchした場合(5)のメッセージだけを出力したいのです。 いまは(1)(2)(5)という感じで出力されてしまいます。 flushしてみたりしたのですが うまくいきませんでした。 わかる方おしえていただけますでしょうか

    • ベストアンサー
    • Java
  • Writer & PrintWriter

    import java.io.*; public class JavaIO4 { public static void main(String args[]) throws Exception { Writer w=new FileWriter(args[0]); PrintWriter pw=new PrintWriter(w); for (int i=0; i<=330; i+=30) { double atai=Math.sin(Math.PI*i/180.0); String str="sin("+i+")="+atai+"\n"; pw.write(str); } pw.close(); } } と import java.io.*; public class JavaIO4 { public static void main(String args[]) throws Exception { //Writer w=new FileWriter(args[0]); PrintWriter pw=new PrintWriter(args[0]); for (int i=0; i<=330; i+=30) { double atai=Math.sin(Math.PI*i/180.0); String str="sin("+i+")="+atai+"\n"; pw.write(str); } pw.close(); } } の結果が同じになるんですけど、 Writer w = new FileWriter(args[0]); PrintWriter pw = new PrintWriter(w); とするのはなぜなんですか? 何か意味はあるんですか?

専門家に質問してみよう