OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

サーブレットPrintWriterについて

  • 困ってます
  • 質問No.119074
  • 閲覧数336
  • ありがとう数2
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 25% (16/64)

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してみたりしたのですが うまくいきませんでした。
わかる方おしえていただけますでしょうか
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル6

ベストアンサー率 66% (6/9)

(1)や(2)にある<html>タグ自体を全く出力したくない、
というふうに私はこの質問を解釈しました。
だとすれば、プログラムの順序がまずいのではないでしょうか。

次のようにしてみてください。
# ただしエラーチェックはこちらでやっていないので、
# スペルミス等はご容赦

public void doPost(HttpServletRequest request, HttpServletResponse response){

response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = response.getWriter();
StringBuffer buffer = new StringBuffer();

try {
// 例外が発生し得る処理 - (3)
// 出力は out.printlnではなく、
// buffer.append(文字列);
// とすること。
// 改行を挿入するには("\n")を文字列中に紛れ込ませる

out.println("<html>"); // (1)
out.println("なんたらかんたら"); // (2)
out.println(buffer.toString()); // バッファに溜め込んだものを掃き出す
out.println("</html>"); // (4)

} catch(例外 ex) {
out.println("エラーが発生しました。") // (5)
}
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1

一度String型変数などのバッファに溜めて、エラーの起こる処理の後一気にprintln()する、というのでは駄目でしょうか?
一度String型変数などのバッファに溜めて、エラーの起こる処理の後一気にprintln()する、というのでは駄目でしょうか?
  • 回答No.2
レベル10

ベストアンサー率 28% (33/117)

servletをエラーHTMLにフォワードしてしまえば大丈夫ですよ。 response.sendRedirect("/html/next.html"); とか・・・
servletをエラーHTMLにフォワードしてしまえば大丈夫ですよ。
response.sendRedirect("/html/next.html");
とか・・・
  • 回答No.3

これは、PrintWriterがどうこう言うより、Javaの例外のキャッチに関する問題だと思うのですが。。。 kuro_73さんが示されているように、上のコードでcatch節内に response.sendRedirect()やgetRequestDispatcher()を使って 既存のページに飛ばすのも1つの方法だと思いますが、 > out.println("< ...続きを読む
これは、PrintWriterがどうこう言うより、Javaの例外のキャッチに関する問題だと思うのですが。。。

kuro_73さんが示されているように、上のコードでcatch節内に
response.sendRedirect()やgetRequestDispatcher()を使って
既存のページに飛ばすのも1つの方法だと思いますが、


> out.println("<html>");・・・(1)
> out.println("<head><title>goo!</title></head>");・・・(2)

 try{
  エラーがおこるような処理・・・(3)
 } catch (エラー ex) {
  out.println("エラーが発生しました。"); ・・・(5)
 }

> out.println("</html>")・・・(4)
> }catch(エラー ex){
  // I/Oエラー時の処理
> }

といういうふうに、特定の範囲内でエラーが発生し、それに合わせて処理を
行う場合には、その特定の範囲内をtry節で括るのが正しい処理だと思いますが
どうでしょうか?

上記の方法だと、出力されるのは(1)(2)(5)(4)の順番で出力されるはずです。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