- PR -

サーブレットでエラー処理

1
投稿者投稿内容
タマ
ベテラン
会議室デビュー日: 2004/08/08
投稿数: 56
投稿日時: 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/05/21
投稿数: 70
投稿日時: 2004-08-20 22:12
何がしたいのかわかりませんが

> catch文の中にエラー処理をしていないと怒られてしまいます。
catchの中に何も書かなくてもOKのはずですが?
タマ
ベテラン
会議室デビュー日: 2004/08/08
投稿数: 56
投稿日時: 2004-08-20 23:38
catch内で
エラーをキャッチした場合には
sessionにデータをいれて別ページに飛ばしたいのですが、、、。
will
会議室デビュー日: 2004/08/03
投稿数: 2
投稿日時: 2004-08-21 00:42
>catch文の中にエラー処理をしていないと怒られてしまいます。
これの詳細を書いて欲しいところですが、推測でこたえてみます。

catchの中にある
コード:
getServletContext().getRequestDispatcher("/Error.jsp").forward(request, response); 


この文もServletException, IOExceptionをスローしますので、これに対してもtry〜catchが必要かと思います。

したがって、
コード:
try{
  session.setAttribute("Format_A", MakeLineChart_E);
  getServletContext().getRequestDispatcher("/OK.jsp").forward(request, response);
} catch (Exception e) {
  session.setAttribute("Format_B", MakeLineChart_E);
  try {
    getServletContext().getRequestDispatcher("/Error.jsp").forward(request, response);
  } catch (Exception e) {
  }
}


とすればエラーが出なくなるのではないでしょうか。

# 検証していませんが・・・
タマ
ベテラン
会議室デビュー日: 2004/08/08
投稿数: 56
投稿日時: 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/05/21
投稿数: 70
投稿日時: 2004-08-21 08:44
質問の意味がやっとわかりました。
doGetメソッドは基本的にServletException,IOExceptionをスローするようになっていたと思います。それをオーバーライドして何もスローしないようにしているのでそのようなメッセージが出るのだと思います。
なので、doGetメソッドからServletExceptionとIOExceptionをスローするようにすれば解決すると思います。

[ メッセージ編集済み 編集者: ぼんじぃ 編集日時 2004-08-21 08:53 ]
タマ
ベテラン
会議室デビュー日: 2004/08/08
投稿数: 56
投稿日時: 2004-08-21 10:00
お返事ありがとうございます。

doGetにexceptionエラーを付けるとエラーが発生した場合はtomcatのエラーが面がでる
ってことですよね?(サーバはtomcatです)
それは1ついいことを聞いたと思ったのですが、
その場合はcatch内には入ってこないってことですか??

またdoGet内で使用しているクラス(上のサンプルではformatクラス)内のメソッドでのexception
はどうなるのでしょうか?


理想的にはformatクラスでもservletクラスでもエラーが発生した場合に、
sessionにオブジェクトを入れてerror.jspに飛ばしたいんです。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-08-21 10:39
まず落ち着いて紙と鉛筆でも用意してフローチャートでも書いてみましょう。
try/catchの入れ子をするだけです。if/elseの入れ子のフローなら書けますか?
引用:

理想的にはformatクラスでもservletクラスでもエラーが発生した場合に、
sessionにオブジェクトを入れてerror.jspに飛ばしたいんです。


・format/servletクラスでエラーが発生した場合に次の事をする。
・sessionにオブジェクトを入れてerror.jspに飛ばす。
・ではerror.jspが見つからなかったり、コンパイルエラーになったら?
1

スキルアップ/キャリアアップ(JOB@IT)