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
画面に「セッションの値:開発部」が表示されます。