뇌를 자극하는 JSP & Servlet 슬라이드

Similar documents
Data Provisioning Services for mobile clients

서블릿의라이프사이클 뇌를자극하는 JSP & Servlet

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

뇌를 자극하는 JSP & Servlet 슬라이드

뇌를 자극하는 JSP & Servlet 슬라이드

JAVA Bean & Session - Cookie

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

2장 변수와 프로시저 작성하기

14-Servlet

Microsoft PowerPoint - aj-lecture6.ppt [호환 모드]

JSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른

뇌를 자극하는 JSP & Servlet 슬라이드

<param-value> 파라미터의값 </param-value> </init-param> </servlet> <servlet-mapping> <url-pattern>/ 매핑문자열 </url-pattern> </servlet-mapping> - 위의예에서 ServletC

chapter6.doc

04장

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

2009년 상반기 사업계획

JavaGeneralProgramming.PDF

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

Microsoft PowerPoint - 웹프로그래밍_ ppt [호환 모드]

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

PowerPoint Presentation

본 강의에 들어가기 전

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F31C2F7BDC32E >

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

PowerPoint Presentation

J2EE Concepts

PowerPoint Presentation

PowerPoint 프레젠테이션

<4D F736F F F696E74202D203130C0E52EBFA1B7AF20C3B3B8AE205BC8A3C8AF20B8F0B5E55D>

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

Data Provisioning Services for mobile clients

중간고사

Microsoft PowerPoint - 4강.pptx

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint - Java7.pptx

Microsoft Word - php09.doc

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

뇌를 자극하는 JSP & Servlet 슬라이드

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint - Chap6_cmpl

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft PowerPoint - 03-TCP Programming.ppt

JAVA PROGRAMMING 실습 08.다형성

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Data Provisioning Services for mobile clients

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 09. 예외처리

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

게시판 스팸 실시간 차단 시스템

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

쉽게 풀어쓴 C 프로그래밍

뇌를 자극하는 JSP & Servlet 슬라이드

0. 들어가기 전

웹 개발자를 위한 서블릿/JSP

Secure Programming Lecture1 : Introduction

Design Issues

chap 5: Trees

뇌를 자극하는 JSP & Servlet 슬라이드

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

17장 클래스와 메소드

쉽게 풀어쓴 C 프로그래밊

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

Microsoft PowerPoint - 7강.pptx

PowerPoint 프레젠테이션

쉽게

PowerPoint Template

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

뇌를 자극하는 JSP & Servlet 슬라이드

Windows 8에서 BioStar 1 설치하기

Microsoft PowerPoint - aj-lecture7.ppt [호환 모드]

어댑터뷰

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

rmi_박준용_final.PDF

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

JUNIT 실습및발표

Microsoft PowerPoint - CSharp-10-예외처리


gnu-lee-oop-kor-lec06-3-chap7

3ÆÄÆ®-14

PowerPoint 프레젠테이션

Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx

PowerPoint Presentation

PowerPoint Presentation

Data Provisioning Services for mobile clients

뇌를 자극하는 JSP & Servlet 슬라이드

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :

JVM 메모리구조

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

<C4FBC1EEB7CE20C1A4B8AEC7D5BDC3B4D95FC1A4B4E42E687770>

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Transcription:

쿠키와세션 JSP & Servlet

2/51 Contents 학습목표 셋이상의화면으로구성된웹애플리케이션을작성할때에는 JSP 페이지나서블릿클래스들이서로데이터를주고받도록만들어야할필요가있다. 이장에서는이럴때필요한쿠키와세션기술에대해알아보자. 내용 쿠키와세션 쿠키기술 세션기술 / HttpSession

3/50 1. 쿠키와세션 (1) 세션 (Session) - 정의 클라이언트의연속적인요청또는그요청에대한서비스기간 예 : 홈쇼핑사이트에서의로그인과로그아웃 일련의웹컴포넌트들이클라이언트의연속적인요청에의해실행하면서클라이언트와의연결상태를유지시키는개념 HTTP 프로토콜은비연결지향 (Connection-less) 프로토콜 웹서버는한클라이언트의세션상태를유지하기위한메커니즘이요구됨 쿠키 (cookie) 기술 세션관련정보를클라이언트에저장 세션 (Session) 기술 세션관련정보를웹서버에저장

