JSPのtry/catchブロックでエラーを処理する方法|同一ページ内での例外ハンドリング
JSPにおけるtry/catchブロックの利用
はい、JSPでもtry...catchブロックを使用できます。エラーページへ遷移させるのではなく、同じページ内でエラーを捕捉し、任意の処理を実行したい場合に非常に便利です。
通常、JSPでエラーが発生するとerrorPage属性などで指定したエラーページが呼び出されますが、try...catchブロックを使えば、例外をその場で受け止め、ユーザーにわかりやすいメッセージを表示するなどの対応が可能になります。
try...catchブロックの記述例
以下は、try...catchブロックの基本的な使い方を示すシンプルなサンプルです。main.jspに次のコードを記述してみましょう。
<html>
<head>
<title>Try...Catch Example</title>
</head>
<body>
<%
try {
int i = 1;
i = i / 0;
out.println("The answer is " + i);
}
catch (Exception e) {
out.println("An exception occurred: " + e.getMessage());
}
%>
</body>
</html>
実行結果
ブラウザからmain.jspにアクセスすると、次のような出力が表示されます。
An exception occurred: / by zero
コードのポイント
意図的な例外の発生: この例では
i = i / 0;によってゼロ除算(ArithmeticException)を意図的に発生させています。catchブロックによる捕捉: 発生した例外はcatchブロックで受け取られ、プログラムが異常終了することなく処理が継続されます。
getMessage()メソッド: 例外オブジェクトの
e.getMessage()を呼び出すことで、例外の詳細なメッセージ(ここでは「/ by zero」)を取得して画面に出力しています。
このように、JSPのスクリプトレット内でもJavaと同様にtry...catch構文が使えるため、ページ単位で柔軟なエラーハンドリングを実装できます。
-
【Python】tryブロック内のexcept節から例外を再送出し、外側のexceptブロックで捕捉する方法
はじめに:1つのtryブロックで実行されるexcept句は「1つだけ」Pythonでは、1つのtryブロックに対して実際に実行されるexcept句は常に1つだけです。最初のexcept句がマッチして処理を実行すると、そのtry文自体の処理は完了し、同じtryブロック内の他のexcept句が再度評価されることはありません。そのため、「except句の中でraiseした例外を、同じ階層の別のexcept句で捕捉する」ことはできません。例外をより上位の階層(外側)で捕捉したい場合は、ネストされた(入れ子構造の)tryブロックを使う必要があります。ネストしたtry...exceptブロックのサンプルコ
-
Pythonであらゆる例外をキャッチするtry/exceptブロックの正しい書き方
すべての例外をキャッチするのは避けるべき Pythonでは、以下のように引数なしのexceptを記述することで、発生したすべての例外をキャッチできます。しかし、これは一般的なコーディング規約として推奨されていません。 try: # do_something() except: print(Exception Caught!) その理由は、裸のexceptがKeyboardInterrupt(Ctrl+Cによる中断)やSystemExitといった、通常は捕捉したくない例外まで拾ってしまうためです。これらの例外を握りつぶすと、プログラムを正常に中断できなくなるなどの問題が発生します