headfisrt servlet&jsp chapter 6
Post on 05-Aug-2015
57 Views
Preview:
TRANSCRIPT
Servlets & JSP
6 장
What is SessionA. 서버가 클라이언트를 기억한다 .
세션이 없다 == 안면인식 장애
핵심은 클라이언트에 맞는 세션을 어떻게 찾아주는가 .
일종의 맵이라고 생각하면 됩니다 .
CookieID# 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: 속성을 세션에 추가 , 제거 , 대체될 때 ( 이건 그냥 리스너 )
top related