4/50 1. 쿠키와세션 (2) 쿠키 (Cookie) 기술 쿠키 (Cookie) 웹서버와클라이언트가주고받는작은데이터조각 웹서버가웹브라우저로쿠키 ( 데이터 ) 를보냈다가웹서버쪽으로다시되돌려받는방법을통해세션상태를유지 첫번째웹컴포넌트는웹브라우저로 HTML 문서를보낼때전달한데이터를함께보내며, 웹브라우저는그데이터를저장해두었다가두번째웹컴포넌트를호출할때 URL과함께웹서버로보낸다. [ 그림 4-3] 쿠키기술을이용한웹컴포넌트간의데이터전달

5/50 1. 쿠키와세션 (3) 세션 (Session) 기술 웹서버에서별도의세션객체에세션상태정보를저장및관리 동일한세션에서실행되는웹컴포넌트간에세션객체를공유하여데이터전달 첫번째웹컴포넌트는웹서버쪽에데이터를저장해놓고, 그데이터를읽기위해필요한세션아이디만웹브라우저로보낸다. 웹브라우저는아이디를저장해두었다가두번째웹컴포넌트를호출할때웹서버로보내며, 그아이디를이용하면저장된데이터를찾을수있다 [ 그림 4-4] 세션기술을이용한웹컴포넌트간의데이터전달

6/50 2. 쿠키기술 (1) 쿠키생성및저장 (1) 쿠키데이터를웹브라우저쪽에저장하기위해해야하는두가지일 첫째 : Cookie 클래스의객체를생성한다. 둘째 : response 클래스의 addcookie() 메서드를호출하여응답메시지에쿠키를추가한다. 쿠키객체생성 Cookie 클래스는 javax.servlet.http 패키지에속하며, 이클래스의객체를만들때는쿠키의이름과값을파라미터로넘겨줘야한다. 파라미터는모두 String 타입이므로, 쿠키의값이수치일경우는문자데이터로만들어서넘겨줘야한다. Cookie cookie = new Cookie( AGE, 26 ); 쿠키이름 쿠키값

7/50 2. 쿠키기술 (2) 쿠키생성및저장 (2) 쿠키추가 Response 클래스의 addcookie() 메서드는웹브라우저로쿠키를보내는기능을한다. 응답메시지에쿠키를저장하기위해 response 객체에대해 addcookie() 메소드를호출, Cookie 객체를파라미터로넘겨줘야한다. response.addcookie(cookie); Cookie 객체 addcookie() 메서드를통해웹브라우저로전송된쿠키를실제로저장하는일은웹브라우저가 하도록되어있다. 웹브라우저는쿠키를저장할때쿠키를보낸웹서버의주소도함께저장해놓는다.

8/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 의실행결과

9/50 2. 쿠키기술 (4) 쿠키생성및저장 (4) 쿠키데이터를저장된응답메시지 교제 pp.202 HTTP 응답메시지참조

10/50 2. 쿠키기술 (5) 쿠키조회 (1) 웹브라우저는웹서버로요청을보낼때마다 URL에포함된웹서버의주소에해당하는모든쿠키를찾아서웹서버로함께보낸다. 서블릿 ( 또는 JSP) 는웹브라우저가보내온요청메시지로부터쿠키데이터를읽어와세션상태정보를인식하고처리하도록한다. Request 객체에대해 getcookies() 메서드를이용하여쿠키데이터를조회할수있다. getcookies() 메서드는웹브라우저가보낸모든쿠키를 Cookie 배열로만들어서반환하기때문에다음과같은 Cookie 배열변수에반환값을받아야한다. Cookie cookies[] = request.getcookies(); 웹브라우저가보낸모든쿠키를 Cookie 배열로만들어서리턴하는메서드

11/50 2. 쿠키기술 (6) 쿠키조회 (2) 쿠키이름조회 - Cookie 객체에대해 getname() 메서드를호출하여조회 String name = cookies[i].getname(); 쿠키이름을가져오는메서드 쿠키값조회 - 원하는이름의 Cookie 객체를찾은다음에는그객체에대해 getvalue() 메서드를호출해서쿠키값을조회 String value = cookie[i].getvalue(); 쿠키값을가져오는메서드

12/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; } %>>

13/50 2. 쿠키기술 (8) 쿠키조회 (4) - 예제 앞의예제와연속하여실행하는경우 웹브라우저를종료한후에서블릿을요청한경우 [ 그림 4-6] 예제 4-2 의실행결과 (1) [ 그림 4-7] 예제 4-2 의실행결과 (2)

14/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

15/50 2. 쿠키기술 (10) 쿠키수정 (2) [ 그림 4-9] 예제 4-3 의실행결과를확인하는방법

