SpringBoot @SessionScopeでセッションを使用

Spring Bootの@SessionScopeでセッションを使用するサンプルです。
(確認環境:Spring Boot 2.5,JDK 11,thymeleaf3)

目次

サンプル @SessionScopeでセッションを使用する
  エンティティのクラス(Syain.java)
  コントローラのクラス(MainController.java)
  コントローラのクラス(SubController.java)
  値を送信する側のファイル(index.html)
  値を受け取る側のファイル(testform.html)
  実行して確認する

@SessionScopeでセッションを使用する

画面表示時にMainControllerクラスにアクセスし
オブジェクトを生成してセッションに保持します。
ボタン押下でSubControllerクラスにアクセスし
画面遷移しセッションに保持したオブジェクトの値を画面に表示します。

@SessionScopeの有効範囲は、複数のControllerをまたげます。

githubにコードがあります。
https://github.com/ut23405/springboot/tree/master/springboot-session-scope

 

エンティティのクラス(Syain.java)

package com.example.demo;

import java.io.Serializable;

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;

@Component
@SessionScope
public class Syain implements Serializable {
	private static final long serialVersionUID = 1L;
	private String name;

	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
}

9行目はSessionScopeアノテーションです。

 

コントローラのクラス(MainController.java)

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MainController {
	@Autowired Syain syain;

	@GetMapping("/test1")
	public String input1(Model model) {
		
		syain.setName("suzuki");
		model.addAttribute(syain);
		return "test1/index";
	}
}

15行目は、セッションにあるオブジェクトに値をセットしています。

 

コントローラのクラス(SubController.java)

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class SubController {
	@Autowired Syain syain;
	
	@PostMapping("/testform")
	public String output1(@RequestParam String text1, Model model 
			) {
		model.addAttribute("moji1", text1);
		model.addAttribute(syain);
		return "test1/testform";
	}
}

17行目は、セッションのオブジェクトをセットしています。

値を送信する側のファイル(index.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <meta charset="utf-8" />
    <title>submit</title>
  </head>
  <body>
    <form method="post" th:action="@{/testform}">
      <p th:text="${syain.name}"></p>
      <input type="text" name="text1" />
      <input type="submit" value="送信ボタン" />
    </form>
  </body>
</html>

9行目は、オブジェクトの値を表示します。

 

値を受け取る側のファイル(testform.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <meta charset="utf-8" />
    <title>submit</title>
  </head>
  <body>
    <p th:text="${syain.name}"></p>
    <p th:text="${moji1}"></p>
  </body>
</html>

8行目は、オブジェクトの値を表示します。

 

実行して確認する

springbootアプリケーションを起動してブラウザに以下のURLを入力するとindex.htmlが画面に表示されます。
※プロジェクトを右クリックしてSpring Bootアプリケーションをクリック。

http://localhost:8765/test1/

画面表示時にセッションのオブジェクトの値を表示します。
値を入力してボタンを押すと別の画面に移動し、セッションに保持したオブジェクトの値を表示します。

関連の記事

SpringBoot フォームで入力チェック(バリデーション)
SpringBoot フォームとエンティティでDB登録

△上に戻る