Upload
xuefang-jun
View
92
Download
7
Embed Size (px)
DESCRIPTION
6. 쿠키와 세션. 학습목표 셋 이상의 화면으로 구성된 웹 애플리케이션을 작성 할 때에는 JSP 페이지나 서블릿 클래스들이 서로 데이터를 주고 받도록 만들어야 할 필요가 있다 . 이 장에서는 이럴 때 필요한 쿠키와 세션 기술에 대해 알아보자 . 내 용 쿠키와 세션 쿠키 기술 세션 기술 / HttpSession. 1. 쿠키와 세션 (1). 세션 (Session) - 정의 클라이언트의 연속적인 요청 또는 그 요청에 대한 서비스 기간 예 : 홈쇼핑 사이트에서의 로그인과 로그아웃 - PowerPoint PPT Presentation
Citation preview
JSP & Servlet
쿠키와 세션
2/51
Contents
학습목표
셋 이상의 화면으로 구성된 웹 애플리케이션을 작성 할 때에는 JSP 페이지나
서블릿 클래스들이 서로 데이터를 주고 받도록 만들어야 할 필요가 있다 . 이
장에서는 이럴 때 필요한 쿠키와 세션 기술에 대해 알아보자 .
내 용 쿠키와 세션 쿠키 기술 세션 기술 / HttpSession
3/50
세션 (Session) - 정의 클라이언트의 연속적인 요청 또는 그 요청에 대한 서비스 기간
• 예 : 홈쇼핑 사이트에서의 로그인과 로그아웃
일련의 웹 컴포넌트들이 클라이언트의 연속적인 요청에 의해 실행하면서
클라이언트와의 연결 상태를 유지시키는 개념
• HTTP 프로토콜은 비연결지향 (Connection-less) 프로토콜
웹 서버는 한 클라이언트의 세션 상태를 유지하기 위한 메커니즘이 요구됨
• 쿠키 (cookie) 기술 – 세션 관련 정보를 클라이언트에 저장
• 세션 (Session) 기술 – 세션 관련 정보를 웹 서버에 저장
1. 쿠키와 세션 (1)
4/50
쿠키 (Cookie) 기술 쿠키 (Cookie) – 웹 서버와 클라이언트가 주고받는 작은 데이터 조각
웹 서버가 웹 브라우저로 쿠키 ( 데이터 ) 를 보냈다가 웹 서버 쪽으로 다시 되돌려 받는
방법을 통해 세션 상태를 유지
첫 번째 웹 컴포넌트는 웹 브라우저로 HTML 문서를 보낼 때 전달한 데이터를 함께
보내며 , 웹 브라우저는 그 데이터를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때
URL 과 함께 웹 서버로 보낸다 .
1. 쿠키와 세션 (2)
[ 그림 4-3] 쿠키 기술을 이용한 웹 컴포넌트 간의 데이터 전달
5/50
세션 (Session) 기술 웹 서버에서 별도의 세션 객체에 세션 상태 정보를 저장 및 관리
• 동일한 세션에서 실행되는 웹 컴포넌트 간에 세션 객체를 공유하여 데이터 전달
첫 번째 웹 컴포넌트는 웹 서버 쪽에 데이터를 저장해 놓고 , 그 데이터를 읽기 위해
필요한 세션 아이디만 웹 브라우저로 보낸다 .
웹 브라우저는 아이디를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 웹 서버로
보내며 , 그 아이디를 이용하면 저장된 데이터를 찾을 수 있다
1. 쿠키와 세션 (3)
[ 그림 4-4] 세션 기술을 이용한 웹 컴포넌트 간의 데이터 전달
6/50
쿠키 생성 및 저장 (1)
쿠키 데이터를 웹 브라우저 쪽에 저장하기 위해 해야 하는 두 가지 일
• 첫째 : Cookie 클래스의 객체를 생성한다 .
• 둘째 : response 클래스의 addCookie() 메서드를 호출하여 응답 메시지에 쿠키를 추가한다 .
쿠키 객체 생성
• Cookie 클래스는 javax.servlet.http 패키지에 속하며 , 이 클래스의 객체를 만들 때는 쿠키의
이름과 값을 파라미터로 넘겨줘야 한다 .
• 파라미터는 모두 String 타입이므로 , 쿠키의 값이 수치일 경우는 문자 데이터로 만들어서
넘겨줘야 한다 .
2. 쿠키 기술 (1)
Cookie cookie = new Cookie( “AGE ”, “26 ”);
쿠키 이름 쿠키 값
7/50
쿠키 생성 및 저장 (2)
쿠키 추가
• Response 클래스의 addCookie() 메서드는 웹 브라우저로 쿠키를 보내는 기능을 한다 .
• 응답 메시지에 쿠키를 저장하기 위해 response 객체에 대해 addCookie() 메소드를 호출 ,
Cookie 객체를 파라미터로 넘겨줘야 한다 .
• addCookie() 메서드를 통해 웹 브라우저로 전송된 쿠키를 실제로 저장하는 일은 웹 브라우저가
하도록 되어 있다 .
웹 브라우저는 쿠키를 저장할 때 쿠키를 보낸 웹 서버의 주소도 함께 저장해 놓는다 .
2. 쿠키 기술 (2)
response.addCookie(cookie);
Cookie 객체
8/50
쿠키 생성 및 저장 (3)
웹 브라우저 쪽에 쿠키 데이터를 저장하는 JSP 페이지
2. 쿠키 기술 (3)
[ 예제 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 의 실행 결과
9/50
쿠키 생성 및 저장 (4)
쿠키 데이터를 저장된 응답 메시지
• 교제 pp.202 HTTP 응답 메시지 참조
2. 쿠키 기술 (4)
10/50
쿠키 조회 (1)
웹 브라우저는 웹 서버로 요청을 보낼 때 마다 URL 에 포함된 웹 서버의 주소에
해당하는 모든 쿠키를 찾아서 웹 서버로 함께 보낸다 .
서블릿 ( 또는 JSP) 는 웹 브라우저가 보내온 요청 메시지로 부터 쿠키 데이터를 읽어와
세션 상태 정보를 인식하고 처리하도록 한다 .
Request 객체에 대해 getCookies() 메서드를 이용하여 쿠키 데이터를 조회할 수 있
다 .
getCookies() 메서드는 웹 브라우저가 보낸 모든 쿠키를 Cookie 배열로 만들어서
반환하기 때문에 다음과 같은 Cookie 배열 변수에 반환값을 받아야 한다 .
2. 쿠키 기술 (5)
Cookie cookies[] = request.getCookies();
웹 브라우저가 보낸 모든 쿠키를Cookie 배열로 만들어서 리턴하는 메서드
11/50
쿠키 조회 (2)
쿠키 이름 조회 - Cookie 객체에 대해 getName() 메서드를 호출하여 조회
쿠키 값 조회 - 원하는 이름의 Cookie 객체를 찾은 다음에는 그 객체에 대해 get-
Value() 메서드를 호출해서 쿠키 값을 조회
2. 쿠키 기술 (6)
String name = cookies[i].getName();
쿠키 이름을 가져오는 메서드
String value = cookie[i].getValue();
쿠키 값을 가져오는 메서드
12/50
쿠키 조회 (3) - 예제
2. 쿠키 기술 (7)
[ 예제 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; } %>>
13/50
쿠키 조회 (4) - 예제
2. 쿠키 기술 (8)
[ 그림 4-6] 예제 4-2 의 실행 결과 (1) [ 그림 4-7] 예제 4-2 의 실행 결과 (2)
앞의 예제와 연속하여 실행하는 경우웹 브라우저를 종료한 후에
서블릿을 요청한 경우
14/50
쿠키 수정 (1)
웹 브라우저에 저장되어 있는 쿠키의 값을 수정 하기 위해서는 새로운 쿠키를 저장할
때와 마찬가지로 수정된 값을 가진 Cookie 객체를 생성하여 addCookie() 메서드로
넘겨주면 된다 .
2. 쿠키 기술 (9)
[ 예제 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
15/50
쿠키 수정 (2)
2. 쿠키 기술 (10)
[ 그림 4-9] 예제 4-3 의 실행 결과를 확인하는 방법
16/50
쿠키 삭제 (1)
쿠키 기술에서 데이터를 삭제하기 위해서는 쿠키의 남은 수명을 0 으로 설정하는 방법을
사용해야 한다 .
쿠키의 수명을 설정하기 위해서는 addCookie() 메서드를 호출하기 전에 Cookie
객체에 대해 setMaxAge() 메서드를 호출하면 된다 .
• 초단위의 값을 넘겨줘야 하므로 , 1 시간 후에 쿠키가 지워지도록 만들려면 다음과 같은 값을
넘겨줘야 한다 .
• setMaxAge() 메서드에 0 이나 마이너스 값을 넘겨줄 수도 있다 .
2. 쿠키 기술 (11)
cookie.setMaxAge(3600);
쿠키의 최대 수명 ( 초 단위 )
cookie.setMaxAge(0);
쿠키를 바로 삭제하도록만드는 값
cookie.setMaxAge(-1);
웹 브라우저가 끝날 때쿠키가 삭제되도록 만드는 값
17/50
쿠키 삭제 (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”
2. 쿠키 기술 (12)
18/50
쿠키 삭제 (2) - 예제
• 웹 애플리케이션 디렉터리에 DeleteGookie.jsp 라는 이름으로 저장한다 .
2. 쿠키 기술 (13)
[ 예제 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>
19/50
쿠키 삭제 (3) - 예제
2. 쿠키 기술 (14)
[ 그림 4-10] 예제 4-4 의 실행 결과를 확인하는 방법
20/50
쿠키 옵션 설정 – “ Path” 옵션 (1) Path 옵션은 쿠키가 특정 경로명을 갖는 URL 에 대한 요청에만 전송하도록 설정
• 웹 브라우저는 웹 서버로 URL 을 보낼 때 웹 서버에 속하는 모든 쿠키를 함께 보내는 것이 기본적인 동작이지만 , addCookie() 메서드를 호출하기 전에 Cookie 객체에 대해 setPath() 메서드를 통해 path 옵션을 설정하여 쿠키의 전송 범위를 한정시킬 수 있다 .
setPath() 메서드에는 웹 애플리케이션 디렉터리를 기준으로 한 URL 경로명을
파라미터로 넘겨줘야 한다 .
setPath() 메서드에 넘겨주는 URL 경로명은 반드시 ‘ /’ 로 시작해야 하고 마지막도
‘ /’ 로 끝내는 것이 좋다 .
2. 쿠키 기술 (15)
cookie.setPath( “/brain04/sub1/ ”);
쿠키를 전송할 URL 경로명
21/50
쿠키 옵션 설정 – “ Path” 옵션 (2)
2. 쿠키 기술 (16)
[ 예제 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>
22/50
쿠키 옵션 설정 – “ Path” 옵션 (3)
2. 쿠키 기술 (17)
[ 예제 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; } %>
23/50
쿠키 옵션 설정 – “ Path” 옵션 (4)
sub1 디렉터리에 있는 JSP 페이지는 [ 예제 4-5] 가 저장한 JOB 쿠키를 받을 수
있지만 , sub2 디렉터리에 있는 JSP 페이지는 받을 수 없다 .
2. 쿠키 기술 (18)
[ 그림 4-12] 예제 4-5 의 실행 결과
24/50
쿠키 옵션 설정 – “ Domain” 옵션 (1) 쿠기의 ‘ Domain’ 옵션은 쿠키가 같은 도메인의 여러 웹 서버로 전송이 가능하도록 함
웹 서버가 보낸 쿠키를 다른 웹 서버가 받도록 하기 위해서는 addCookie() 메서드를
호출하기 전에 Cookie 객체에 대해 setDomain() 메서드를 호출하여 도메인 옵션을
설정하도록 한다 .
2. 쿠키 기술 (19)
cookie.setDomain( “.hanb.co.kr ”);
쿠키를 받을 도메인
[ 그림 4-13] 도메인이 지정된 쿠키가 전송되는 범위
25/50
쿠키 옵션 설정 – “ Domain” 옵션 (2)
다음 두 예제는 setDomain() 메서드의 사용 예
2. 쿠키 기술 (20)
[ 예제 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>
26/50
쿠키 옵션 설정 – “ Domain” 옵션 (3)
2. 쿠키 기술 (21)
[ 예제 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; } %>
27/50
쿠키 옵션 설정 – “ Domain” 옵션 (4)
앞의 두 JSP 페이지는 같은 도메인에 속하는 서로 다른 웹 서버에 설치해야 한다 .
[ 예제 4-7] 을 한 쪽 웹 서버에 StoreIDCookie.jsp 라는 이름으로 저장하고 , [ 예제 4-8]
을 다른 쪽 웹 서버에 ReadIDCookie.jsp 라는 이름으로 저장한 후 실행하면 다음과 같은
결과가 나온다 .
2. 쿠키 기술 (22)
① 첫 번째 웹 서버에 설치한 [ 예제 4-7] 의 URL 을 입력하세요 .
② 두 번째 웹 서버에 설치한 [ 예제 4-8] 의URL 을 입력하세요
[ 그림 4-15] 예제 4-7, 4-8 의 실행 결과
28/50
세션 동작 방식 (1)
3. 세션 기술 (1)
29/50
세션 동작 방식 (2)
3. 세션 기술 (2)
30/50
세션 동작 방식 (3)
3. 세션 기술 (3)
31/50
세션 동작 방식 (4)
3. 세션 기술 (4)
32/50
세션 ID (1) 컨테이너는 클라이언트를 어떻게 식별하는가 ?
세션 ID(Session ID)• 클라이언트별로 유일한 세션 ID(Session ID) 를 부여하여 식별
• 클라이언트의 처음 요청이 들어오면 세션 ID 를 생성하여 응답 메시지로 전달
3. 세션 기술 (5)
33/50
세션 ID (2) 세션 ID(Session ID)
• 클라이언트는 두번째 요청부터 세션 ID 를 요청 전송 시에 웹 서버에 보내고 , 웹 서버에서는 세션 ID 가 일치하는 세션을 찾아 요청과 연결한다 .
3. 세션 기술 (6)
34/50
세션 ID (3) 세션 ID 공유 방법 – 쿠키 (JSESSIONID) 사용
3. 세션 기술 (7)
35/50
세션 ID (4) 세션 ID 공유 방법 – 쿠키 (JSESSIONID) 사용
• 세션 기술에서는 웹 브라우저로 세션 ID 를 보낼 때 쿠키 형태로 만들어서 전송
• 쿠키 이름은 JSESSIONID
3. 세션 기술 (8)
[ 그림 4-23] 쿠키 형태로 전송되는 세션 아이디
36/50
세션 ID (5) 세션 ID 공유 방법 – URL 재작성 방법
• 클라이언트가 쿠키를 지원하지 않을 경우
3. 세션 기술 (9)
37/50
세션 객체 생성 (1)
서블릿 클래스에서 세션 객체를 접근하기 위해 Request 객체에 대해 getSession()
메서드를 호출
• getSession() 메서드는 세션 정보를 포함하는 javax.servlet.http.HttpSession 타입의
객체를 반환
getSession() 메소드 동작에 유의
• 세션 객체 생성 및 세션 ID 쿠키와 관련된 모든 작업은 컨테이너가 수행
• 요청 메시지에 세션 ID 쿠키가 없으면 새로운 세션 객체를 생성하고 그 객체를 반환
새로운 세션 ID 를 생성하고 Response 에 세션 ID 쿠키까지 설정
• 요청 메시지에 세션 ID 쿠키가 있으면 세션 ID 와 일치하는 세션 객체가 검색하여 반환
만약 세션 ID 와 일치하는 세션 객체가 없는 경우 새롭게 세션 객체를 생성
3. 세션 기술 (10)
HttpSession session = request.getSession();세션 객체를 접근하는 메서드
38/50
세션 객체 생성 (2)
새롭게 생성된 세션 객체의 식별
이미 생성되어 있는 세션에 대한 접근
3. 세션 기술 (11)
: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”);}
:
39/50
세션 객체의 속성 설정 (1)
세션 객체에는 속성 (Attribute) 를 설정할 수 있다 .
• 세션 객체를 접근하는 웹 컴포넌트 사이에 데이터를 공유 가능
• getAttribute() 메서드를 이용하여 속성 조회
주의 : getAttribute() 메서드의 리턴 타입은 java.lang.Object 이므로 데이터 값을 본래의
타입으로 사용하려면 원하는 클래스로 캐스트 연산을 해야 한다 .
3. 세션 기술 (12)
session.setAttribute( “ID ”, “lee77 ”);
속성 이름 속성 값
String str = (String) session.getAttribute( “ID ”);
캐스트 연산자 속성 이름
40/50
세션 객체의 속성 설정 (2)
세션 객체에서의 속성 제거
• removeAttribute() 메서드를 이용하여 속성 제거
3. 세션 기술 (13)
session.removeAttribute( “ID ”);
속성 이름
41/50
세션 객체 제거 (1)
세션의 비활성화 세션 제거
3. 세션 기술 (14)
42/50
세션 객체 제거 (2)
세션의 비활성화 세션 제거
3. 세션 기술 (15)
43/50
세션 객체 제거 (3)
세션이 종료되는 세가지 경우
• 세션 타임 아웃 – 설정된 허용 비활성화 시간을 넘긴 경우
• 서블릿에 의한 종료 – 세션 객체에 대해 invalidate() 메소드 호출
• 웹 애플리케이션의 종료 – 문제 발생으로 다운되거나 언디플로이 (undeploy) 되는 경우
세션 타임아웃 설정 방법
3. 세션 기술 (16)
44/50
세션 클래스 (HttpSession) - 주요 메소드
3. 세션 기술 (17)
45/50
세션 기술 – 예제 (1)
3. 세션 기술 (18)
음식 이름을 입력하면동물 이름 입력 화면이 나타나고
동물 이름을 입력하면결과 화면이 나타납니다 .
[ 그림 4-17] 성격 테스트 웹 애플리케이션의 화면 설계
46/50
세션 기술 – 예제 (2)
3. 세션 기술 (19)
http://localhost:8080/brain04/ptest/Food.html
http://localhost:8080/brain04/ptest/animal
http://localhost:8080/brain04/ptest/result
[ 그림 4-17] 의 첫 번째 화면의 URL
[ 그림 4-17] 의 두 번째 화면의 URL
[ 그림 4-17] 의 세 번째 화면의 URL
HTML 문서
서블릿 클래스
47/50
세션 기술 – 예제 (3)
3. 세션 기술 (20)
[ 예제 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>
48/50
세션 기술 – 예제 (4)
3. 세션 기술 (21)
[ 예제 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> ”); } }
49/50
세션 기술 – 예제 (5)
3. 세션 기술 (22)
[ 예제 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> ”); }}
50/50
세션 기술 – 예제 (6)
3. 세션 기술 (22)
[ 그림 4-19] 예제 4-9 예제 4-10, 예제 4-11 의 실행 결과
51/50
URL 재작성 메커니즘 (1)
쿠키를 사용할 수 없는 웹 환경에서는 URL 뒤에 세션 아이디를 붙여서 전송하는 방법을
사용하면 된다 .
본래의 URL 을 가지고 새로운 URL 을 만드는 방법이기 때문에 URL 재작성 (URL
rewriting) 메커니즘이라고 부른다 .
3. 세션 기술 (23)
[ 그림 4-24] URL 과 함께 전송되는 세션 아이디
http://localhost:8080/brain04/subscribe/Agreement.jsp; jsessionid=8088A1AAA61960F0B113E331A1460089
본래의 URL
URL 재작성으로 추가된 부분
52/50
URL 재작성 메커니즘 (2)
URL 재작성을 하기 위해서는 URL 재작성 기능을 제공하는 response 객체의 en-
codeURL() 메서드를 사용하면 된다 .
encodeURL() 메서드에는 현재의 웹 컴포넌트를 기준으로 한 상대적인 URL 경로명을
파라미터로 넘겨 줄 수도 있다 .
이 메서드는 URL 경로명 뒤에 세미콜론 (;) 과 “ jessionid= 세션 _ 아이디”를 붙여서
반환
3. 세션 기술 (24)
String url = response.encodeURL(“http://localhost:8080/brain04/subscribe/Agreement.jsp ”);
본래의 URL
String url = response.encodeURL( “common/Greetings.jsp ”);
상대적인 URL 경로명
53/50
URL 재작성 메커니즘 (3)
encodeURL() 메서드에는 슬래시 (/) 로 시작하는 URL 경로명을 넘겨줄 수도 있는데 ,
이런 값은 웹 서버 내에서의 URL 경로명을 해석된다 .
3. 세션 기술 (25)
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>
54/50
URL 재작성 메커니즘 (4)
이 두 예제를 brain04 웹 애플리케이션 디렉터리에 WriteSessionData.jsp 와 Read-
SessionData.jsp 이름으로 저장한다 .
3. 세션 기술 (26)
[ 예제 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>
55/50
URL 재작성 메커니즘 (5)
3. 세션 기술 (27)
[ 그림 4-25] 웹 브라우저의 쿠키 차단 방법
56/50
URL 재작성 메커니즘 (6)
3. 세션 기술 (28)
[ 그림 4-26] 예제 4-16, 예제 4-17 의 실행 결과
①[ 예제 4-16] 의 URL 을 입력하세요 .
② 이 링크를 클릭하면 결과 화면이 나타납니다 .
JSP & Servlet