16/50 2. 쿠키기술 (11) 쿠키삭제 (1) 쿠키기술에서데이터를삭제하기위해서는쿠키의남은수명을 0으로설정하는방법을사용해야한다. 쿠키의수명을설정하기위해서는 addcookie() 메서드를호출하기전에 Cookie 객체에대해 setmaxage() 메서드를호출하면된다. 초단위의값을넘겨줘야하므로, 1시간후에쿠키가지워지도록만들려면다음과같은값을넘겨줘야한다. cookie.setmaxage(3600); 쿠키의최대수명 ( 초단위 ) setmaxage() 메서드에 0 이나마이너스값을넘겨줄수도있다. cookie.setmaxage(0); 쿠키를바로삭제하도록만드는값 cookie.setmaxage(-1); 웹브라우저가끝날때쿠키가삭제되도록만드는값

17/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

18/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 라는이름으로저장한다.

19/50 2. 쿠키기술 (14) 쿠키삭제 (3) - 예제 [ 그림 4-10] 예제 4-4 의실행결과를확인하는방법

2. 쿠키기술 (15) 쿠키옵션설정 Path 옵션 (1) Path 옵션은쿠키가특정경로명을갖는 URL에대한요청에만전송하도록설정 웹브라우저는웹서버로 URL을보낼때웹서버에속하는모든쿠키를함께보내는것이기본적인동작이지만, addcookie() 메서드를호출하기전에 Cookie 객체에대해 setpath() 메서드를통해 path 옵션을설정하여쿠키의전송범위를한정시킬수있다. setpath() 메서드에는웹애플리케이션디렉터리를기준으로한 URL 경로명을파라미터로넘겨줘야한다. cookie.setpath( /brain04/sub1/ ); 쿠키를전송할 URL 경로명 setpath() 메서드에넘겨주는 URL 경로명은반드시 / 로시작해야하고마지막도 / 로 끝내는것이좋다. 20/50

21/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>

22/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; } %>

23/50 2. 쿠키기술 (18) 쿠키옵션설정 Path 옵션 (4) sub1 디렉터리에있는 JSP 페이지는 [ 예제 4-5] 가저장한 JOB 쿠키를받을수있지만, sub2 디렉터리에있는 JSP 페이지는받을수없다. [ 그림 4-12] 예제 4-5 의실행결과

2. 쿠키기술 (19) 쿠키옵션설정 Domain 옵션 (1) 쿠기의 Domain 옵션은쿠키가같은도메인의여러웹서버로전송이가능하도록함 웹서버가보낸쿠키를다른웹서버가받도록하기위해서는 addcookie() 메서드를호출하기전에 Cookie 객체에대해 setdomain() 메서드를호출하여도메인옵션을설정하 도록한다. cookie.setdomain(.hanb.co.kr ); 쿠키를받을도메인 [ 그림 4-13] 도메인이지정된쿠키가전송되는범위 24/50

25/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>

26/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; } %>

27/50 2. 쿠키기술 (22) 쿠키옵션설정 Domain 옵션 (4) 앞의두 JSP 페이지는같은도메인에속하는서로다른웹서버에설치해야한다. [ 예제 4-7] 을한쪽웹서버에 StoreIDCookie.jsp라는이름으로저장하고, [ 예제 4-8] 을다른쪽웹서버에 ReadIDCookie.jsp라는이름으로저장한후실행하면다음과같은결과가나온다. 1 첫번째웹서버에설치한 [ 예제 4-7] 의 URL 을입력하세요. 2 두번째웹서버에설치한 [ 예제 4-8] 의 URL 을입력하세요 [ 그림 4-15] 예제 4-7, 4-8 의실행결과

28/50 3. 세션기술 (1) 세션동작방식 (1)

29/50 3. 세션기술 (2) 세션동작방식 (2)

30/50 3. 세션기술 (3) 세션동작방식 (3)

31/50 3. 세션기술 (4) 세션동작방식 (4)

32/50 3. 세션기술 (5) 세션 ID (1) 컨테이너는클라이언트를어떻게식별하는가? 세션 ID(Session ID) 클라이언트별로유일한세션 ID(Session ID) 를부여하여식별 클라이언트의처음요청이들어오면세션 ID를생성하여응답메시지로전달

3. 세션기술 (6) 세션 ID (2) 세션 ID(Session ID) 클라이언트는두번째요청부터세션 ID를요청전송시에웹서버에보내고, 웹서버에서는세션 ID가일치하는세션을찾아요청과연결한다. 33/50

34/50 3. 세션기술 (7) 세션 ID (3) 세션 ID 공유방법 쿠키 (JSESSIONID) 사용

