記事内に広告が含まれています。

【Java】setAttributeメソッドで、サーブレット→JSP→サーブレットの様に渡す方法

サーブレット→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なら現場変えてもらいましょう。それが無理なら会社ごと辞めてしまった方がいいかもしれません。

.