Transcript lecture-06

쿠키와 세션
JSP & Servlet
Contents
 학습목표
 셋 이상의 화면으로 구성된 웹 애플리케이션을 작성 할 때에는 JSP 페이
지나 서블릿 클래스들이 서로 데이터를 주고 받도록 만들어야 할 필요가
있다. 이 장에서는 이럴 때 필요한 쿠키와 세션 기술에 대해 알아보자.
내 용
 쿠키와 세션
 쿠키 기술
 세션 기술 / HttpSession
2/51
1. 쿠키와 세션 (1)
 세션(Session) - 정의
 클라이언트의 연속적인 요청 또는 그 요청에 대한 서비스 기간
• 예: 홈쇼핑 사이트에서의 로그인과 로그아웃
 일련의 웹 컴포넌트들이 클라이언트의 연속적인 요청에 의해 실행하면서 클라이언트와
의 연결 상태를 유지시키는 개념
• HTTP 프로토콜은 비연결지향(Connection-less) 프로토콜
 웹 서버는 한 클라이언트의 세션 상태를 유지하기 위한 메커니즘이 요구됨
• 쿠키(cookie) 기술 – 세션 관련 정보를 클라이언트에 저장
• 세션(Session) 기술 – 세션 관련 정보를 웹 서버에 저장
3/50
1. 쿠키와 세션 (2)
 쿠키(Cookie) 기술
 쿠키 (Cookie) – 웹 서버와 클라이언트가 주고받는 작은 데이터 조각
 웹 서버가 웹 브라우저로 쿠키(데이터)를 보냈다가 웹 서버 쪽으로 다시 되돌려 받는 방
법을 통해 세션 상태를 유지
 첫 번째 웹 컴포넌트는 웹 브라우저로 HTML 문서를 보낼 때 전달한 데이터를 함께 보
내며, 웹 브라우저는 그 데이터를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때
URL과 함께 웹 서버로 보낸다.
[그림 4-3] 쿠키 기술을 이용한 웹 컴포넌트 간의 데이터 전달
4/50
1. 쿠키와 세션 (3)
 세션(Session) 기술
 웹 서버에서 별도의 세션 객체에 세션 상태 정보를 저장 및 관리
• 동일한 세션에서 실행되는 웹 컴포넌트 간에 세션 객체를 공유하여 데이터 전달
 첫 번째 웹 컴포넌트는 웹 서버 쪽에 데이터를 저장해 놓고, 그 데이터를 읽기 위해 필요
한 세션 아이디만 웹 브라우저로 보낸다.
 웹 브라우저는 아이디를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 웹 서버로
보내며, 그 아이디를 이용하면 저장된 데이터를 찾을 수 있다
[그림 4-4] 세션 기술을 이용한 웹 컴포넌트 간의 데이터 전달
5/50
2. 쿠키 기술 (1)
 쿠키 생성 및 저장 (1)
 쿠키 데이터를 웹 브라우저 쪽에 저장하기 위해 해야 하는 두 가지 일
• 첫째 : Cookie 클래스의 객체를 생성한다.
• 둘째 : response 클래스의 addCookie() 메서드를 호출하여 응답 메시지에 쿠키를 추가한다.
 쿠키 객체 생성
• Cookie 클래스는 javax.servlet.http 패키지에 속하며, 이 클래스의 객체를 만들 때는 쿠키의 이름
과 값을 파라미터로 넘겨줘야 한다.
• 파라미터는 모두 String 타입이므로, 쿠키의 값이 수치일 경우는 문자 데이터로 만들어서 넘겨줘
야 한다.
Cookie cookie = new Cookie( “AGE ”, “26 ”);
쿠키 이름
쿠키
값
6/50
2. 쿠키 기술 (2)
 쿠키 생성 및 저장 (2)
 쿠키 추가
• Response 클래스의 addCookie() 메서드는 웹 브라우저로 쿠키를 보내는 기능을 한다.
• 응답 메시지에 쿠키를 저장하기 위해 response 객체에 대해 addCookie() 메소드를 호출, Cookie
객체를 파라미터로 넘겨줘야 한다.
response.addCookie(cookie);
Cookie 객체
• addCookie() 메서드를 통해 웹 브라우저로 전송된 쿠키를 실제로 저장하는 일은 웹 브라우저가
하도록 되어 있다.
 웹 브라우저는 쿠키를 저장할 때 쿠키를 보낸 웹 서버의 주소도 함께 저장해 놓는다.
