SlideShare a Scribd company logo
Servlets & JSP
6장
What is Session
A. 서버가 클라이언트를 기억한다.
세션이 없다 == 안면인식 장애
핵심은 클라이언트에 맞는
세션을 어떻게 찾아주는가.
일종의 맵이라고 생각하면 됩니다.
Cookie
ID# 97
'쿠키'라는 이름은 그림 동화 '헨젤과 그레텔'에서 가져온
것이다.
우리는 세션으로 돌아가고 싶어요.
고객님을 어떻게 기억하
는가
요청을 받은 스레드는, 요청 정보를 고객의 세션에 저장
스레드는 요청에 대해 응답하면서, 쿠키
를 줌
아까 그 고객님이 다시 요청할때 아까 그 쿠키를 같이 줌
스레드는 세션ID를 보고 그 세션에서 고객의 정보를 뽑아씀
사실 그 쿠키에는 세션 ID가 적혀있음
Cookie의 전달
• HTTP Request -> Cookie 헤더
• HttpSession session = request.getSession(); ->
있다면 걔를 쓰고 없으면 새로 만들어요.
• HTTP Response - > Set Cookie 헤더
-> sessionid=0AAB23947 이런식으로
• 쿠키는 웹 브라우저의 캐시에 저장.
쿠키 알러지?
클라이언트가 쿠키를 싫어하면? -> URL 재작성
리다이렉트 기억남?
잠깐 복습)
요청을 받아서 다른 애가 처리해주어야 할 필요가 있을 때
-> 리다이렉트 혹은 디스패치를 한다고 했었음,
URL 재작성:
URL을 다시 만들때, 세션ID를 URL 뒤에 붙여서 세션 ID를 전
달한다.
그러니까 URL +
ID# 97
이렇게 재작성합니다.
response.encodeURL( "xxxxx.jsp ")
와 같이 하면 자동으로 xxxxx.jsp 뒤에 session id정보가 붙는다.
함수가 하나 더 있는데.. . response.encodeRedirectURL() 이다
...
다른페이지로 redirect 할때 사용하는 함수이다.
-> 근데 이러려면, 동적인 페이지에서만 가능하겠죠?
세션 관리
session.
- getCreationTime(): 세션 생성된 시간 리턴
- getLastAccessedTime(): 이 세션의 마지막 요청 시간 리턴
- setMaxInactiveInterval(): 요청을 기다릴 최대 시간 설정
- getMaxInactiveInterval(): 요청을 기다릴 최대 시간 리턴
- invalidate(): 세션을 종료
세션관리
session.
- getCreationTime(): 세션 생성된 시간 리턴
- getLastAccessedTime(): 이 세션의 마지막 요청 시간 리턴
- setMaxInactiveInterval(): 요청을 기다릴 최대 시간 설정
- getMaxInactiveInterval(): 요청을 기다릴 최대 시간 리턴
- invalidate(): 세션을 종료
DD에서
<session-timeout>123/*분*/<session-timeout>
부록 - 쿠키 사용법
• 쿠키는 세션 id 말고 다른것(user id)도 저장할 수 있
습니다
Cookie cookie = new Cookie(“username”, name);
cookie.setMaxAge(30*60);
response.addCookie(cookie);
세션 이동
• 한 어플리케이션이 여러 VM에서 돌아간다면,
클라이언트의 요청이 다른 VM으로 가서 세션을
이동할 필요가 있다.
• 세션 옮기기: VM1에서 비활성화하고 VM2에서 활
성화
VM1 VM2
이동 방법은?
1. 직렬화 : 객체를 전달할 때… 오브젝트를 그냥 전달하면???
-> 참조가 객체에 들어있어서 전달이 제대로 안돼
-> 연속된 바이너리 형태로 객체를 저장해서, 전달할 수 있도록
한다.
2. HttpSessionActivationListener로 객체를 구현한다.
-> sessionDidActivate(): 필드를 원래대로 돌려놓기
-> sessionWillPassivate(): 직렬화안된 필드 읽어들이기
옮겨질 때를 알수 있으니까 준비할 수 있다.
이렇게 세션에 무슨 일이
일어날때, 리스너를 통해 어
떤 코드를 실행시킬 수 있음
그래서 Listener를 씁니다.
어떤 리스너가 있는지 정도는 알아
둡시다.
1. HttpSessionListener: 활성화된 세션들의 뒤를 캐고 싶을 때
2. HttpSessionActivationLister: 세션이 다른 VM으로 옮겨갈 때
3. HttpSessionBindingListener: 속성클래스가 다른 세션에
바인딩되거나 제거될 때(자신이 속
성)
4. HttpSessionAttributeListener: 속성을 세션에 추가, 제거 , 대체
될 때(이건 그냥 리스너)

