Session은 여러 화면이나 여러 요청에서 사용해야 하는 객체를 공유할 때 사용할 수 있다,
HttpSession사용
HttpSession을 사용하여 직접 session을 추가할 수 있다.
테스트를 통해 세션정보를 확인해보면 세션이 정상적으로 저장된 것을 알 수 있다.
@SessionAttributes
- HttpSession보다 조금 더 추상화된 방법으로 아래와 같이 @SessionAttributes를 사용한다.
model.addAttribute의 attributeName이랑 @SessionAttributes의 괄호 안의 값이 같으면 model에 추가될 때 자동으로 세션으로 넣어준다.
위와 동일한 테스트를 돌려보면 결과가 똑같은 것을 알 수 있다.
세션 처리
이렇게 추가한 세션을 @ModelAttribute를 통해 바인딩하여 받을 수 있다. 그리고 이 세션을 처리하고 싶을 때 SessionStatus를 이용하여 setComplete()를 호출하면 세션이 제거되어 세션을 처리할 수 있다.
위에서 사용한 @SessionAttributes와 다르다.
@SessionAttributes
- 해당 컨트롤러 내에서만 동작.
- 즉, 해당 컨트롤러 안에서 다루는 특정 모델 객체를 세션에 넣고 공유할 때 사용.
@SessionAttribute
- 컨트롤러 밖(인터셉터 또는 필터 등)에서 만들어 준 세션 데이터에 접근할 때 사용한다.
방문 시간 세션을 생성하고 확인해보자.
우선 방문 시간 세션을 생성하기 위해 Interceptor를 하나 만든다.
WebConfig에 Interceptor를 추가해준다.
세션 값 받아오기
1. HttpSession 사용
2. @SessionAttribute 사용
위의 두 가지 방법 모두 정상적으로 작동된다. 하지만 HttpSession은 따로 형변환이 필요하고 @SessionAttribute는 간단하게 사용할 수 있다.
'스프링 > 스프링 MVC' 카테고리의 다른 글
핸들러 메서드: MultipartFile, ResponseEntity (0) | 2019.12.28 |
---|---|
핸들러 메서드: RedirectAttributes, FlashAttributes (0) | 2019.12.26 |
Spring MVC @ModelAttribute, @Valid, @Validated (0) | 2019.12.24 |
Spring MVC @PathVariable, @MatrixVariable, @RequestParam (0) | 2019.12.24 |
Spring MVC HEAD, OPTIONS HTTP Method (0) | 2019.12.22 |