- - PR -
JSPからサーブレットやJSPからJSPへのBeanの渡し方
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-03-22 17:32
こんにちはナスティキャットです。
今までサーブレットからJSPにBeanを渡していたのですが今度は サーブレット→JSP→サーブレット の形でやりたいと思うのですが、セッションを使う方法しか思いつきません。 他に受け渡し方法として良い方法をご存知の方がいらっしゃいましたら教えて下さい。 | ||||
|
投稿日時: 2004-03-22 17:55
アプリケーションスコープで維持するなら、ServletContextに保存してください。
セッションスコープで維持するなら、Sessionに保存してください。 リクエストスコープで維持するなら、ServletRequestに保存してください。 メソッドローカル(あるいは1枚のJSP)を超えるスコープを持つBeanは、常に上記のいずれかに保存してください。Servletの規則だと思ってください。逆らっても良いことはほとんど無いはずです。 | ||||
|
投稿日時: 2004-03-22 18:23
シュンさん返信ありがとうございます。
ServletRequestで保持しようと考えていますが、JSPからサーブレットやJSPに渡す時にはどうしたらよいのでしょうか? JSPにJAVAのコードを書いてServletRequestにsetAttribute()すれば良いのでしょうか? | ||||
|
投稿日時: 2004-03-22 18:32
JSP > サーブレットにBeanを渡したいのであれば
Requestスコープではだめだと思います。 >JSPにJAVAのコードを書いてServletRequestにsetAttribute()すれば良いのでしょうか? そのJSPの後続の処理でgetAttributeするしかできなくなります。 ページが生成された段階で、リクエストのスコープは終わります。 サーブレットからJSPにBeanを渡すのは、 サーブレットからJSPに対してforwardしてますよね? その場合リクエストはサーブレットとJSPで同じものを使用しているので、 サーブレットとJSPでBeanをRequest.getAttributeで参照することができるのです。 | ||||
|
投稿日時: 2004-03-22 19:09
かつのりさん返信ありがとうございます。
では、今回はセッションをあまり使いたくないのでServletContextと考えたのですが、 これだとTomcatが起動している間はずっとなりますよね? 途中で破棄する方法は無いのでしょうか? | ||||
|
投稿日時: 2004-03-22 19:21
ServletContextではアプリケーション内のスコープになるのですが、
クライアント固有の情報を保持するスコープではありません。 JSPでBeanと聞くと、クライアント固有の情報のような気がして・・・ 全クライアントで共通の情報であればよいのですが。 ちなみに簡単に書きますが、ServletContextListenerを実装したクラスを web.xmlに登録しcontextDestroyedメソッドで、コンテナのシャットダウンを 検出することができます。 | ||||
|
投稿日時: 2004-03-23 13:15
みなさんありがとうございました。
セッションで管理するのが一番良いと言うことでセッションを使います。 ここで新たなエラーが出てしまいました・・・。 JSP1→サーブレット→JSP2 ↑ | −−−−−−−−−−−− とやっているのですが2回目に通った時に1回目のデータが残ってしまっています・・ サーブレットはBeanではないのですが・・・ こんなことはありえるのでしょうか? どのように回避したらよいのかどなたか教えて下さい。 | ||||
|
投稿日時: 2004-03-23 13:29
非常にありがちですね。 サーブレットのインスタンスは1つしかないということを頭において、 よく考えてください。 | ||||
