- PR -

Strutsでのセッションタイムアウト時の処理

1
投稿者投稿内容
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2004-04-14 11:07
こんにちは。
現在、Tomcat4.1、Struts1.1を用いて開発を行っています。
StrutsのActionFormのプロパティに、自作のクラスを設定しているのですが
セッションのタイムアウト時に、NullPointerExceptionが発生し
ブラウザにException Reportとして表示されてしまい困っています。
NullPointerExceptionが発生する原因は、おそらく上記のように、一般的ではない自作のクラスをActionFormのプロパティに定義していることだと思います。
struts-configのglobal-exceptionでexceptionが発生した場合にエラーページへ遷移させるように設定していますが、ActionFormで発生したExceptionをcatchできないようです。
何か良い解決方法などをご存知の方がいらっしゃたら、よろしくお願いします。
わんこ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 46
投稿日時: 2004-04-14 11:18
私の場合はセッションタイムアウト時などの処理を(質問と少し違うかもしれませんが)、ActionServletを拡張したクラスでメソッドを作成し、そこでtry〜catchをしています。

process()メソッド(Struts1.1だとよくわかりませんが)でActionFormの処理をしているはずなのでそこを拡張したクラスでできないでしょうかね?

それ以外の対処方法(ActionFormあたり)もありそうですが
初期値を与えるとか

参考にならなかったらすみません・・・


[ メッセージ編集済み 編集者: わんこ 編集日時 2004-04-14 11:20 ]

[ メッセージ編集済み 編集者: わんこ 編集日時 2004-04-14 11:23 ]
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2004-04-14 12:00
 フィルターで弾くというのはどうでしょうか?
これなら、セッションのチェックを行うフィルターを一つ作成して、
後はweb.xmlに下記のように登録してやるだけです。
コード:
  <filter>
    <filter-name>SslFilter</filter-name>
    <filter-class>SslFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>SslFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2004-04-14 16:54
わんこさん、takuさん返信ありがとうございます。
御二人の書かれた内容で調査中です。

私がやろうとしていることは、例えば会員編集画面みたいなものがある場合に
ActionFormのプロパティに
Member member;
のようなものとsetter/getterを用意しておき
Memberクラスでは
int id; //会員番号
String name; //氏名
String email; //メールアドレス
などのフィールドとsetter/getterを用意しています。

セッションのタイムアウトが発生した場合に、
ActionFormのsetter/getterやvalidateでmemberがnullになってしまいNullPointerExceptionが発生するのですが、global-exceptionで拾えません。
また、DynaValidatorFormを使用した場合は、IlleagalArgumentExceptionが発生してしまうようです。
このような実装はstrutsの使い方としてあまり良くないのでしょうか?
WEBの全ての入力欄を他のBeanなどを介さずに、直接ActionFormにプロパティにセットすべきなのでしょうか?

わんこさん、takuさんが書かれた内容を引き続き考えます。
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2004-04-16 10:21
こんにちは。
わんこさんがアドバイスしてくださったように、ActionFormのコンストラクタでプロパティを初期化するという手法で何とかExceptionを回避しました。
takuさんが書かれたFilterを使う方法は、導入しようとするとなぜかWEBアプリケーションにアクセスできなくなってしまいました。ただ、文字化け対策をFilterを使って行う方が良いみたい(今はActionFormのresetメソッドで行っています)なので、もう少し調べたいと思います。
わんこさん、takuさん、ありがとうございました。
1

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