Webアプリケーションには必須のセッション管理をやってみます。
STS3(3.9.6)+SpringBoot2.0+Tymeleaf3.0迄動作確認しています。
セッション
HTTPは、ご存知の通りステートレス(クライアントとのセッション情報を保存しない)なので、複数の画面間で共有しなければならない情報は自前で管理しないといけません。
セッション管理で最初にやることは、セッション情報を保持するためのクラス(Bean)を作ることです。
セッション情報を保持するためのクラス(Bean)
今回は、簡単なメッセージをひとつだけ管理するクラスを作ります。
@Component
@Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class SessionSample implements Serializable {private static final long serialVersionUID = 6334063099671792256L;
private String msg;public String getMsg() {
return msg;
}public void setMsg(String msg) {
this.msg = msg;
}}
ポイントは3つです。
- Serializable なこと。
- @Component アノテーション
- @Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS) アノテーション
普通にBeanを定義して、上記のアノテーションをつけることでセッション管理クラス(Session Bean)になります。
このSession Beanを情報の受け渡しをしたいコントローラクラスで使います。
今回はサンプルとして、入力されたIDを利用したメッセージをセッションに保存し、別の画面でそれを表示してみます。
入力画面のコントローラクラス
@Autowiredアノテーションをつけて、セッション管理Bean(sessionSample)を利用できるようにしています。
@Autowired
protected SessionSample sessionSample;@RequestMapping(value = "/outpg01", method = RequestMethod.POST)
public String confirm(@Validated @ModelAttribute Hello3Form form, BindingResult result, Model model) {
StringBuilder sb = new StringBuilder();
sb.append("セッションの受け渡しテスト用:入力したIDは");
sb.append(form.getInputPid());
sb.append("です。");
sessionSample.setMsg(sb.toString());
return "outpg01";
}
セッション管理クラス(上記だと、SessionSampleクラス)が、そのままセッションスコープで値を保持してくれるので、値の受け渡しは普通にgetter、setterでやれば良いだけです。
メッセージを表示するクラス
上でセッションに書き込んだメッセージを表示するコントローラクラスです。
@Controller
public class Hello2Controller {
@Autowired
protected SessionSample sessionSample;@RequestMapping("/hello2")
public String hello(Model model) {
model.addAttribute("msg", sessionSample.getMsg());
return "hello2";
}}
動作確認
入力画面で、PIDを入力してみます。
それを異なるコントローラクラスを通して、結果表示します。
受け渡しは問題なくいけてるようです。
STS3+Spring Boot +thymeleaf 関連記事
入力画面に関連する記事
参照画面・画面遷移に関連する記事
参照画面:テーブルを使い、行毎に色分けした一覧表を表示する。
入力チェックに関連する記事
入力チェック:@Patternと正規表現で独自チェックする。
入力チェック用アノテーション定義を自分で作る。(独自実装版)
データアクセス・その他に関連する記事