【Spring MVC】HTTPセッションの管理(セッションスコープBeanの利用)

概要

Spring MVCにてセッションスコープBeanを使用して、HTTPセッションを利用する方法についてまとめた。
セッションスコープBeanは、複数のコントローラーをまたぐ画面遷移において、コントローラー間で共有するオブジェクトをHTTPセッションで管理するために使用する。

この記事では、セッションスコープBeanを用いたHTTPセッションの基本的な使い方について紹介する。

 

参考

Springには、他にも@SessionAttributesを使用したセッション管理方法などがある。

あわせて読みたい

概要 Spring MVCにて@SessionAttributesを使用して、HTTPセッションを利用する方法についてまとめた。 @SessionAttributesは、1つのコントローラー内にて複数のリクエスト間で共有するオブジェクト[…]

【Spring MVC】HTTPセッションの管理(@SessionAttributesのtypes属性を使用)

 

基本的な使い方

セッションスコープBeanは、SpringMVCにおいてHTTPセッションをアプリケーション全体で安全に管理するための仕組みとなる。
SpringはこのBeanをセッションに保存し、同一セッション内で再利用されるよう管理する。

基本的に以下の流れで使用する。

①セッションスコープで管理する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>	

 

<bean id=”cart” class=”com.example.prototype.Hoge” scope=”session”>
<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";
}	

 

@GetMapping(value = “/complete”)
public String complete(HttpSession session) {

HttpSessionはハンドラメソッドの引数にて取得できる。

 

session.removeAttribute(“scopedTarget.hoge”);

セッション内で管理しているオブジェクトを指定して削除する。
セッションスコープBeanを利用すると、セッション内に”scopedTarget.beanName“という属性で管理される。

 

Viewからのアクセス

セッションに保存したオブジェクトにアクセスする。

hoge.jsp


<spring:eval var="hoge" expression="@hoge"/>
<p>Beanの属性を参照: ${hoge.input01}</p>

 

<spring:eval var=”hoge” expression=”@hoge”/>

JSPからセッションスコープのBeanを参照する場合は、<spring:eval>タグを使ってSpELによりDIコンテナからBeanを取得できる。
expression属性には@Bean名を指定し、評価結果をvar属性でページスコープの変数として受け取る。

 

 

まとめ

 

☑ セッションスコープで管理するBeanは、SpringのDIコンテナに定義して利用する

☑ セッションスコープのBeanは、インジェクションによって複数のクラス間で共有され、同一セッション内で状態を保持できる

☑ View(JSP)からセッションスコープのBeanを参照する場合は、SpELを用いた<spring:eval>タグでDIコンテナから取得する

スポンサーリンク