상세 컨텐츠

본문 제목

스프링 세션영역 @SessionScope session

Spring

by shika 2022. 4. 3. 23:29

본문

스프링에서 @SessionScope가 헷갈려서 정리를 해본다.

 

먼저 자바클래스에 이렇게 설정을 해준다

//프로젝트 작업시 사용할 bean을 정의하는 클래스
@Configuration
public class RootAppContext {
	//설정 이외의 Bean들
	//데이터나 관리 목적의 Bean은 여기에다가 저장해서 사용한다.
	@Bean("loginUserBean")
	@SessionScope
	public UserBean loginUserBean() {
		return new UserBean();
	}
}

UserBean 객체는 loginUserBean이라는 이름을 가지고

세션영역에 저장이 된다.

 

애매한게 @SessionScope를 사용하면 세션영역에 저장이 되는거같은데

언제 저장이 되는것일까?

 

바로 정답은 @SessionScope가 붙어져있던 빈이 주입되는 시점이다.

 

이제 컨트롤러에서 주입하고 사용하는 것을 봐보자.

@Controller
public class HomeController {
	
	@Resource(name = "loginUserBean")
	private UserBean loginUserBean;
	
	@RequestMapping(value ="/", method = RequestMethod.GET)
	public String home() {
		System.out.println(loginUserBean);
		return "redirect:/main";
	}
}

이렇게 컨트롤러가 되어있다면

@Resource를 통해서 loginUserBean이 주입될 것이다.

이때 바로 세션의 영역의 시작된다.

 

그래서 바로 밑 메소드인 

@RequestMapping(value ="/", method = RequestMethod.GET)
public String home() 을 보면

syso이 있는데 

콘솔에도 

이렇게 정상적으로 찍히게 된다.

 

아 그리고 주의 할 점은

이렇게 주입이 되어도 바로 jsp에서 사용할 수 있는것은 아니다.

jsp에서 ${}을 통해 출력을 진행하면 아무값도 나오게 되지 않을 것이다

 

왜냐하면

SessionScope를 통해서 Bean이 세션 영역에 담기기만 한 것이지

modelAttribute등을 통해서 jsp와 연결된 것은 아니기 때문이다.

 

그래서 이제 jsp에서 사용을 하려면

model.addAttribute 등을 통해서 전달을 해주어야 하고

 

그제서야 ${}를 사용시에 화면에서도 출력이 가능 할 것이다.

관련글 더보기

댓글 영역