7/50
2. 쿠키 기술 (3)
 쿠키 생성 및 저장 (3)
 웹 브라우저 쪽에 쿠키 데이터를 저장하는 JSP 페이지
[예제4-1] 쿠키 데이터를 저장하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<%
response.addCookie(new Cookie( “NAME ”, “John ”));
response.addCookie(new Cookie( “GENDER ”, “Male ”));
response.addCookie(new Cookie( “AGE ”, “15 ”));
%>
<HTML>
<HEAD><TITLE>쿠키 데이터 저장하기</TITLE></HEAD>
<BODY>
쿠키 데이터가 저장되었습니다.<BR><BR>
</BODY>
</HTML>
[그림 4-5] 예제 4-1의 실행 결과
8/50
2. 쿠키 기술 (4)
 쿠키 생성 및 저장 (4)
 쿠키 데이터를 저장된 응답 메시지
• 교제 pp.202 HTTP 응답 메시지 참조
9/50
2. 쿠키 기술 (5)
 쿠키 조회 (1)
 웹 브라우저는 웹 서버로 요청을 보낼 때 마다 URL에 포함된 웹 서버의 주소에 해당하
는 모든 쿠키를 찾아서 웹 서버로 함께 보낸다.
 서블릿(또는 JSP)는 웹 브라우저가 보내온 요청 메시지로 부터 쿠키 데이터를 읽어와 세
션 상태 정보를 인식하고 처리하도록 한다.
 Request 객체에 대해 getCookies() 메서드를 이용하여 쿠키 데이터를 조회할 수 있다.
 getCookies() 메서드는 웹 브라우저가 보낸 모든 쿠키를 Cookie 배열로 만들어서 반환
하기 때문에 다음과 같은 Cookie 배열 변수에 반환값을 받아야 한다.
Cookie cookies[] = request.getCookies();
웹 브라우저가 보낸 모든 쿠키를
Cookie 배열로 만들어서 리턴하는
메서드
10/50
2. 쿠키 기술 (6)
 쿠키 조회 (2)
 쿠키 이름 조회 - Cookie 객체에 대해 getName()메서드를 호출하여 조회
String name = cookies[i].getName();
쿠키 이름을 가져오는 메
서드
 쿠키 값 조회 - 원하는 이름의 Cookie 객체를 찾은 다음에는 그 객체에 대해 getValue()
메서드를 호출해서 쿠키 값을 조회
String value = cookie[i].getValue();
쿠키 값을 가져오는 메서
드
11/50
2. 쿠키 기술 (7)
 쿠키 조회 (3) - 예제
[예제4-2] 쿠키 데이터를 읽는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<% Cookie[] cookies = request.getCookies(); %>
<HTML>
<HEAD><TITLE>쿠키 데이터 읽기</TITLE></HEAD>
<BODY>
이름: <%= getCookieValue(cookies, “NAME ”) %> <BR>
성별: <%= getCookieValue(cookies, “GENDER ”) %> <BR>
나이: <%= getCookieValue(cookies, “AGE ”) %>
</BODY>
</HTML>
<%!
private String getCookieValue(Cookie[] cookies, String name) {
String value = null;
if (cookies == null)
return null;
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name))
return cookie.getValue();
}
return null;
}
%>>
12/50
2. 쿠키 기술 (8)
 쿠키 조회 (4) - 예제
앞의 예제와 연속하여 실행하는 경우
웹 브라우저를 종료한 후에
서블릿을 요청한 경우
[그림 4-6] 예제 4-2의 실행 결과(1)
[그림 4-7] 예제 4-2의 실행 결과(2)
13/50
2. 쿠키 기술 (9)
 쿠키 수정 (1)
 웹 브라우저에 저장되어 있는 쿠키의 값을 수정 하기 위해서는 새로운 쿠키를 저장할
