ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Strutsとフィルターのエラー遷移

2009-10-12 22:53:39 | PG(Java)

Strutsのエラーメッセージ処理(つまりはActionErrorsとhtml:errorsタグ)についてあやふやだったので、改めて実験。
あとaction要素内に書くexception要素と、global-exceptionsについても実験。

exception要素にメッセージキーを指定することは出来るけど、これを使うとどんな例外に対しても固定文言になってしまう。発生箇所ごとにメッセージを変えようと思ったら、例外生成時にメッセージキーを入れるのが、誰が考えても無難。
エラーメッセージ(キーと引数)を指定する例外って聞き覚えが無かったけど、ずばりModuleExceptionというのがあった。


それと、サーブレットフィルターについても実験。
フィルターはweb.xmlに記述するものなので、サーブレットと同レベル、つまりStrutsとは直接関係無い。
でもフィルターで何らかの判断を行った結果、Strutsのタグで書かれたエラー画面へ遷移することはよくあるだろう。
フィルターからの遷移先は指定することが出来るので、普通にStrutsで作ったerror.jspへ遷移させられる。

が、JavaEEサーバー(つまりTomcat)起動直後にURL直打ちでフィルターを動かして遷移させたところ、画面表示でエラーになった><
JSPのhtml:errorsの処理であるErrorsTagがModuleConfigとかいうのを取得できなくてNullPointerException。
これはActionServletのinit()で初期化されるようなので、フィルターでいきなりエラー画面に飛ばすと初期化されてないから駄目みたいなんだな。
まぁ、いきなりURL直打ちで必要な情報の入っていないJSPを指定するようなものか。

で、フィルターからActionを経由するようにしたら上手く行ったのだが、その際のデータ受け渡しに、例外クラスを使って、しかも「例外発生時にJavaEEサーバーがその例外をリクエストに保持する為のキー」をそのまま使うのは危険だということが分かった(爆)
そこに例外が入っていると、フィルター処理終了後にエラー発生扱いされてしまうようで…まぁ当然かぁ。
Action内でクリア(リクエストのattributeをremove)してやれば大丈夫かもしれないけど、それでいいのか、自信ないな。



最新の画像もっと見る

コメントを投稿