サーブレット→JSP→サーブレットと遷移する場合、セッションでデータを渡す方法です。
setAttributeメソッドのリクエストスコープの限界
サーブレットからJSPにデータを渡す時に、リクエストでデータを渡す方法があります。
しかし、そのまま、サーブレットからJSPにリクエストで渡すと、渡した先のJSPから更にサーブレットを呼び出した時に、データを取得することが出来ません。
例えば、次の様な流れでリクエストを渡したとします。
- ①Sample1.jspでsubmitを使ってServlet1.javaにリクエストで値を渡す
- ②Servlet1.javaからSample2.jspに値を渡す
- ③Sample2.jspでsubmitを使ってServle2.javaにリクエストで値を渡す
この場合、①のリクエストをサーブレット側(Servlet1.java)で受け取って、サーブレット側のrequest.setAttributeメソッドで、②のようにサーブレットからJSPに値を渡すことは可能です。
①で、Sample1.jsp→Servlet1.javaとしたリクエストを、更に先のJSPに渡すことは出来ません。
setAttributeメソッドの仕様上、リクエストスコープで設定した場合、1つのリクエストの中でしか生きることが出来ないからです。
セッションスコープを使う
setAttributeメソッドをセッションスコープで設定すると、同じセッション内であれば、setAttributeメソッドで設定したデータを使うことが出来ます。
JSP1→サーブレット1→JSP2→サーブレット2 の様なプログラムがあったとします。
JSP1→サーブレット1でsetAttributeメソッドを用いて、サーブレット2まで渡したい場合、JSP1→サーブレット1と遷移した際に、サーブレット1側で次の様に、setAttributeメソッドを使います。
// 【サーブレット1】セッションスコープでsetAttributeメソッドを使用する HttpSession session = request.getSession(); session.setAttribute("データ名",オブジェクト名);
で、サーブレット1で設定したデータをサーブレット2で使いたい場合、サーブレット2では次の様に記載します。
// サーブレット1で設定したデータをサーブレット2で使う HttpSession session = request.getSession(); クラスの型 オブジェクト名 = session.getAttribute("データ名");
リストを渡したい場合はキャストが必要なので、その点は注意。
hiddenタグを使っても同様のことが可能
セッションスコープでリクエストを跨いでデータを渡す方法ですが、hiddenタグを使っても同じことが出来ます。
<form>タグに、
<input type=”hidden” name=”データ名” value=”値”>
を埋め込めば完成です。
セッションスコープとhiddenタグ、一丁一旦なので、どちらが良いかはその都度、判断するか、有識者に相談するかですね。
…有識者がいない?それはチーム変えてもらうか、SESなら現場変えてもらいましょう。それが無理なら会社ごと辞めてしまった方がいいかもしれません。
.