때와 마찬가지로 수정된 값을 가진 Cookie 객체를 생성하여 addCookie() 메서드로 넘겨
주면 된다.
[예제4-3] 쿠키 데이터의 값을 수정하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<% response.addCookie(new Cookie( “AGE ”, “16 ”)); %>
<HTML>
<HEAD><TITLE>쿠키 데이터 수정하기</TITLE></HEAD>
<BODY>
AGE 쿠키에 새로운 값이 저장되었습니다.<BR><BR>
</BODY>
</HTML>
ModifyCookie.jsp
14/50
2. 쿠키 기술 (10)
 쿠키 수정 (2)
[그림 4-9] 예제 4-3의 실행 결과를 확인하는 방법
15/50
2. 쿠키 기술 (11)
 쿠키 삭제 (1)
 쿠키 기술에서 데이터를 삭제하기 위해서는 쿠키의 남은 수명을 0으로 설정하는 방법을
사용해야 한다.
 쿠키의 수명을 설정하기 위해서는 addCookie() 메서드를 호출하기 전에 Cookie 객체에
대해 setMaxAge() 메서드를 호출하면 된다.
• 초단위의 값을 넘겨줘야 하므로, 1시간 후에 쿠키가 지워지도록 만들려면 다음과 같은 값을 넘겨
줘야 한다.
cookie.setMaxAge(3600);
쿠키의 최대 수명(초
단위)
• setMaxAge() 메서드에 0이나 마이너스 값을 넘겨줄 수도 있다.
cookie.setMaxAge(0);
쿠키를 바로 삭제하도
록
만드는 값
cookie.setMaxAge(-1);
웹 브라우저가 끝날 때
쿠키가 삭제되도록 만드는
값
16/50
2. 쿠키 기술 (12)
 쿠키 삭제 (2)
 Cookie 객체에 대해 setMaxAge() 메서드 호출에 의해 설정된 쿠키 수명 값은 쿠키 데이
터의 ‘Expires’ 옵션으로 설정된다.
• ‘Expires=Wdy, DD-Mon-YY HH:MM:SS GMT’
• 예: “Set-Cookie: BLOOD_TYPE=O; Expires=Fri, 09-Jul-2010 12:36:09 GMT”
17/50
2. 쿠키 기술 (13)
 쿠키 삭제 (2) - 예제
[예제4-4] 쿠키를 삭제하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<%
Cookie cookie = new Cookie( “GENDER ”, ””);
cookie.setMaxAge(0);
response.addCookie(cookie);
%>
<HTML>
<HEAD><TITLE>쿠키 삭제하기</TITLE></HEAD>
<BODY>
GENDER 쿠키가 삭제되었습니다.
</BODY>
</HTML>
• 웹 애플리케이션 디렉터리에 DeleteGookie.jsp라는 이름으로 저장한다.
18/50
2. 쿠키 기술 (14)
 쿠키 삭제 (3) - 예제
[그림 4-10] 예제 4-4의 실행 결과를 확인하는 방법
19/50
2. 쿠키 기술 (15)
 쿠키 옵션 설정 – “Path” 옵션 (1)
 Path 옵션은 쿠키가 특정 경로명을 갖는 URL에 대한 요청에만 전송하도록 설정
• 웹 브라우저는 웹 서버로 URL을 보낼 때 웹 서버에 속하는 모든 쿠키를 함께 보내는 것이 기본적
인 동작이지만, addCookie() 메서드를 호출하기 전에 Cookie 객체에 대해 setPath() 메서드를 통
해 path 옵션을 설정하여 쿠키의 전송 범위를 한정시킬 수 있다.
 setPath() 메서드에는 웹 애플리케이션 디렉터리를 기준으로 한 URL 경로명을 파라미터
로 넘겨줘야 한다.
cookie.setPath( “/brain04/sub1/ ”);
쿠키를 전송할 URL 경
로명
 setPath() 메서드에 넘겨주는 URL 경로명은 반드시 ‘/’로 시작해야 하고 마지막도 ‘/’로
끝내는 것이 좋다.
20/50
2. 쿠키 기술 (16)
 쿠키 옵션 설정 – “Path” 옵션 (2)