More Related Content

PDF
14 virtual memory
PDF
PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)
PDF
MongoDB 모바일 게임 개발에 사용
PDF
Anyframe Enterprise JAVA Center-cut Framework
PPT
Android volley library
PPTX
Zoo keeper 소개
PDF
HeadFisrt Servlet&JSP Chapter 5
 
PPTX
자바기초에서 JSP, 스프링, MyBatis까지_ 자바개발자를 꿈꾸는 당신에게..
14 virtual memory
PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)
MongoDB 모바일 게임 개발에 사용
Anyframe Enterprise JAVA Center-cut Framework
Android volley library
Zoo keeper 소개
HeadFisrt Servlet&JSP Chapter 5
 
자바기초에서 JSP, 스프링, MyBatis까지_ 자바개발자를 꿈꾸는 당신에게..

Viewers also liked (20)

PPTX
Servlet&jsp 1장
PPTX
잘 알려지지 않은 이클립스 팁
PDF
Eclipse web
PPTX
뭔지 모르지만 발표
PDF
우리는 꿈을 꾸는 개발자들.
PPTX
HeadFisrt Servlet&JSP Chapter 3
 
PPTX
HeadFisrt Servlet&JSP Chapter 1
 
PPTX
메이븐파헤치기(김우용)
PDF
진민완 포트폴리오
PPTX
Rainbow Project Web App
PDF
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
PPTX
Maven의 이해
PDF
웹 개발 스터디 01 - HTML, CSS
PDF
자바 서블릿과 세션 (Java Servlet, Session)
PDF
JSP 빠르게 시작하기
PDF
자바모델 클래스에 날개를달자_롬복(Lombok)
PDF
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
PDF
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
PDF
JPA 상속관계 매핑(@MappedSuperclass, @Inheritance,@DiscriminatorValue,@Discriminato...
PPTX
Google App Engine의 이해
Servlet&jsp 1장
잘 알려지지 않은 이클립스 팁
Eclipse web
뭔지 모르지만 발표
우리는 꿈을 꾸는 개발자들.
HeadFisrt Servlet&JSP Chapter 3
 
HeadFisrt Servlet&JSP Chapter 1
 
메이븐파헤치기(김우용)
진민완 포트폴리오
Rainbow Project Web App
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
Maven의 이해
웹 개발 스터디 01 - HTML, CSS
자바 서블릿과 세션 (Java Servlet, Session)
JSP 빠르게 시작하기
자바모델 클래스에 날개를달자_롬복(Lombok)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
JPA 상속관계 매핑(@MappedSuperclass, @Inheritance,@DiscriminatorValue,@Discriminato...
Google App Engine의 이해
Ad

HeadFisrt Servlet&JSP Chapter 6

  • 2. What is Session A. 서버가 클라이언트를 기억한다. 세션이 없다 == 안면인식 장애 핵심은 클라이언트에 맞는 세션을 어떻게 찾아주는가. 일종의 맵이라고 생각하면 됩니다.
  • 3. Cookie ID# 97 '쿠키'라는 이름은 그림 동화 '헨젤과 그레텔'에서 가져온 것이다. 우리는 세션으로 돌아가고 싶어요.
  • 4. 고객님을 어떻게 기억하 는가 요청을 받은 스레드는, 요청 정보를 고객의 세션에 저장 스레드는 요청에 대해 응답하면서, 쿠키 를 줌 아까 그 고객님이 다시 요청할때 아까 그 쿠키를 같이 줌 스레드는 세션ID를 보고 그 세션에서 고객의 정보를 뽑아씀 사실 그 쿠키에는 세션 ID가 적혀있음
  • 5. Cookie의 전달 • HTTP Request -> Cookie 헤더 • HttpSession session = request.getSession(); -> 있다면 걔를 쓰고 없으면 새로 만들어요. • HTTP Response - > Set Cookie 헤더 -> sessionid=0AAB23947 이런식으로 • 쿠키는 웹 브라우저의 캐시에 저장.
  • 6. 쿠키 알러지? 클라이언트가 쿠키를 싫어하면? -> URL 재작성
  • 7. 리다이렉트 기억남? 잠깐 복습) 요청을 받아서 다른 애가 처리해주어야 할 필요가 있을 때 -> 리다이렉트 혹은 디스패치를 한다고 했었음, URL 재작성: URL을 다시 만들때, 세션ID를 URL 뒤에 붙여서 세션 ID를 전 달한다. 그러니까 URL + ID# 97
  • 8. 이렇게 재작성합니다. response.encodeURL( "xxxxx.jsp ") 와 같이 하면 자동으로 xxxxx.jsp 뒤에 session id정보가 붙는다. 함수가 하나 더 있는데.. . response.encodeRedirectURL() 이다 ... 다른페이지로 redirect 할때 사용하는 함수이다. -> 근데 이러려면, 동적인 페이지에서만 가능하겠죠?
  • 9. 세션 관리 session. - getCreationTime(): 세션 생성된 시간 리턴 - getLastAccessedTime(): 이 세션의 마지막 요청 시간 리턴 - setMaxInactiveInterval(): 요청을 기다릴 최대 시간 설정 - getMaxInactiveInterval(): 요청을 기다릴 최대 시간 리턴 - invalidate(): 세션을 종료
  • 10. 세션관리 session. - getCreationTime(): 세션 생성된 시간 리턴 - getLastAccessedTime(): 이 세션의 마지막 요청 시간 리턴 - setMaxInactiveInterval(): 요청을 기다릴 최대 시간 설정 - getMaxInactiveInterval(): 요청을 기다릴 최대 시간 리턴 - invalidate(): 세션을 종료 DD에서 <session-timeout>123/*분*/<session-timeout>
  • 11. 부록 - 쿠키 사용법 • 쿠키는 세션 id 말고 다른것(user id)도 저장할 수 있 습니다 Cookie cookie = new Cookie(“username”, name); cookie.setMaxAge(30*60); response.addCookie(cookie);
  • 12. 세션 이동 • 한 어플리케이션이 여러 VM에서 돌아간다면, 클라이언트의 요청이 다른 VM으로 가서 세션을 이동할 필요가 있다. • 세션 옮기기: VM1에서 비활성화하고 VM2에서 활 성화 VM1 VM2
  • 13. 이동 방법은? 1. 직렬화 : 객체를 전달할 때… 오브젝트를 그냥 전달하면??? -> 참조가 객체에 들어있어서 전달이 제대로 안돼 -> 연속된 바이너리 형태로 객체를 저장해서, 전달할 수 있도록 한다. 2. HttpSessionActivationListener로 객체를 구현한다. -> sessionDidActivate(): 필드를 원래대로 돌려놓기 -> sessionWillPassivate(): 직렬화안된 필드 읽어들이기 옮겨질 때를 알수 있으니까 준비할 수 있다.
  • 14. 이렇게 세션에 무슨 일이 일어날때, 리스너를 통해 어 떤 코드를 실행시킬 수 있음 그래서 Listener를 씁니다.
  • 15. 어떤 리스너가 있는지 정도는 알아 둡시다. 1. HttpSessionListener: 활성화된 세션들의 뒤를 캐고 싶을 때 2. HttpSessionActivationLister: 세션이 다른 VM으로 옮겨갈 때 3. HttpSessionBindingListener: 속성클래스가 다른 세션에 바인딩되거나 제거될 때(자신이 속 성) 4. HttpSessionAttributeListener: 속성을 세션에 추가, 제거 , 대체 될 때(이건 그냥 리스너)