jspでユーザーセッションを管理する場合、session.setAttribute()で変数を設定してセッションを利用することもあれば、Java Beanオブジェクトを作成して(スコープをセッションに設定)ユーザー情報を保存し、別のページで取得することもできます。これら2つの違いは何ですか?
2 に答える
いくつかの違いがあります。
まず、何かを属性として保存すると、オブジェクトとして保存されるため、取得するときに実際にキャストする必要があります.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 には比較的慣れていませんが、それが私の状況の理解です。
これらは、同じデータを渡す方法がわずかに異なるだけです。
あなたが言うように、次のいずれかが可能です:
(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 の初心者なので、より経験豊富な意見は気にしません!)