[예제4-5] URL 경로명을 지정한 쿠키를 저장하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<%
Cookie cookie = new Cookie( “JOB ”, ”programmer ”);
cookie.setPath( “/brain04/sub1/ ”);
response.addCookie(cookie);
%>
<HTML>
<HEAD><TITLE>쿠키 데이터 저장하기</TITLE></HEAD>
<BODY>
JOB 쿠키가 저장되었습니다. <BR><BR>
</BODY>
</HTML>
21/50
2. 쿠키 기술 (17)
 쿠키 옵션 설정 – “Path” 옵션 (3)
[예제4-6] JOB 쿠키의 값을 출력하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<% Cookie[] cookies = request.getCookies(); %>
<HTML>
<HEAD><TITLE>쿠키 데이터 읽기</TITLE></HEAD>
<BODY>
JOB: <%= getCookieValue(cookies, “JOB ”) %> <BR>
</BODY>
</HTML>
<%!
private String getCookieValue(Cookie[] cookies, String name) {
String value = null;
if (cookies == null)
return null;
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name))
return cookie.getValue();
}
return null;
}
%>
22/50
2. 쿠키 기술 (18)
 쿠키 옵션 설정 – “Path” 옵션 (4)
 sub1 디렉터리에 있는 JSP 페이지는 [예제 4-5]가 저장한 JOB 쿠키를 받을 수 있지만,
sub2 디렉터리에 있는 JSP 페이지는 받을 수 없다.
[그림 4-12] 예제 4-5의 실행 결과
23/50
2. 쿠키 기술 (19)
 쿠키 옵션 설정 – “Domain” 옵션 (1)
 쿠기의 ‘Domain’ 옵션은 쿠키가 같은 도메인의 여러 웹 서버로 전송이 가능하도록 함
 웹 서버가 보낸 쿠키를 다른 웹 서버가 받도록 하기 위해서는 addCookie() 메서드를 호
출하기 전에 Cookie 객체에 대해 setDomain() 메서드를 호출하여 도메인 옵션을 설정하
도록 한다.
cookie.setDomain( “.hanb.co.kr ”);
쿠키를 받을 도메
인
[그림 4-13] 도메인이 지정된 쿠키가 전송되는 범위
24/50
2. 쿠키 기술 (20)
 쿠키 옵션 설정 – “Domain” 옵션 (2)
 다음 두 예제는 setDomain() 메서드의 사용 예
[예제4-7] 도메인을 지정한 쿠키를 저장하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<%
Cookie cookie = new Cookie( “LOGIN_ID ”, ”lion2010 ”);
cookie.setDomain( “.hanb.co.kr ”);
response.addCookie(cookie);
%>
<HTML>
<HEAD><TITLE>쿠키 데이터 저장하기</TITLE></HEAD>
<BODY>
LOGIN_ID 쿠키가 저장되었습니다.
</BODY>
</HTML>
25/50
2. 쿠키 기술 (21)
 쿠키 옵션 설정 – “Domain” 옵션 (3)
[예제4-8] LOGIN_ID 쿠키의 값을 출력하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<% Cookie[] cookies = request.getCookies(); %>
<HTML>
<HEAD><TITLE>쿠키 데이터 읽기</TITLE></HEAD>
<BODY>
LOGIN_ID: <%= getCookieValue(cookies, “LOGIN_ID ”) %>
</BODY>
</HTML>
<%!
private String getCookieValue(Cookie[] cookies, String name) {
String value = null;
if (cookies == null)
return null;
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name))
return cookie.getValue();
}
return null;
}
%>
26/50
2. 쿠키 기술 (22)
 쿠키 옵션 설정 – “Domain” 옵션 (4)
 앞의 두 JSP 페이지는 같은 도메인에 속하는 서로 다른 웹 서버에 설치해야 한다.
 [예제 4-7]을 한 쪽 웹 서버에 StoreIDCookie.jsp라는 이름으로 저장하고, [예제 4-8]을
