headfisrt servlet&jsp chapter 6

15
Servlets & JSP 6장

Upload: j-b

Post on 05-Aug-2015

57 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: HeadFisrt Servlet&JSP Chapter 6

Servlets & JSP

6 장

Page 2: HeadFisrt Servlet&JSP Chapter 6

What is SessionA. 서버가 클라이언트를 기억한다 .

세션이 없다 == 안면인식 장애

핵심은 클라이언트에 맞는 세션을 어떻게 찾아주는가 .

일종의 맵이라고 생각하면 됩니다 .

Page 3: HeadFisrt Servlet&JSP Chapter 6

CookieID# 97

' 쿠키 ' 라는 이름은 그림 동화 ' 헨젤과 그레텔 ' 에서 가져온 것이다 .

우리는 세션으로 돌아가고 싶어요 .

Page 4: HeadFisrt Servlet&JSP Chapter 6

고객님을 어떻게 기억하는가

요청을 받은 스레드는 , 요청 정보를 고객의 세션에 저장

스레드는 요청에 대해 응답하면서 , 쿠키를 줌

아까 그 고객님이 다시 요청할때 아까 그 쿠키를 같이 줌

스레드는 세션 ID 를 보고 그 세션에서 고객의 정보를 뽑아씀

사실 그 쿠키에는 세션 ID 가 적혀있음

Page 5: HeadFisrt Servlet&JSP Chapter 6

Cookie 의 전달• HTTP Request -> Cookie 헤더

• HttpSession session = request.getSession(); -> 있다면 걔를 쓰고 없으면 새로 만들어요 .

• HTTP Response - > Set Cookie 헤더-> sessionid=0AAB23947 이런식으로

• 쿠키는 웹 브라우저의 캐시에 저장 .

Page 6: HeadFisrt Servlet&JSP Chapter 6

쿠키 알러지 ?

클라이언트가 쿠키를 싫어하면 ? -> URL 재작성

Page 7: HeadFisrt Servlet&JSP Chapter 6

리다이렉트 기억남 ?

잠깐 복습 )요청을 받아서 다른 애가 처리해주어야 할 필요가 있을 때-> 리다이렉트 혹은 디스패치를 한다고 했었음 ,

URL 재작성 : URL 을 다시 만들때 , 세션 ID 를 URL 뒤에 붙여서 세션 ID 를 전달한다 .

그러니까 URL + ID# 97

Page 8: HeadFisrt Servlet&JSP Chapter 6

이렇게 재작성합니다 .

response.encodeURL( "xxxxx.jsp ")

와 같이 하면 자동으로 xxxxx.jsp 뒤에 session id 정보가 붙는다 .

함수가 하나 더 있는데 .. . response.encodeRedirectURL() 이다 ...

다른페이지로 redirect 할때 사용하는 함수이다 .

-> 근데 이러려면 , 동적인 페이지에서만 가능하겠죠 ?

Page 9: HeadFisrt Servlet&JSP Chapter 6

세션 관리

session.

- getCreationTime(): 세션 생성된 시간 리턴- getLastAccessedTime(): 이 세션의 마지막 요청 시간 리턴- setMaxInactiveInterval(): 요청을 기다릴 최대 시간 설정- getMaxInactiveInterval(): 요청을 기다릴 최대 시간 리턴- invalidate(): 세션을 종료

Page 10: HeadFisrt Servlet&JSP Chapter 6

세션관리session.

- getCreationTime(): 세션 생성된 시간 리턴- getLastAccessedTime(): 이 세션의 마지막 요청 시간 리턴- setMaxInactiveInterval(): 요청을 기다릴 최대 시간 설정- getMaxInactiveInterval(): 요청을 기다릴 최대 시간 리턴- invalidate(): 세션을 종료

DD 에서<session-timeout>123/* 분 */<session-timeout>

Page 11: HeadFisrt Servlet&JSP Chapter 6

부록 - 쿠키 사용법

• 쿠키는 세션 id 말고 다른것 (user id) 도 저장할 수 있습니다

Cookie cookie = new Cookie(“username”, name);cookie.setMaxAge(30*60);response.addCookie(cookie);

Page 12: HeadFisrt Servlet&JSP Chapter 6

세션 이동

• 한 어플리케이션이 여러 VM 에서 돌아간다면 , 클라이언트의 요청이 다른 VM 으로 가서 세션을 이동할 필요가 있다 .

• 세션 옮기기 : VM1 에서 비활성화하고 VM2 에서 활성화

VM1 VM2

Page 13: HeadFisrt Servlet&JSP Chapter 6

이동 방법은 ?

1. 직렬화 : 객체를 전달할 때… 오브젝트를 그냥 전달하면 ??? -> 참조가 객체에 들어있어서 전달이 제대로 안돼-> 연속된 바이너리 형태로 객체를 저장해서 , 전달할 수 있도록

한다 .

2. HttpSessionActivationListener 로 객체를 구현한다 . -> sessionDidActivate(): 필드를 원래대로 돌려놓기 -> sessionWillPassivate(): 직렬화안된 필드 읽어들이기옮겨질 때를 알수 있으니까 준비할 수 있다 .

Page 14: HeadFisrt Servlet&JSP Chapter 6

이렇게 세션에 무슨 일이 일어날때 , 리스너를 통해

어떤 코드를 실행시킬 수 있음

그래서 Listener 를 씁니다 .

Page 15: HeadFisrt Servlet&JSP Chapter 6

어떤 리스너가 있는지 정도는 알아 둡시다 .

1. HttpSessionListener: 활성화된 세션들의 뒤를 캐고 싶을 때

2. HttpSessionActivationLister: 세션이 다른 VM 으로 옮겨갈 때

3. HttpSessionBindingListener: 속성클래스가 다른 세션에 바인딩되거나

제거될 때 ( 자신이 속성 )

4. HttpSessionAttributeListener: 속성을 세션에 추가 , 제거 , 대체될 때 ( 이건 그냥 리스너 )