-
핸들러 메소드 10부: @SessionAttributeSPRING/스프링 MVC 2021. 7. 5. 23:33
@SessionAttribute
- HttpSession을 사용할 때 비해 Type Conversion을 자동으로 지원하기 때문에 편리한 점이 존재함.
- HttpSession을 이용하여 Session을 세팅.
- @SessionAttribute는 인터셉터 또는 서블릿필터 등에서 만들어 준 세션 데이터에 접근할 때 사용
@SessionAttributes
- @SessionAttributes는 해당 Controller 내에서 동작
- 해당 컨트롤러 안에서 다루는 특정 모델 객체를 세션에 넣고 공유할 때만 사용
인터셉터 걸릴 때마다 현재 시간을 세션에 set함.
public class VisitTimeInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); if(session.getAttribute("visitTime") == null) { session.setAttribute("visitTime", LocalDateTime.now()); } return true; } }
인터셉터 추가
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configurePathMatch(PathMatchConfigurer configurer) { UrlPathHelper urlPathHelper = new UrlPathHelper(); // URL에 있는 세미콜론(;)을 제거하지 않도록 false로 변경 urlPathHelper.setRemoveSemicolonContent(false); configurer.setUrlPathHelper(urlPathHelper); } // 인터셉터 추가 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new VisitTimeInterceptor()); } }
리스트를 불러올 때마다 시간을 console에 출력함.
// 이벤트 목록 페이지 @GetMapping("/events/list") public String getEvents(Model model, @SessionAttribute LocalDateTime visitTime) { System.out.println(visitTime); // 리스트를 불러오는 부분 Event event = new Event(); event.setName("spring"); event.setLimit(10); List<Event> eventList = new ArrayList<>(); eventList.add(event); model.addAttribute(eventList); return "/events/list"; }
'SPRING > 스프링 MVC' 카테고리의 다른 글
핸들러 메소드 12부 - FlashAttributes (0) 2021.07.09 핸들러 메소드 11부 RedirectAttributes (0) 2021.07.08 핸들러 메소드 9부 멀티 폼 서브밋 (0) 2021.07.05 핸들러 메소드 8부: @SessionAttributes (0) 2021.07.04 핸들러 메소드 7부: 폼 서브밋 (에러 처리) (0) 2021.07.04