다른 쪽 웹 서버에 ReadIDCookie.jsp라는 이름으로 저장한 후 실행하면 다음과 같은 결
과가 나온다.
①첫 번째 웹 서버에 설치한 [예제 47]의URL을 입력하세요.
② 두 번째 웹 서버에 설치한 [예제 48]의
URL을 입력하세요
[그림 4-15] 예제 4-7, 4-8의 실행 결과
27/50
3. 세션 기술 (1)
 세션 동작 방식 (1)
28/50
3. 세션 기술 (2)
 세션 동작 방식 (2)
29/50
3. 세션 기술 (3)
 세션 동작 방식 (3)
30/50
3. 세션 기술 (4)
 세션 동작 방식 (4)
31/50
3. 세션 기술 (5)
 세션 ID (1)
 컨테이너는 클라이언트를 어떻게 식별하는가?
 세션 ID(Session ID)
• 클라이언트별로 유일한 세션 ID(Session ID)를 부여하여 식별
• 클라이언트의 처음 요청이 들어오면 세션 ID를 생성하여 응답 메시지로 전달
32/50
3. 세션 기술 (6)
 세션 ID (2)
 세션 ID(Session ID)
• 클라이언트는 두번째 요청부터 세션 ID를 요청 전송 시에 웹 서버에 보내고, 웹 서버에서는 세션
ID가 일치하는 세션을 찾아 요청과 연결한다.
33/50
3. 세션 기술 (7)
 세션 ID (3)
 세션 ID 공유 방법 – 쿠키(JSESSIONID) 사용
34/50
3. 세션 기술 (8)
 세션 ID (4)
 세션 ID 공유 방법 – 쿠키(JSESSIONID) 사용
• 세션 기술에서는 웹 브라우저로 세션 ID를 보낼 때 쿠키 형태로 만들어서 전송
• 쿠키 이름은 JSESSIONID
[그림 4-23] 쿠키 형태로 전송되는 세션 아이디
35/50
3. 세션 기술 (9)
 세션 ID (5)
 세션 ID 공유 방법 – URL 재작성 방법
• 클라이언트가 쿠키를 지원하지 않을 경우
36/50
3. 세션 기술 (10)
 세션 객체 생성 (1)
 서블릿 클래스에서 세션 객체를 접근하기 위해 Request 객체에 대해 getSession() 메서
드를 호출
• getSession() 메서드는 세션 정보를 포함하는 javax.servlet.http.HttpSession 타입의 객체를 반환
HttpSession session = request.getSession();
세션 객체를 접근하는 메서
드
 getSession() 메소드 동작에 유의
• 세션 객체 생성 및 세션 ID 쿠키와 관련된 모든 작업은 컨테이너가 수행
• 요청 메시지에 세션 ID 쿠키가 없으면 새로운 세션 객체를 생성하고 그 객체를 반환
 새로운 세션 ID를 생성하고 Response에 세션 ID 쿠키까지 설정
• 요청 메시지에 세션 ID 쿠키가 있으면 세션 ID와 일치하는 세션 객체가 검색하여 반환
 만약 세션 ID와 일치하는 세션 객체가 없는 경우 새롭게 세션 객체를 생성
37/50
3. 세션 기술 (11)
 세션 객체 생성 (2)
 새롭게 생성된 세션 객체의 식별
:
HttpSession session = request.getSession();
if (session.isNew()) {
out.println(“This is a new session”);
} else {
out.println(“Welcome Back!”);
}
:
 이미 생성되어 있는 세션에 대한 접근
:
HttpSession session = request.getSession(false);
if (session == null) {
out.println(“no session was available… making one….”);
session = request.getSession();
} else {
out.println(“There was a session”);
}
:
38/50
3. 세션 기술 (12)
 세션 객체의 속성 설정 (1)
 세션 객체에는 속성(Attribute)를 설정할 수 있다.
• 세션 객체를 접근하는 웹 컴포넌트 사이에 데이터를 공유 가능
session.setAttribute( “ID ”, “lee77 ”);
속성 이
름
속성 값
• getAttribute() 메서드를 이용하여 속성 조회
 주의: getAttribute() 메서드의 리턴 타입은 java.lang.Object 이므로 데이터 값을 본래의 타입
