アプリ版:「スタンプのみでお礼する」機能のリリースについて

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してみたりしたのですが うまくいきませんでした。
わかる方おしえていただけますでしょうか

A 回答 (4件)

(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)
}
    • good
    • 0

これは、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)の順番で出力されるはずです。
    • good
    • 0

servletをエラーHTMLにフォワードしてしまえば大丈夫ですよ。


response.sendRedirect("/html/next.html");
とか・・・
    • good
    • 0

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!