- - PR -
サーブレットでエラー処理
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-08-20 21:42
サーブレットでエラーをcatchした場合catch文の中に入っているようなことがしたいのですが
catch文の中にエラー処理をしていないと怒られてしまいます。 どうしたらいいんでしょうか?? 教えてくださいお願いします ---ソース--- public class Servlet extends HttpServlet{ private HttpSession session = request.getSession(true); public void doGet(HttpServletRequest request, HttpServletResponse response){ Format Format_A = new Format(); Format Format_B = new Format(); try{ session.setAttribute("Format_A", MakeLineChart_E); getServletContext().getRequestDispatcher("/OK.jsp").forward(request, response); }catch (Exception e){ session.setAttribute("Format_B", MakeLineChart_E); getServletContext().getRequestDispatcher("/Error.jsp").forward(request, response); } } } | ||||||||
|
投稿日時: 2004-08-20 22:12
何がしたいのかわかりませんが
> catch文の中にエラー処理をしていないと怒られてしまいます。 catchの中に何も書かなくてもOKのはずですが? | ||||||||
|
投稿日時: 2004-08-20 23:38
catch内で
エラーをキャッチした場合には sessionにデータをいれて別ページに飛ばしたいのですが、、、。 | ||||||||
|
投稿日時: 2004-08-21 00:42
>catch文の中にエラー処理をしていないと怒られてしまいます。
これの詳細を書いて欲しいところですが、推測でこたえてみます。 catchの中にある
この文もServletException, IOExceptionをスローしますので、これに対してもtry〜catchが必要かと思います。 したがって、
とすればエラーが出なくなるのではないでしょうか。 # 検証していませんが・・・ | ||||||||
|
投稿日時: 2004-08-21 01:37
ありがとうございます。
しかしもし Format_A.open(); Format_A.close(); でエラーが発生したときにはError.jspには飛ばないって事ですか? もしFormatクラスのメソッドでもError.jspに飛ばすようにしたい場合は メソッドごとにError.jspへの記述を書く必要があるのでしょうか? public class Servlet extends HttpServlet{ // データ転送 private HttpSession session = request.getSession(true); public void doGet(HttpServletRequest request, HttpServletResponse response){ Format Format_A = new Format(); Format Format_B = new Format(); try{ Format_A.open(); Format_A.close(); session.setAttribute("Format_A", MakeLineChart_E); getServletContext().getRequestDispatcher("/OK.jsp").forward(request, response); }catch (Exception e){ session.setAttribute("Format_B", MakeLineChart_E); getServletContext().getRequestDispatcher("/Error.jsp").forward(request, response); } } } public class Format implements Serializable{ public void open() throws Exception{ Class.forName(str_drv); obj_cn = DriverManager.getConnection(str_dsn, str_user, str_pass); obj_cn.setAutoCommit(false); // obj_cn.commit(); } public void close() throws Exception{ obj_cn.close(); } } | ||||||||
|
投稿日時: 2004-08-21 08:44
質問の意味がやっとわかりました。
doGetメソッドは基本的にServletException,IOExceptionをスローするようになっていたと思います。それをオーバーライドして何もスローしないようにしているのでそのようなメッセージが出るのだと思います。 なので、doGetメソッドからServletExceptionとIOExceptionをスローするようにすれば解決すると思います。 [ メッセージ編集済み 編集者: ぼんじぃ 編集日時 2004-08-21 08:53 ] | ||||||||
|
投稿日時: 2004-08-21 10:00
お返事ありがとうございます。
doGetにexceptionエラーを付けるとエラーが発生した場合はtomcatのエラーが面がでる ってことですよね?(サーバはtomcatです) それは1ついいことを聞いたと思ったのですが、 その場合はcatch内には入ってこないってことですか?? またdoGet内で使用しているクラス(上のサンプルではformatクラス)内のメソッドでのexception はどうなるのでしょうか? 理想的にはformatクラスでもservletクラスでもエラーが発生した場合に、 sessionにオブジェクトを入れてerror.jspに飛ばしたいんです。 | ||||||||
|
投稿日時: 2004-08-21 10:39
まず落ち着いて紙と鉛筆でも用意してフローチャートでも書いてみましょう。
try/catchの入れ子をするだけです。if/elseの入れ子のフローなら書けますか?
・format/servletクラスでエラーが発生した場合に次の事をする。 ・sessionにオブジェクトを入れてerror.jspに飛ばす。 ・ではerror.jspが見つからなかったり、コンパイルエラーになったら? | ||||||||
1
