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ブロックの中にはどのように、記述したらいいのでしょうか?

ひとつのクラス内で以上の事がしたいのですが、そもそもそれも
無理なのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

 表示したいエラーページのHTMLを出力する文をcatch節に設定すればそれが出力されます。


すでに出力してしまっている内容がある場合は、HTTPServletResponse#reset()でそれをクリアできます。
以下の例では、パラメータにresetを付ければエラーページのみが出力され、
resetを付けなければ途中まで書き出された正常なページの下にエラーページがつながって出力されます。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class exceptionpage extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) {

boolean ResetFlag = false;
PrintWriter PW;
int i[] = new int[10];

try {

if (req.getParameter("reset") != null) ResetFlag = true;

res.setContentType("text/html");
try { PW = res.getWriter(); } catch (Exception ex) { return; };

PW.println("<html><head><title>Valid Page</title></head>");
PW.println("<body>");
PW.println("<h1>ValidData</h1>");

i[10] = 10;

PW.println("</body></html>");

} catch (Exception ex) {

if (ResetFlag) res.reset();

try { PW = res.getWriter(); } catch (Exception exx) { return; };
PW.println("<html><head><title>Error Page</title></head>");
PW.println("<body>");
PW.println("<h1>Error Occurred</h1><br>");
PW.println(ex.toString() + "<br>");
PW.println("</body></html>");

};

};

}
    • good
    • 0

> catchブロック内で、いままでのPrintWriterを無効にする事は


> 不可能なんでしょうか?

既に出力されちゃった内容ですからね。

そこまできれいにやりたければ、出力内容は文字列に貯め(StringWriterを使っても良い)て、
最後(例えば、finallyブロック)にまとめて出力する、なんて方法もあります。
    • good
    • 0

スタックトレースをブラウザに表示したいということでしょうか?



Exception クラスがもつ printStackTrace() は三種類の引数指定ができます。
そのうちのひとつは PrintWriter クラスを受け付けるので、

  catch(Exception e){
    PrintWriter pw = response.getWriter();
     ...
    e.printStackTrace(pw);
     ...
  }

というような使い方が可能です。タグを省略してますが、必要なものは前後で出力してください。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
うまくいきました。
だた、tryブロック内でpw.printlnでHTMLを編集中に
エラーが発生した場合、その途中までのHTMLと
catchブロック内で作成したHTMLが繋がってしまうので、
ブラウザには、正しい画面もエラー画面も表示されませんでした。
PrintWriterをflushしても、効果がありません。
catchブロック内で、いままでのPrintWriterを無効にする事は
不可能なんでしょうか?

お礼日時:2002/02/28 17:38

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

このQ&Aと関連する良く見られている質問

Qとどっちに入れる?どっちも入れる??

よくJavaScriptで、<head></head>の間に書きこむのと、<body></body>の間に書くのがありますが、どう違うのでしょうか。<head></head>に書くだけのが大半で、たまに両方書くのがあるのですが、毎回疑問に思ってました。お願いです。教えてくださいまし。

Aベストアンサー

どのような場合に…というのがはっきりしないのであいまいな回答になっちゃいますが、どっちの場合もあります。

functionだとheadの中に書いてますが、動的に文書の内容を書き出したりするような、最終的な命令部分はbodyの中に書いてますね。headの中で定義した関数をbodyの中で呼び出したりしますから。

Qの違い

現在jQueryを使ったプログラムをしていて、気になった点があったので質問させていただきました。

具体的には
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" charset="utf-8"/>
<script type="text/javascript">
function show() {
}
</script>

こんなソースを書いていましたが、showメソッドが認識されていませんでした。

そこで
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" charset="utf-8"></script>
とかくと、後ろのメソッドも認識されました。

ここで疑問なのは</>と</script>の違いです。
この2つは何がちがうのでしょうか?

現在jQueryを使ったプログラムをしていて、気になった点があったので質問させていただきました。

具体的には
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" charset="utf-8"/>
<script type="text/javascript">
function show() {
}
</script>

こんなソースを書いていましたが、showメソッドが認識されていませんでした。

そこで
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1...続きを読む

Aベストアンサー

https://www.google.com/search?q=HTML+%E7%A9%BA%E8%A6%81%E7%B4%A0
違いっていうか。
<hoge />って書いていいのは「何もはさまないタグ」だけ。<img><link><br>…
<script>は、確かにsrc属性を設定すれば何もはさまなくはなりますが、「はさまないタグ」ではないから「/>」で終わることはできない。<img /> を<img></img>にすることはできるが逆はできません。

試してないから分からないが、質問文の記述では最初の間違ったタグが開始タグとして認識され以降3行がスクリプトとして認識され、結果文法エラーとなっているのでは。というか、その書き方でほかの部分のソースの解釈に影響出てないんですか?

Q内と後のfunctionの違いは?

初歩的な質問かもしれませんが、

<HEAD><SCRIPT>
function・・・・・・・
</SCRIPT></HEAD>
の中に、記述するfunctionと、

</HEAD>
<SCRIPT>
function・・・・・・・
</SCRIPT>
のように</HEAD>後に、記述するfunctonの
違いはなんでしょうか?
働きとは役目とか、動きが違うのでしょうか?
よろしくお願い致します。

Aベストアンサー

<HEAD>パートと<BODY>パートに書いたちがいによって動き
がちがうということはないでしょう。
しかし、<HEAD>パートに置いても<BODY>パートに置いても
どちらでもよいというわけではありません。
説明がながくなりますので、こちらにUPしておきました。
http://www.geocities.jp/b1aise1623/prog/js/tips/701346/func.htm

Qheadからbodyへ

の挿入

毎回文字列に処理を加えてたものを動かしたいので、htmlファイルを読み込んだ時にbodyに<p>を挿入したいのですが、効率のいい方法が分かりません。document.writeで書き込めばできそうですが、全部をdocument.writeで書くのは死にますので、何かいい方法があれば教えて下さい。
お願いします。m(__)m

Aベストアンサー

DOMを使って、適当な<div id="insert"></div>とかに<p>~</p>を挿入できますが、
そうとう面倒くさいので、
IEのみになりますが、innerHTMLを使うといいと思います。
document.getElementById("insert").innerHTML="<p>~</p>";


このカテゴリの人気Q&Aランキング

おすすめ情報