으로 사용하려면 원하는 클래스로 캐스트 연산을 해야 한다.
String str = (String) session.getAttribute( “ID ”);
캐스트 연산
자
속성 이름
39/50
3. 세션 기술 (13)
 세션 객체의 속성 설정 (2)
 세션 객체에서의 속성 제거
• removeAttribute() 메서드를 이용하여 속성 제거
session.removeAttribute( “ID ”);
속성 이
름
40/50
3. 세션 기술 (14)
 세션 객체 제거 (1)
 세션의 비활성화  세션 제거
41/50
3. 세션 기술 (15)
 세션 객체 제거 (2)
 세션의 비활성화  세션 제거
42/50
3. 세션 기술 (16)
 세션 객체 제거 (3)
 세션이 종료되는 세가지 경우
• 세션 타임 아웃 – 설정된 허용 비활성화 시간을 넘긴 경우
• 서블릿에 의한 종료 – 세션 객체에 대해 invalidate() 메소드 호출
• 웹 애플리케이션의 종료 – 문제 발생으로 다운되거나 언디플로이(undeploy) 되는 경우
 세션 타임아웃 설정 방법
43/50
3. 세션 기술 (17)
 세션 클래스(HttpSession) - 주요 메소드
44/50
3. 세션 기술 (18)
 세션 기술 – 예제 (1)
음식 이름을 입력하면
동물 이름 입력 화면이 나타
나고
동물 이름을 입력하면
결과 화면이 나타납니다.
[그림 4-17] 성격 테스트 웹 애플리케이션의 화면 설계
45/50
3. 세션 기술 (19)
 세션 기술 – 예제 (2)
http://localhost:8080/brain04/ptest/Food.html
HTML 문
서
[그림 4-17]의 첫 번째 화면의
URL
http://localhost:8080/brain04/ptest/animal
서블릿 클
래스
[그림 4-17]의 두 번째 화면의
URL
http://localhost:8080/brain04/ptest/result
[그림 4-17]의 세 번째 화면의
URL
46/50
3. 세션 기술 (20)
 세션 기술 – 예제 (3)
[예제4-9] 성격 테스트의 첫 번째 화면을 출력하는 HTML 문서
<HTML>
<HEAD>
<META http-equiv= “Content-Type ” content= “text/html;charset=euc-kr ”>
<TITLE>성격 테스트</TITLE>
</HEAD>
<BODY>
<H3>좋아하는 음식은?</H3>
<FORM ACTION=animal>
<INPUT TYPE=TEXTFIELD NAME=FOOD>
<INPUT TYPE=SUBMIT VALUE= ‘확인 ’>
</FORM>
</BODY>
</HTML>
47/50
3. 세션 기술 (21)
 세션 기술 – 예제 (4)
[예제4-10] 성격 테스트의 두 번째 화면을 출력하는 서블릿 클래스
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class AnimalServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String food = request.getParameter( “FOOD ”);
HttpSession session = request.getSession();
session.setAttribute( “FOOD ”, food);
response.setContentType( “text/html;charset=euc-kr ”);
PrintWriter out = response.getWriter();
out.println( “<HTML> ”);
out.println( “<HEAD><TITLE>성격 테스트</TITLE></HEAD> ”);
out.println( “<BODY> ”);
out.println( “<H3>좋아하는 동물은?</H3> ”);
out.println( “<FORM ACTION=result> ”);
out.println( “<INPUT TYPE=TEXTFIELD NAME=ANIMAL> ”);
out.println( “<INPUT TYPE=SUBMIT VALUE= ’확인 ’> ”);
out.println( “</FORM> ”);
out.println( “</BODY> ”);
out.println( “</HTML> ”);
}
}
48/50
3. 세션 기술 (22)
 세션 기술 – 예제 (5)
[예제4-11] 성격 테스트의 결과를 출력하는 서블릿 클래스
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class ResultServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
String food = (String) session.getAttribute( “FOOD ”);
String animal = request.getParameter( “ANIMAL ”);
session.invalidate();
response.setContentType( “text/html;charset=euc-kr ”);
PrintWriter out = response.getWriter();
out.println( “<HEAD><TITLE>성격 테스트</TITLE></HEAD> ”);
out.println( “<BODY> ”);
out.println( “<H3>성격 테스트</H3> ”);
out.printf( “당신은 %s와 %s를 좋아하는 성격입니다. ”, food, animal);
out.println( “</BODY> ”);
out.println( “</HTML> ”);
}
}
49/50
3. 세션 기술 (22)
 세션 기술 – 예제 (6)
