2016-11-28 4 views
0

私はStruts 1.2を使用していますが、私はActionクラスについての説明が必要です。セッションが拒否された後でも、Actionクラスオブジェクトはどのように使用できますか?

マイActionクラスは、(1ずつ増加)のインクリメントされた値を出力しますSOP文でインスタンス変数とインスタンス初期化ブロックを持っています。次に、アプリケーションの画面に対してこのActionクラスを設定しました。今私がこの画面にヒットすると、私のActionクラスが実行されます。

私はこのスクリーンフォームに2種類のブラウザにアクセスし、Iは、インスタンス初期化ブロック内のSOPのみにオブジェクトが両方のユーザのために作成されていることを結論のみた後に実行されたことがわかりました。

私は両方のブラウザからログアウトし、同じ画面にアクセスするために再びサインインしたとき、インスタンス初期化ブロック内のSOPは実行されませんでした(したがって、Actionクラスオブジェクトは引き続き使用可能です)。しかし、実行中のサーバーからプロジェクトを削除して再度公開すると、SOPが実行されました。

だから私は、Actionクラスのオブジェクトはセッションと関連していないと思うし、そうでない場合は、その後も、セッションの後、Actionクラスのオブジェクトを無効になるように、それが格納されてきているところがありますか?

サンプルActionクラスコード: -

public class SampleAction extends DispatchAction { 
    private int count; 

    { 
     System.out.println(++count + " object(s) created"); 
    } 
    /* other methods */ 
} 
+0

は、あなたのテストコードはどこにありますか?私たちは、サーブレット・コンテキスト内のデータを格納する場合、それはすべてのユーザーに利用できるようになりますbeacuse – Sachith

答えて

1

私は、それはそのようにしてもセッションの後に格納されてきているところ、Actionクラスのオブジェクトはセッションと、それ がない場合には関連していないと思います 無効なActionクラスオブジェクトが取得できますか?

はい、ActionServletActionクラスのオブジェクトはすなわち、これらのクラスのインスタンスが1つだけあなたのFormBeanオブジェクトとは異なり、全体のWebアプリケーションのために維持されて作成され、サーブレットコンテナによって維持され、彼らは(デフォルトで)シングルトンオブジェクトであるされています。

したがってActionServletActionクラスオブジェクトは、ユーザーセッションに関係なくアプリケーションが破棄されるまで(起動時または最初の要求がコンテナにヒットしたとき)、コンテナ内に存在します。また

ActionクラスオブジェクトがFormBeanクラスオブジェクトとは全く異なっていることに注意してください(などのようなProductFormBeanEmployeeFormBean、...)つまり、FormBeanオブジェクトは、各JSPページに関連付けられていると、彼らがインスタンス化されます(一つのオブジェクトが作成されます)、リクエストがユーザーから来たときに(JSPフィールドのデータを使用して)移入されます。

+0

は、サーブレットコンテナとサーブレットコンテキストは、同じオブジェクトであり、あなたの質問に投稿してください(アプリケーション賢明では)彼らは同じですか? –

+0

サーブレットコンテナが 'ServletContext'、すべての' Servlet'が – developer

+0

オブジェクトを作成し、管理します(などのTomcat、Weblogicの、突堤、のような...)Serverはあなたに感謝です** @ javaguy ** –

関連する問題