概要
Spring MVCにてセッションスコープBeanを使用して、HTTPセッションを利用する方法についてまとめた。
セッションスコープBeanは、複数のコントローラーをまたぐ画面遷移において、コントローラー間で共有するオブジェクトをHTTPセッションで管理するために使用する。
この記事では、セッションスコープBeanを用いたHTTPセッションの基本的な使い方について紹介する。
参考
Springには、他にも@SessionAttributesを使用したセッション管理方法などがある。
概要 Spring MVCにて@SessionAttributesを使用して、HTTPセッションを利用する方法についてまとめた。 @SessionAttributesは、1つのコントローラー内にて複数のリクエスト間で共有するオブジェクト[…]
基本的な使い方
セッションスコープBeanは、SpringMVCにおいてHTTPセッションをアプリケーション全体で安全に管理するための仕組みとなる。
SpringはこのBeanをセッションに保存し、同一セッション内で再利用されるよう管理する。
基本的に以下の流れで使用する。
②BeanをDIして利用
③セッション操作が完了したらBeanを削除
セッションスコープBean定義
セッションスコープで管理するBeanは、アノテーション、Java Config、またはXMLによって定義することができる。
当記事では、XMLベースでの定義方法について説明する。
springMVCContext.xml
<bean id="cart" class="com.example.prototype.Hoge" scope="session">
<aop:scoped-proxy proxy-target-class="true" />
</bean>
<aop:scoped-proxy proxy-target-class=”true” />
上記の設定により、HogeクラスをセッションスコープのBeanとしてDIコンテナに登録する。
セッションスコープBeanの利用
セッションスコープのBeanを利用するためにはインジェクションを行って操作する。
HogeController.java
@Autowired
private Hoge hoge;
セッションスコープBeanをDIすると、同一セッション内であれば同じオブジェクトが共有される。
セッションスコープBeanの削除
セッションスコープのBeanを削除する場合、HttpSessionを使用して対象のBeanを指定して削除する。
HogeController.java
@GetMapping(value = "/complete")
public String complete(HttpSession session) {
session.removeAttribute("scopedTarget.hoge");
return "foo/bar";
}
public String complete(HttpSession session) {
HttpSessionはハンドラメソッドの引数にて取得できる。
セッション内で管理しているオブジェクトを指定して削除する。
セッションスコープBeanを利用すると、セッション内に”scopedTarget.beanName“という属性で管理される。
Viewからのアクセス
セッションに保存したオブジェクトにアクセスする。
hoge.jsp
<spring:eval var="hoge" expression="@hoge"/>
<p>Beanの属性を参照: ${hoge.input01}</p>
JSPからセッションスコープのBeanを参照する場合は、<spring:eval>タグを使ってSpELによりDIコンテナからBeanを取得できる。
expression属性には@Bean名を指定し、評価結果をvar属性でページスコープの変数として受け取る。
まとめ
☑ セッションスコープで管理するBeanは、SpringのDIコンテナに定義して利用する
☑ セッションスコープのBeanは、インジェクションによって複数のクラス間で共有され、同一セッション内で状態を保持できる
☑ View(JSP)からセッションスコープのBeanを参照する場合は、SpELを用いた<spring:eval>タグでDIコンテナから取得する