스프링 HTTP Session 사용
@SessionAttributes
Controller 클래스에 적용되며 지정된 이름 또는 타입의 model객체들을 session에 저장 및 사용한다.
controller가 세션을 통해 임시적으로 유지 및 공유하고자 하는 model 객체들을 지정하기 위해 사용한다.
여러 controller 사이의 데이터 공유는 HttpSession을 직접 이용하는 것이 바람직하다.
@RequestMapping("/someURI")
public String process(HttpServletRequest request, ... ) {
if (someCondition) {
HttpSession session = request.getSession();
... // someCondition이 true인 경우에만 Session 생성 및 사용
}
}
@RequestMapping("/someURI")
public String process(HttpSession session, ... ) {
assert(session != null); // true
//session이 이미 존재하면 그 session을 전달하고 아니라면 새로운session생성
..
}
session 사용 예
@Controller
@SessionAttributes("eventForm") // session에 저장할 객체 이름
public class EventCreationController {
@ModelAttribute("eventForm") // EventForm 객체를 생성하여 session에 저장
public EventForm formData() {
return new EventForm();
}
@RequestMapping("/newevent/step1") // Step1 요청 URL
public String step1() {
return "event/creationStep1"; // Step1 view로 이동
}
// Step1에서 Step2로 이동
@PostMapping("/newevent/step2")
public String step2(@ModelAttribute("eventForm") EventForm formData,
BindingResult result) { // session에 저장된 EventForm 객체 접근
new EventFormStep1Validator().validate(formData, result);
if (result.hasErrors()) // 검증 오류 발생 시
return "event/creationStep1"; // Step1 view로 이동
return "event/creationStep2"; // Step2 view로 이동
}
// Step3에서 Step2로 되돌아옴
@GetMapping("/newevent/step2")
public String step2FromStep3(@ModelAttribute("eventForm") EventForm formData) {
return "event/creationStep2"; // Step2 view로 이동
}
// Step2에서 Step3로 이동
@PostMapping("/newevent/step3")
public String step3(@ModelAttribute("eventForm") EventForm formData,
BindingResult result) { // session에 저장된 EventForm 객체 접근
ValidationUtils.rejectIfEmpty(result, "target", "required");
if (result.hasErrors()) // 검증 오류 발생 시
return "event/creationStep2"; // Step2 view로 이동
return "event/creationStep3"; // Step3 view로 이동
}
// Step3에서 Step4로 이동
@PostMapping("/newevent/done")
public String done(@ModelAttribute("eventForm") EventForm formData,
SessionStatus sessionStatus) {
// formData 처리 …
sessionStatus.setComplete(); // session에서 객체 삭제
return "event/creationDone"; // Step4 view로 이동
}
}
@SessionAttributes를 통해 세션을 생성하고
session을 적용시킬 command객체를 생성시킨다.
마지막 스텝에서 setComplete()를 통해 종료시킨다.
'공부기록 > 스프링' 카테고리의 다른 글
스프링 JPA(Java Persistence API) (1) (0) | 2023.05.24 |
---|---|
스프링 view 구현 (jsp) (0) | 2023.05.23 |
Spring MVC(2) - Form처리 (0) | 2023.05.22 |
Spring MVC(1) - DispatcherServlet, Handler mapping, Controller (0) | 2023.04.25 |
스프링의 DI (0) | 2023.04.20 |