Spring Bootにアノテーション@SessionScopeでセッションを使用する

環境
Windows10 64bit
Spring Boot 2.6.3
Spring Tool Suite 4
JDK 11
thymeleaf 3
説明
1.@SessionScope
@SessionScope は、ライフサイクルが現在の Web セッションにバインドされているコンポーネント用の @Scope の特殊化です。
2.@Autowired
@Autowired は、コントローラークラスやサービスクラスのフィールドに対して付与するアノテーションです。
使用例

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

package com.example.demo;

import java.io.Serializable;

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

//SessionScopeアノテーション
@Component
@SessionScope
//エンティティのクラスDepartの定義
public class Depart implements Serializable {

      /**
       * エンティティDepartクラスの定義
       */
      private static final long serialVersionUID = 1L;

      private String dname;

      public String getDname() {
            return dname;
      }

      public void setDname(String dname) {
            this.dname = dname;
      }

}

2.コントローラのクラス(DepController.java)
書式
model.addAttribute(オブジェクト名);
サンプルコード

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 DepController {
      @Autowired
      Depart depart;

      @GetMapping("/depart")
      public String funA(Model model) {
            
            // セッションにあるオブジェクトに値をセットする
            depart.setDname("開発部");
            model.addAttribute(depart);
            return "depart/index";
      }

}

3.コントローラのクラス(SubDepartController)
書式
model.addAttribute(オブジェクト名);
サンプルコード

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 SubDepartController {

      @Autowired
      Depart depart;

      @PostMapping("/depform")
      public String funB(@RequestParam String dname, Model model) {
            
            model.addAttribute("depname", dname);
            // セッションのオブジェクトをセットする
            model.addAttribute(depart);

            return "depart/depform";
      }

}

4.ユーザー登録画面(値を送信する側)

ファイル名 src\main\resources\templates\depart\index.html
サンプルコード
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <meta charset="utf-8" />
    <title>ユーザー登録</title>
  </head>
  <body>
    <form method="post" th:action="@{/depform}">
    <!--  オブジェクトの値を表示 -->
     セッションの値: <p th:text="${depart.dname}"></p>
      <input type="text" name="dname" />
      <input type="submit" value="送信" />
    </form>
  </body>
</html>

5.ユーザー登録確認画面(値を受け取る側)

ファイル名 src\main\resources\templates\depart\depform.html
サンプルコード
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<title>オブジェクトの値を表示する</title>
</head>
<body>
      <!-- オブジェクトの値を表示 -->
      セッションの値: <p th:text="${depart.dname}"></p>
      <p th:text="${depname}"></p>
</body>
</html>

6.動作確認
Webブラウザに以下のURLを入力します。
http://127.0.0.1:8080/depart/
画面に「セッションの値:開発部」が表示されます。
内容を入力して、送信ボタンを押下します。
http://127.0.0.1:8080/depform
画面に「セッションの値:開発部」が表示されます。

Spring Boot

Posted by arkgame