3

jspでユーザーセッションを管理する場合、session.setAttribute()で変数を設定してセッションを利用することもあれば、Java Beanオブジェクトを作成して(スコープをセッションに設定)ユーザー情報を保存し、別のページで取得することもできます。これら2つの違いは何ですか?

4

2 に答える 2

1

いくつかの違いがあります。

まず、何かを属性として保存すると、オブジェクトとして保存されるため、取得するときに実際にキャストする必要があります.Beanは常にクラスです。

第二に、Bean を使用している場合、Bean が作成されているかどうかを気にする必要はありません。jsp:useBean タグは、Bean が既に作成されている場合はアクセスし、そうでない場合は作成するため、関数を呼び出したり get メソッドを使用したりする場合は、Bean を使用するときにその存在が保証されます。セッション変数に保存する予定で、保存する前にアクセスしようとすると、null が返され、関数を呼び出すと問題が発生します。

一般に、session 変数を使用して情報を渡し、bean を使用して呼び出したい関数を持つクラスを渡します。

したがって、比較的単純なデータ (文字列など) を渡すことを計画している場合は、それをセッション変数に入れても問題はありません。null は値として意味があります。比較には注意してください (例: do string_var.equals((String)session.getAttribute("attribute_name")) not ((String)session.getAttribute("attribute_name")).equals(string_var) ) 2 番目は定義されていない null.equals() である可能性があるため)。

MVC フレームワークでプログラミングしている場合、(私の理解では) 通常、Bean を使用してセッション (または状況に応じて他の) 変数に書き込むと、JSP ページはセッション変数から情報をロードします。これにより (とりわけ)、Web ページが更新セーフになります (つまり、更新ボタンを押すと、すべてのコードを再度実行してセッション変数から情報をリロードする代わりに、単にセッション変数から情報を再度取得します)。情報を追加したり、増やしたり、減らしたりするときは重要です。

確かに、私は JSP には比較的慣れていませんが、それが私の状況の理解です。

于 2011-06-29T23:52:15.427 に答える
1

これらは、同じデータを渡す方法がわずかに異なるだけです。

あなたが言うように、次のいずれかが可能です:

(1)

session.setAttribute("entry", entry);

または (2)

session.setAttribute("name", entry.getName());
session.setAttribute("address", entry.getAddress());
session.setAttrubute("phone", entry.getPhone());

(1) の場合、JSP には次のものが含まれる場合があります。

Name: ${entry.name}<br/>
Address: ${entry.address}<br/>
Phone: ${entry.phone}<br/>

一方、(2) の場合、同等の JSP は次のようになります。

Name: ${sessionScope['name']}<br/>
Address: ${sessionScope['address']}<br/>
Phone: ${sessionScope['phone']}<br/>

(または<c:set>、上記のコードをもう少し読みやすくするために、いくつかのローカル変数を設定するために使用することもできます)。

基本的にはどちらも同じですが、(1) 使用するコードが少なく、読みやすく、理解しやすいです。

(私自身はまだ Java EE の初心者なので、より経験豊富な意見は気にしません!)

于 2011-06-23T03:46:43.690 に答える