- PR -

JSPからサーブレットやJSPからJSPへのBeanの渡し方

投稿者投稿内容
ナスティキャット
常連さん
会議室デビュー日: 2004/03/03
投稿数: 24
投稿日時: 2004-03-22 17:32
こんにちはナスティキャットです。

今までサーブレットからJSPにBeanを渡していたのですが今度は

サーブレット→JSP→サーブレット

の形でやりたいと思うのですが、セッションを使う方法しか思いつきません。
他に受け渡し方法として良い方法をご存知の方がいらっしゃいましたら教えて下さい。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-03-22 17:55
アプリケーションスコープで維持するなら、ServletContextに保存してください。
セッションスコープで維持するなら、Sessionに保存してください。
リクエストスコープで維持するなら、ServletRequestに保存してください。

メソッドローカル(あるいは1枚のJSP)を超えるスコープを持つBeanは、常に上記のいずれかに保存してください。Servletの規則だと思ってください。逆らっても良いことはほとんど無いはずです。
ナスティキャット
常連さん
会議室デビュー日: 2004/03/03
投稿数: 24
投稿日時: 2004-03-22 18:23
シュンさん返信ありがとうございます。

ServletRequestで保持しようと考えていますが、JSPからサーブレットやJSPに渡す時にはどうしたらよいのでしょうか?
JSPにJAVAのコードを書いてServletRequestにsetAttribute()すれば良いのでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 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/03
投稿数: 24
投稿日時: 2004-03-22 19:09
かつのりさん返信ありがとうございます。

では、今回はセッションをあまり使いたくないのでServletContextと考えたのですが、
これだとTomcatが起動している間はずっとなりますよね?
途中で破棄する方法は無いのでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-03-22 19:21
ServletContextではアプリケーション内のスコープになるのですが、
クライアント固有の情報を保持するスコープではありません。
JSPでBeanと聞くと、クライアント固有の情報のような気がして・・・
全クライアントで共通の情報であればよいのですが。

ちなみに簡単に書きますが、ServletContextListenerを実装したクラスを
web.xmlに登録しcontextDestroyedメソッドで、コンテナのシャットダウンを
検出することができます。
ナスティキャット
常連さん
会議室デビュー日: 2004/03/03
投稿数: 24
投稿日時: 2004-03-23 13:15
みなさんありがとうございました。
セッションで管理するのが一番良いと言うことでセッションを使います。

ここで新たなエラーが出てしまいました・・・。

JSP1→サーブレット→JSP2
↑           |
−−−−−−−−−−−−

とやっているのですが2回目に通った時に1回目のデータが残ってしまっています・・
サーブレットはBeanではないのですが・・・
こんなことはありえるのでしょうか?
どのように回避したらよいのかどなたか教えて下さい。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-03-23 13:29
引用:

とやっているのですが2回目に通った時に1回目のデータが残ってしまっています・・
サーブレットはBeanではないのですが・・・
こんなことはありえるのでしょうか?



非常にありがちですね。
サーブレットのインスタンスは1つしかないということを頭において、
よく考えてください。

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