[그림 4-19] 예제 4-9 예제 4-10, 예제 4-11의 실행 결과
50/50
3. 세션 기술 (23)
 URL 재작성 메커니즘 (1)
 쿠키를 사용할 수 없는 웹 환경에서는 URL 뒤에 세션 아이디를 붙여서 전송하는 방법을
사용하면 된다.
[그림 4-24] URL과 함께 전송되는 세션 아이디
 본래의 URL을 가지고 새로운 URL을 만드는 방법이기 때문에 URL 재작성(URL
rewriting) 메커니즘이라고 부른다.
본래의
URL
http://localhost:8080/brain04/subscribe/Agreement.jsp; jsessionid=8088A1AAA61960F0B113E331A1460089
URL 재작성으로 추가된
부분
51/50
3. 세션 기술 (24)
 URL 재작성 메커니즘 (2)
 URL 재작성을 하기 위해서는 URL 재작성 기능을 제공하는response 객체의
encodeURL() 메서드를 사용하면 된다.
String url =
response.encodeURL(“http://localhost:8080/brain04/subscribe/Agreement.jsp ”);
본래의 URL
 encodeURL() 메서드에는 현재의 웹 컴포넌트를 기준으로 한 상대적인 URL 경로명을 파
라미터로 넘겨 줄 수도 있다.
String url = response.encodeURL( “common/Greetings.jsp ”);
상대적인 URL 경로
명
 이 메서드는 URL 경로명 뒤에 세미콜론(;)과 “jessionid=세션_아이디”를 붙여서 반환
52/50
3. 세션 기술 (25)
 URL 재작성 메커니즘 (3)
 encodeURL() 메서드에는 슬래시(/)로 시작하는 URL 경로명을 넘겨줄 수도 있는데, 이런
값은 웹 서버 내에서의 URL 경로명을 해석된다.
String url = response.encodeURL( “/brain04/subscribe/Result.jsp ”);
웹 서버 내에서의 URL 경
로명
[예제4-16] 세션 데이터를 저장하는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<%
session.setAttribute( “NAME ”, “김지영 ”);
session.setAttribute( “AGE ”, new Integer(21));
session.setAttribute( “GENDER ”, “여 ”);
%>
<HTML>
<HEAD><TITLE>세션 데이터를 저장하는 JSP 페이지</TITLE></HEAD>
<BODY>
세션 데이터가 저장되었습니다. <BR><BR>
<A href=<%= response.encodeURL(“ReadSessionData.jsp ”) %>>세션 데이터 읽기</A>
</BODY>
</HTML>
53/50
3. 세션 기술 (26)
 URL 재작성 메커니즘 (4)
[예제4-17] 세션 데이터를 읽는 JSP 페이지
<%@page contentType= “text/html; charset=euc-kr ”%>
<HTML>
<HEAD><TITLE>세션 데이터를 읽는 JSP 페이지</TITLE></HEAD>
<BODY>
이름: <%= session.getAttribute( “NAME ”) %> <BR>
나이: <%= session.getAttribute( “AGE ”) %> <BR>
성별: <%= session.getAttribute( “GENDER ”) %>
</BODY>
</HTML>
 이 두 예제를 brain04 웹 애플리케이션 디렉터리에 WriteSessionData.jsp와
ReadSessionData.jsp이름으로 저장한다.
54/50
3. 세션 기술 (27)
 URL 재작성 메커니즘 (5)
[그림 4-25] 웹 브라우저의 쿠키 차단 방법
55/50
3. 세션 기술 (28)
 URL 재작성 메커니즘 (6)
①[예제 4-16]의 URL을 입력하
세요.
②이 링크를 클릭하면 결과 화면이 나타납
니다.
[그림 4-26] 예제 4-16, 예제 4-17의 실행 결과
56/50
JSP & Servlet