스프링 Session

728x90

spring 리다이렉트 and 포워드.png

Session

  • 브라우저가 최초로 서버에 요청을 하게 되면 브라우저당 하나씩 메모리 공간을 서버에게 할당하게 된다.
  • 이 메모리 영역은 브라우저당 하나씩 지정되며 요청이 새롭게 발생하더라도 같은 메모리 공간을 사용하게 된다.
  • 이러한 공간을 session이라고 부른다.
  • 이 영역은 브라우저를 종료 할 때 까지 서버에서 사용할 수 있다.

SessionScope

  • 브라우저가 최초의 요청을 발생 시키고 브라우저를 닫을 때 까지를 SessionsScope라고 부른다.
  • session 영역에 저장되어 있는 데이터나 객체를 자유롭게 사용 할 수 있다.
public String test(HttpServletRequest request){
	HttpSession session = request.getSession();
	session.setAttribute("name","이름");
}

public String test1(HttpServletRequest request){
	HttpSession session = request.getSession();
	String name = (String)session.getAttribute("name");
}
<h1>name : ${sessionScope.name} </h1>

바로 스프링으로 주입받기

 

public String test(HttpSession session){
	String name = (String)session.getAttribute("name");
}

redirect 든 forward 든 브라우저가 바뀌지 않는 한 세션 저장하면 계속 유지

 

bean 저장해서 사용 (MemberDTO)

public String test(HttpSession session){
	MemberDTO member = new MemberDTO();
	member.setName("홍길동");
	member.setId("hong");
	
	session.setAttribute("member",member1);
}
<h1>name : ${sessionScope.member.name} </h1>
<h1>id : ${sessionScope.member.id} </h1>

@SessionAttribute

  • Session 영역에 저장되어 있는 객체를 사용하고자 할 때 메서드의 매개변수로 @SessionAttribute를 설정 하면 Session 영역에 저장되어 있는 Bean을 주입 받을 수 있습니다.

이미 저장된 객체를 받아서 사용할 경우만 가능

public String test(@SessionAttribute("member") MemberDTO member){
	//MemberDTO member = new MemberDTO();
		//session.setAttribute("member",member1);
}

@SessionAttributes

  • @ModelAttribute를 통해 주입 받는 Bean은 자동으로 Request 영역에 저장되고 Request 영역으로 부터 주입을 받게 된다.
  • 이 때, @ModelAttribute를 통해 주입받는 Bean을 @SessionAttributes로 지정해 놓으면 request 영역이 아닌 session 영역에 저장되고 session 영역으로 부터 주입을 받을 수 있다.
  • 주의 할 점은 @ModelAttribute 를 활용하여 객체를 생성해 반환하는 메서드를 반드시 작성해 주어야 한다.
@Controller
@SessionAttributes("sessionMember")
public class TestController{

	@ModelAttribute("sessionMember")
	public MemberDTO sessionMember(){
	return new MemberDTO;	
}
public String test(@ModelAttribute("sessionMember") MemberDTO member){
		sessionMember.setName("홍길동");
		sessionMember.setId("hong");
		//sessionMember.getName();
	}
}
반응형

'Back-End > Spring(Boot)' 카테고리의 다른 글

스프링 Application Scope  (0) 2021.03.06
스프링 Session 빈 주입  (0) 2021.03.06
스프링 Request Scope 빈 주입  (0) 2021.03.06
스프링 RequestScope  (0) 2021.03.06
스프링 Redirect / Forward  (0) 2021.03.06