쿠키와세션 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