35/50 3. 세션기술 (8) 세션 ID (4) 세션 ID 공유방법 쿠키 (JSESSIONID) 사용 세션기술에서는웹브라우저로세션 ID를보낼때쿠키형태로만들어서전송 쿠키이름은 JSESSIONID [ 그림 4-23] 쿠키형태로전송되는세션아이디

36/50 3. 세션기술 (9) 세션 ID (5) 세션 ID 공유방법 URL 재작성방법 클라이언트가쿠키를지원하지않을경우

37/50 3. 세션기술 (10) 세션객체생성 (1) 서블릿클래스에서세션객체를접근하기위해 Request 객체에대해 getsession() 메서드를호출 getsession() 메서드는세션정보를포함하는 javax.servlet.http.httpsession 타입의객체를반환 HttpSession session = request.getsession(); 세션객체를접근하는메서드 getsession() 메소드동작에유의 세션객체생성및세션 ID 쿠키와관련된모든작업은컨테이너가수행 요청메시지에세션 ID 쿠키가없으면새로운세션객체를생성하고그객체를반환 새로운세션 ID를생성하고 Response에세션 ID 쿠키까지설정 요청메시지에세션 ID 쿠키가있으면세션 ID와일치하는세션객체가검색하여반환 만약세션 ID와일치하는세션객체가없는경우새롭게세션객체를생성

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

39/50 3. 세션기술 (12) 세션객체의속성설정 (1) 세션객체에는속성 (Attribute) 를설정할수있다. 세션객체를접근하는웹컴포넌트사이에데이터를공유가능 session.setattribute( ID, lee77 ); 속성이름 속성값 getattribute() 메서드를이용하여속성조회 주의 : getattribute() 메서드의리턴타입은 java.lang.object 이므로데이터값을본래의타입 으로사용하려면원하는클래스로캐스트연산을해야한다. String str = (String) session.getattribute( ID ); 캐스트연산자 속성이름

40/50 3. 세션기술 (13) 세션객체의속성설정 (2) 세션객체에서의속성제거 removeattribute() 메서드를이용하여속성제거 session.removeattribute( ID ); 속성이름

41/50 3. 세션기술 (14) 세션객체제거 (1) 세션의비활성화 세션제거

42/50 3. 세션기술 (15) 세션객체제거 (2) 세션의비활성화 세션제거

43/50 3. 세션기술 (16) 세션객체제거 (3) 세션이종료되는세가지경우 세션타임아웃 설정된허용비활성화시간을넘긴경우 서블릿에의한종료 세션객체에대해 invalidate() 메소드호출 웹애플리케이션의종료 문제발생으로다운되거나언디플로이 (undeploy) 되는경우 세션타임아웃설정방법

44/50 3. 세션기술 (17) 세션클래스 (HttpSession) - 주요메소드

45/50 3. 세션기술 (18) 세션기술 예제 (1) 음식이름을입력하면동물이름입력화면이나타나고 동물이름을입력하면결과화면이나타납니다. [ 그림 4-17] 성격테스트웹애플리케이션의화면설계

46/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

47/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>

48/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> ); } }

49/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> ); } }

50/50 3. 세션기술 (22) 세션기술 예제 (6) [ 그림 4-19] 예제 4-9 예제 4-10, 예제 4-11 의실행결과

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

52/50 3. 세션기술 (24) URL 재작성메커니즘 (2) URL 재작성을하기위해서는 URL 재작성기능을제공하는 response 객체의 encodeurl() 메서드를사용하면된다. String url = response.encodeurl( http://localhost:8080/brain04/subscribe/agreement.jsp ); encodeurl() 메서드에는현재의웹컴포넌트를기준으로한상대적인 URL 경로명을파 라미터로넘겨줄수도있다. 본래의 URL String url = response.encodeurl( common/greetings.jsp ); 상대적인 URL 경로명 이메서드는 URL 경로명뒤에세미콜론 (;) 과 jessionid= 세션 _ 아이디 를붙여서반환

53/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>

54/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 이름으로저장한다.

55/50 3. 세션기술 (27) URL 재작성메커니즘 (5) [ 그림 4-25] 웹브라우저의쿠키차단방법

56/50 3. 세션기술 (28) URL 재작성메커니즘 (6) 1[ 예제 4-16] 의 URL 을입력하세요. 2 이링크를클릭하면결과화면이나타납니다. [ 그림 4-26] 예제 4-16, 예제 4-17 의실행결과

JSP & Servlet