- PR -

jspから呼び出したメソッド内での例外について(struts)

1
投稿者投稿内容
ちーぼう
会議室デビュー日: 2007/01/19
投稿数: 3
投稿日時: 2007-02-05 18:33
strutsを使用してwebアプリケーションを作成しています。

useBeanタグを使用して、指定したbean内のメソッドを
jsp内で呼び出しているのですが、この時に呼び出された
メソッド内でSQLExceptionが発生した場合のみ、
別jspにページを飛ばしたいのです。

strutsで指定する<global-exceptions>で指定できるのは、
Action内で発生した例外だけのようで、bean内で投げた
例外がどこに飛んでいくのかが分かりません。

初歩的な質問で申し訳ありませんが、よろしくお願いいたします。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-02-05 19:05
処理のタイミングの関係上無理かもしれませんね。

JSP内ということはHTMLを書き出している最中ということになると思いますが、
その時点まで来て出力結果を差し替えるってできるんだっけ?

通常はHttpResponseの出力ストリームに書き出しを開始してしまうと
別の書き出しで上書きすることはできません。実行時にエラーになったはず。
バッファリングされていて実際の書き出しは遅延して実行されるように
なっていれば差し替えができる可能性はあります。
JSP内でのランタイムエラーに対してTomcatなどがスタックトレースを
書き出す処理はそのような作りになっているんじゃなかったかなぁ。

いかんせん、そういうことはやらないべきじゃないでしょうか。
Action内で出力用データを事前に用意しておくようにするのが通常ですかね。
SQLExceptionってことはBean内部にResultSetをそのまま持つような
作りにでもしてるのかな。
ちーぼう
会議室デビュー日: 2007/01/19
投稿数: 3
投稿日時: 2007-02-05 19:22
早速お返事いただき、ありがとうございます。

nagiseさんの書いておられる通り、
HTMLを書き出している最中に出力結果を差し替えるなんて
できたっけ?などと思いつつ悩んでいました。
JSP内でのランタイムエラーに対してサーバ側が
スタックトレースを吐いているところまで確認できました。

とても分かりやすいご説明をいただいてすっきりしました。
お察しのとおり、Bean内部でSQL文を発行→ResultSetを
StringBufferに加工して出力、ということをやっています。
この作りでできたものを渡されて、前述のような例外
実装を後づけでして欲しい、と言われたのですが、
今更無理ですよね…(涙)

別処理を提案してみます。
どうもありがとうございました!

1

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