스프링 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
myoskin