[Spring] - Session Tracking
✅ Spring Bean Controller 의 Session Tracking 기술
Cookie API
HttpSession
@SessionAttribute
Test용 Cookie & Session 객체 :
<%
//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)
- Servlet 과 동일하게
HttpSession
객체로 Session 데이터 활용 가능🔵 Session 초기화
session.invalidate();
로 Session 초기화 후 null 값 반환
3. @SessionAttribute
✅ Spring Controller Session Tracking
@Controller
@RequestMapping("sessiontracking")
@SessionAttributes({"id", "age", "cust"})
public class Step03Controller {
...
}
🔵 클래스 상위에 선언
🔵
@SessionAttributes({})
- Session의 key 값들을 지정하는 배열
👀 Session Data 가져오기
@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)
- session에 있는 id와 age key를 가진 데이터를 가져온다
🚩
@ModelAttribute
은 request에다 넣는건 줄 알았는데...!?
@SessionAttribute
에 지정된 key 값이 존재하지 않을 때는request.setAttribute("id", id)
와 비슷하게 실행되고forward
방식일 때만 jsp에서${requestScope.id}
으로 출력이 가능하다- 🤪❓
forward
방식이며@SessionAttribute
에 지정된 key 값이면${requestScope.id}
&${sessionScope.id}
둘 다 사용 가능 (왜 requestScope도 사용이 가능한지 잘 모르겠다😭)
@SessionStatus
✅ Session Data 초기화
@RequestMapping("/sessionDelete2")
public String m5(SessionStatus status) {
System.out.println("m5()--- ");
status.setComplete();
return "redirect:/step03Session.jsp";
}
🔵
SessionStatus
API
setComplete()
메소드를 사용해서 Session 초기화
++ 👀 @Model API를 활용한 Query String Data 사용
✅ @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의 활용으로 둘다 Session에 데이터를 추가는 가능하지만 초기화 하는 방식은 따로 작동
-
HttpSession
의 초기화 방식인invalidate()
로는@SessionAttributes
에서 지정된 key 값을 가진 Session Data는 삭제 불가 -
HttpSession
의getAtrribute()
&setAttribute()
로@SessionAttribute
에서 지정된 key의 데이터 반환 및 추가는 가능
Author And Source
이 문제에 관하여([Spring] - Session Tracking), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@henrynoowah/Spring-Session-Tracking저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)