[Spring] - Session Tracking
Spring Ben Controllerのセッション追跡テクノロジー
Cookie API
HttpSession
@SessionAttribute
<%
//test용 Cookie 데이터 생성해서 client에게 전송
Cookie c = new Cookie("id", "cookieData");
c.setMaxAge(60*60);
response.addCookie(c);
//test용 Session 데이터 저장
session.setAttribute("id", "tester");
session.setAttribute("age", 100);
%>
Controller :package controller;
import ...
@Controller
@RequestMapping("sessiontracking")
public class Step03Controller {
...
}
1. Cookie API
<a href="sessiontracking/cookietest">@CookieValue</a>
@RequestMapping("/cookietest")
public String m1(@CookieValue("id") String idValue) {
System.out.println("m1() -- " + idValue);
// 출력 결과 : "m1() -- " + cookieData"
}
🔵 (@CookieValue("id") String idValue) クッキーの「id」というキー値に格納されているデータをString idValue変数として返します。
2. HttpSession
<a href="sessiontracking/sessionTest1">HttpSession API 활용 </a>
@RequestMapping("/sessionTest1")
public String m2(HttpSession session) {
session.getAttribute("id"));
session.getAttribute("age"));
session.setAttribute("newData", "서버에서 새로 저장한 데이터");
return "redirect:/step03Session.jsp";
}
@RequestMapping("/sessionDelete")
public String m3(HttpSession session) {
System.out.println("m3()---");
session.invalidate();
session = null;
return "redirect:/step03Session.jsp";
}
🔵 (HttpSession session) セッションデータは、サーブレットと同じHttpSessionオブジェクトとして使用できます。 🔵 セッションの初期化 session.invalidate(); セッション初期化後にNull値を返す
3. @SessionAttribute
✅ Spring Controller Session Tracking
@Controller
@RequestMapping("sessiontracking")
@SessionAttributes({"id", "age", "cust"})
public class Step03Controller {
...
}
🔵 クラスの親に宣言 🔵 @SessionAttributes({}) セッションのキー値を指定する配列。
👀 セッションデータのインポート
@RequestMapping("/sessionTest2")
public String m4(@ModelAttribute("id") String id,
@ModelAttribute("age") int age) {
return "redirect:/step03Session.jsp";
}
🔵 (@ModelAttribute("id") String id, @ModelAttribute("age") int age) セッションにidとage keyを持つデータの取得 🚩 @ModelAttributeはリクエスト中だと思っていたのですが…!? @SessionAttributeで指定したキー値が存在しない場合、要求します。jspから${requestScope.id}に出力できるのは、実行時にsetAttribute(「id」,id)と類似し、転送方式である場合のみです。 🤪❓ forward方式で、@SessionAttributeで指定したキー値であれば、${RequestScope.id}&${SessionScope.id}が利用可能です(なぜRequestScopeも利用可能なのか分かりません)😭)
@SessionStatus
ストレージセッションデータの初期化
@RequestMapping("/sessionDelete2")
public String m5(SessionStatus status) {
System.out.println("m5()--- ");
status.setComplete();
return "redirect:/step03Session.jsp";
}
🔵SessionStatus API setComplete()メソッドを使用してセッションを初期化する
++ 👀 @Model APIを使用したQuery Stringデータの使用
✅
@PathParam
& DTO.class
@RequestMapping("sessionTest3DTO")
public String m6(Model model,
@PathParam("id") String id,
@PathParam("age") int age) {
model.addAttribute("id", id);
model.addAttribute("id", id);
return "redirect:/step03Session.jsp";
}
🔵@PathParamを使用して各データを取得するか、Query Stringに一致する変数からなるDTOを使用します。
🚩❕❕ HttpSession&SessionAttributesの仕事の違い
他のAPIを使用してセッションにデータを追加できますが、初期化方法は独立しています.
HttpSession
の初期化方式invalidate()
は、@SessionAttributes
において指定されたキー値を有するセッションデータを削除することができないHttpSession
のgetAtrribute()
およびsetAttribute()
は、@SessionAttribute
に指定された鍵のデータを返し、追加するために使用され得るReference
この問題について([Spring] - Session Tracking), 我々は、より多くの情報をここで見つけました https://velog.io/@henrynoowah/Spring-Session-Trackingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol