4 쿠키와 세션.

Slides:



Advertisements
Similar presentations
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
Advertisements

11 JSTL 사용하기.
4 서블릿의 라이프 사이클.
Spring MVC ㅇ 스프링 MVC 구성요소 설명 DispatcherServlet 클라이언트의 요청을 컨트롤러에게 전달하고
Introduction to Servlets
2 서블릿의 기초.
Internet Computing KUT Youn-Hee Han
12장. JSP에서 자바빈 활용 제12장.
7. JavaBeans 프로그래밍 JavaBeans JavaBeans 만들기 빈을 이용한 회원가입 양식 작성하기 빈 작성
12 커스텀 액션.
2 서블릿의 기초.
3장. 웹 어플리케이션과 JSP 및 Servlet의 이해 제3장.
1. JSP(Java Server Pages) 소개
9 표준 액션.
자바 서버 API와 서블릿 데이타베이스 실험실 이찬섭, 박용문.
9장. 요청 흐름제어와 모듈화 #1: <jsp:forward> 액션태그 사용
10장. 에러 처리 제10장.
JSP 내장 객체 개요 내장 객체 (참조 변수 이름) 자바 클래스 주요 역할
Internet Computing KUT Youn-Hee Han
5 익셉션 처리.
11 필터와 래퍼.
7. JavaBeans 프로그래밍 JavaBeans JavaBeans 만들기 Bean을 이용한 회원가입 양식 작성하기
Web Server와 DB 연동.
16강. 자바 빈 빈 이란? 빈 만들기 빈 관련 액션 태그(useBean, getProperty, setProperty)
1. JSP(Java Server Pages) 소개
3 JSP의 기초.
7 JSP의 기초.
8장 자바 입출력.
1강 01장. 웹과 자바.
13 설계 모델과 웹 템플릿.
6장. JSP 지시문 (Directives) 제6장.
중 간 고 사 (웹프로그래밍)
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
Chapter 07 소스코드의 취약점 분석.
Java Web Programming 4일차.
강의 보조자료 & Homework #2 - 로그인과 이미지 카운터 만들기 -
웹서버와 설치에 필요한 것 WWW ( world wide web ) TCP/IP 프로토콜을 이용하는 클라이언트/서버 환경
5. JSP의 내장객체1.
JSP Programming with a Workbook
JSP와 자바 빈즈 JSP 빈즈 구조를 이해하고 활용한다. useBean 액션 활용법을 익힌다.
JSP 내장 객체 JSP에서 기본으로 사용할 수 있는 내장 객체 종류를 알아본다. 내장 객체별 주요 기능과 메서드를 이해한다.
4. JSP의 스크립트 요소 Script 요소의 이해 선언문(Declaration) Scirptlet 표현식 주석
9강. JSP 본격적으로 살펴보기-I JSP 태그의 개념 이해 JSP 동작 원리 JSP 내부 객체
8 데이터베이스 사용하기.
12 데이터베이스 사용하기.
Cookie 와 Session.
Html(front end) & jsp(back end)
JDBC (Java Database Connectivity)
Web Socket.
BIZSIREN 실명확인서비스 개발 가이드 서울신용평가정보㈜ 신용조회부 (TEL , FAX )
HTML.
10장. 자바빈(JavaBean) 이 장에서 배울 내용 : 화면에 표시를 담당하는 JSP페이지와 실제프로그램을 처리하는 로직을 분리하는 것에 대해서 학습한다. 하나의 JSP페이지 안에 디자인부와 로직부가 혼재하게 되면 프로그램의 협업과 유지보수가 어렵다. 자바빈은 로직을.
이장에서 배울 내용 : 화면에 표시를 담당하는 JSP페이지와 실제프로그램을 처리하는 로직을 분리하는 것에 대해서 학습한다
Web Vulnerabilities 정보 보호 2008/05/31 Getroot.
CGI (Common Gateway Interface)
JSP Programming with a Workbook
상품등록 방식 비교 년 4월 23일 (주)에이치케이넷츠.
JSP문법 JSP 기본 구조를 이해한다. 지시어, 스크립트릿 JSP 액션 태그 사용법을 익힌다. 한빛미디어(주)
KTF 무선인터넷 표준 UI 2000년 4월 SK 텔레콤 귀중 CP 제공용
CGI (Common Gateway Interface)
Internet Computing KUT Youn-Hee Han
Chapter 08 : 서블릿 고급3. chapter 08 : 서블릿 고급3 학습목표 서블릿 속성과 Scope ServletContext HttpSession HttpServletRequest Filter API 요청 필터 응답 필터 url-pattern 8 가지.
커뮤니티사이트 : 새로운 기준으로의 도발.
Spring Security 2015 Web Service Computing.
JSP Expression Language
JSP 빈즈 1.JSP 빈즈? JSP와 연동을 위해 만들어진 컴포넌트 클래스를 말한다. JSP 빈즈는 컨테이너에 위치하며, 데이터 처리와 공용화된 기능을 제공하기 때문에 빈즈를 잘 활용하면 프로그램의 중복을 줄이고 좀더 원할한 유지보수가 가능한다. 물론 , 모든 JSP를.
제 11 장 자바빈즈를 이용한 JDBC 프로그래밍 학기 인터넷비즈니스과 강 환수 교수.
주요공지로 정할 글을 올립니다. 제목과 주소를 복사해둡니다
6 쿠키와 세션.
Web & Internet [10] 입문 – input 태그
Presentation transcript:

4 쿠키와 세션

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

[그림 4-3] 쿠키 기술을 이용한 웹 컴포넌트 간의 데이터 전달 1. 쿠키와 세션에 대하여 쿠키 기술은 웹 서버가 웹 브라우저로 데이터를 보냈다가 웹 서버 쪽으로 다시 되돌려 받는 방법을 사용한다. 첫 번째 웹 컴포넌트는 웹 브라우저로 HTML 문서를 보낼 때 전달한 데이터를 함께 보 내며, 웹 브라우저는 그 데이터를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 URL과 함께 웹 서버로 보낸다. [그림 4-3] 쿠키 기술을 이용한 웹 컴포넌트 간의 데이터 전달

[그림 4-4] 세션 기술을 이용한 웹 컴포넌트 간의 데이터 전달 1. 쿠키와 세션에 대하여 세션 기술은 웹 브라우저를 거치지 않고 웹 서버에 있는 데이터 영역을 통해 데이터를 전달하는 방법이다. 첫 번째 웹 컴포넌트는 웹 서버 쪽에 데이터를 저장해 놓고, 그 데이터를 읽기 위해 필요 한 세션 아이디만 웹 브라우저로 보낸다. 웹 브라우저는 아이디를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 웹 서버로 보내며, 그 아이디를 이용하면 저장된 데이터 를 찾을 수 있다. [그림 4-4] 세션 기술을 이용한 웹 컴포넌트 간의 데이터 전달

Cookie cookie = new Cookie( “AGE ”, “26 ”); 2. 쿠키 기술의 사용 방법 새로운 쿠키 데이터를 저장하는 방법 – 입력 기능 쿠키 데이터를 웹 브라우저 쪽에 저장하기 위해 해야 하는 두 가지 일 첫째 : Cookie 클래스의 객체를 만든다. 둘째 : addCookie 메서드를 호출한다. Cookie 클래스는 javax.servlet.http 패키지에 속하며, 이 클래스의 객체를 만들 때는 쿠키 의 이름과 값을 파라미터로 넘겨줘야 한다. 이 두 파라미터는 모두 String 타입이므로, 쿠키의 값이 수치일 경우는 문자 데이터로 만들어서 넘 겨줘야 한다. Cookie cookie = new Cookie( “AGE ”, “26 ”); 쿠키 이름 쿠키 값

response.addCookie(cookie); 2. 쿠키 기술의 사용 방법 새로운 쿠키 데이터를 저장하는 방법 – 입력 기능 addCookie 메서드는 웹 브라우저로 쿠키를 보내는 기능을 한다. JSP 페이지에서는 response 내장 객체에 대해, 서블릿 클래스에서는 doGet, doPost 메서드의 두 번째 파라 미터에 대해 이 메서드를 호출해야 하며, Cookie 객체를 파라미터로 넘겨줘야 한다. addCookie 메서드를 통해 웹 브라우저로 전송된 쿠키를 실제로 저장하는 일은 웹 브라우저가 하 도록 되어 있다. 웹 브라우저는 쿠키를 저장할 때 쿠키를 보낸 웹 서버의 주소도 함께 저장해 놓는다. response.addCookie(cookie); Cookie 객체

2. 쿠키 기술의 사용 방법 새로운 쿠키 데이터를 저장하는 방법 – 입력 기능 웹 브라우저 쪽에 쿠키 데이터를 저장하는 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의 실행 결과

Cookie cookies[] = request.getCookies(); 2. 쿠키 기술의 사용 방법 쿠키 데이터를 읽는 방법 – 조회 기능 웹 브라우저는 웹 서버가 아무런 요청을 하지 않아도 웹 서버로 URL을 보낼 때 마다 그 URL에 포함된 웹 서버의 주소에 해당하는 모든 쿠키를 찾아서 웹 서버로 함께 보낸다. 쿠키를 받는 일은 getCookies라는 메서드를 이용해서 해야한다. getCookies 메서드는 JSP 페이지에서는 request 내장 변수에 대해, 서블릿 클래스에서 는 doGet, doPost 메서드 첫 번째 파라미터애 대해 호출 해야 한다. getCookies 메서드는 웹 브라우저가 보낸 모든 쿠키를 Cookie 배열로 만들어서 리턴하기 때문에 다음과 같은 Cookie 배열 변수에 리턴값을 받아야 한다. Cookie cookies[] = request.getCookies(); 웹 브라우저가 보낸 모든 쿠키를 Cookie 배열로 만들어서 리턴하는 메서드

String name = cookie.getName(); String value = cookie.getValue(); 2. 쿠키 기술의 사용 방법 쿠키 데이터를 읽는 방법 – 조회 기능 getCookies 메서드가 리턴한 Cookie 배열에서 특정 쿠키를 찾기 위해서는 그 배열에 있 는 Cookie 객체를 하나씩 가져다가 이름을 비교해서 찾을 수 밖에 없다. 쿠키의 이름은 Cookie 객체에 대해 getName이라는 메서드를 호출해 구할 수 있다. 원하는 이름의 Cookie 객체를 찾은 다음에는 그 객체에 대해 getValue 메서드를 호출해 서 쿠키 값을 가져올 수 있다. String name = cookie.getName(); 쿠키 이름을 가져오는 메서드 String value = cookie.getValue(); 쿠키 값을 가져오는 메서드

2. 쿠키 기술의 사용 방법 쿠키 데이터를 읽는 방법 – 조회 기능 [예제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(); } %>>

[그림 4-8] 예제 4-1, 예제 4-2를 서로 다른 웹 서버 주소를 가지고 호출 했을 때의 결과 2. 쿠키 기술의 사용 방법 쿠키 데이터를 읽는 방법 – 조회 기능 새로운 웹 브라우저를 시작 다음에, [예제 4-1]과 [예제 4-2]를 localhost라는 도메인 이름과 127.0.0.1이라는 IP주소로 각각 호출하면 다음과 같은 결과가 나온다. [그림 4-6] 예제 4-2의 실행 결과(1) [그림 4-7] 예제 4-2의 실행 결과(2) [그림 4-8] 예제 4-1, 예제 4-2를 서로 다른 웹 서버 주소를 가지고 호출 했을 때의 결과

2. 쿠키 기술의 사용 방법 쿠키 데이터를 수정하는 방법 – 수정 기능 웹 브라우저에 저장되어 있는 쿠키의 값을 수정 하기 위해서는 새로운 쿠키를 저장할 때 와 마찬가지로 Cookie 객체를 만들어서 addCookie 메서드에 넘겨주면 된다. 예제를 톰캣의 brain04 웹 애플리케이션 디렉터리에 ModifyCookie.jsp라는 이름으로 저장한다. [예제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>

[그림 4-9] 예제 4-3의 실행 결과를 확인하는 방법 2. 쿠키 기술의 사용 방법 쿠키 데이터를 수정하는 방법 – 수정 기능 [그림 4-9] 예제 4-3의 실행 결과를 확인하는 방법

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

2. 쿠키 기술의 사용 방법 쿠키 데이터를 삭제하는 방법 – 삭제 기능 예제를 톰캣의 brain04 웹 애플리케이션 디렉터리에 DeleteGookie.jsp라는 이름으로 저장한다. [예제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>

[그림 4-10] 예제 4-4의 실행 결과를 확인하는 방법 2. 쿠키 기술의 사용 방법 쿠키 데이터를 삭제하는 방법 – 삭제 기능 [그림 4-10] 예제 4-4의 실행 결과를 확인하는 방법

cookie.setPath( “/brain04/sub1/ ”); 2. 쿠키 기술의 사용 방법 쿠키가 특정 경로명을 갖는 URL로만 전송되도록 만드는 방법 웹 브라우저는 웹 서버로 URL을 보낼 때 웹 서버에 속하는 모든 쿠키를 함께 보내는 것 이 기본적인 동작이지만, addCookie 메서드를 호출하기 전에 Cookie 객체에 대해 setPath라는 메서드를 호출하면 쿠키의 전송 범위를 좁힐 수 있다. setPath 메서드에는 웹 애플리케이션 디렉터리를 기준으로 한 URL 경로명을 파라미터 로 넘겨줘야 한다. setPath 메서드에 넘겨주는 URL 경로명은 반드시 /로 시작해야 하고 마지막도 /로 끝내 는 것이 좋다. cookie.setPath( “/brain04/sub1/ ”); 쿠키를 전송할 URL 경로명

2. 쿠키 기술의 사용 방법 쿠키가 특정 경로명을 갖는 URL로만 전송되도록 만드는 방법 [예제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>

2. 쿠키 기술의 사용 방법 쿠키가 특정 경로명을 갖는 URL로만 전송되도록 만드는 방법 [예제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(); } %>

2. 쿠키 기술의 사용 방법 쿠키가 특정 경로명을 갖는 URL로만 전송되도록 만드는 방법 sub1 디렉터리에 있는 JSP 페이지는 [예제 4-5]가 저장한 JOB 쿠키를 받을 수 있지만, sub2 디렉터리에 있는 JSP 페이지는 받을 수 없다. [그림 4-12] 예제 4-5의 실행 결과

cookie.setDomain( “.hanb.co.kr ”); 2. 쿠키 기술의 사용 방법 쿠키가 여러 웹 서버로 전송되도록 만드는 방법 웹 서버가 보낸 쿠키를 다른 웹 서버가 받도록 하기 위해서는 addCookie 메서드를 호출 하기 전에 Cookie 객체에 대해 setDomain이라는 메서드를 호출하면 된다. setDomain 메서드는 쿠키의 도메인을 설정하는 메서드이다. cookie.setDomain( “.hanb.co.kr ”); 쿠키를 받을 도메인 [그림 4-13] 도메인이 지정된 쿠키가 전송되는 범위

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>

2. 쿠키 기술의 사용 방법 쿠키가 여러 웹 서버로 전송되도록 만드는 방법 [예제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(); } %>

2. 쿠키 기술의 사용 방법 쿠키가 여러 웹 서버로 전송되도록 만드는 방법 앞의 두 JSP 페이지는 같은 도메인에 속하는 서로 다른 웹 서버에 설치해야 한다. [예제 4-7]을 한 쪽 웹 서버에 StoreIDCookie.jsp라는 이름으로 저장하고, [예제 4-8]을 다른 쪽 웹 서버에 ReadIDCookie.jsp라는 이름으로 저장한 후 실행하면 다음과 같은 결 과가 나온다. ①첫 번째 웹 서버에 설치한 [예제 4-7]의URL을 입력하세요. ② 두 번째 웹 서버에 설치한 [예제 4-8]의 URL을 입력하세요 [그림 4-15] 예제 4-7, 4-8의 실행 결과

3. 세션 기술의 사용 방법

3. 세션 기술의 사용 방법 서블릿 클래스에서 세션 기술을 사용하는 방법 서블릿 클래스에서 세션을 시작하기 위해서는 doGet, doPost 메서드의 HttpServletRequest 파라미터에 대해 getSession이라는 메서드를 호출해야 한다. getSession 메서드는 세션 정보를 포함하는 javax.servlet.http.HttpSession 타입의 객체를 리턴한다. getSession 메서드가 리턴한 HttpSession 객체에 대해 setAttribute라는 메서드를 호출하 면 세션 데이터 영역에 데이터를 저장할 수 있다. HttpSession session = request.getSession(); 세션을 시작하는 메서드 session.setAttribute( “ID ”, “lee77 ”); 데이터 이름 데이터 값

HttpSession session = request.getSession(); 3. 세션 기술의 사용 방법 서블릿 클래스에서 세션 기술을 사용하는 방법 setAttribute 메서드는 같은 이름의 데이터가 이미 있으면 기존 값을 지우고 새로운 값을 저장하므로 데이터 수정 기능을 구현하기 위해서도 사용할 수 있다. 세션 데이터 영역에 저장된 데이터는 같은 웹 애플리케이션 디렉터리에 속하는 다른 웹 컴포넌트에서도 읽을 수 있다. 그렇게 하기 위해서는 HttpSession 객체가 필요하며, 이 경우도 getSession 메서드를 이용해서 HttpSession 객체를 구할 수 있다. getSession 메서드는 진행 중인 세션이 없을 때는 새로운 세션을 시작하지만, 이미 진행 중인 세션이 있을 때는 그 세션 정보를 HttpSession 객체로 만들어서 리턴한다. HttpSession session = request.getSession(); 세션 정보를 가져오는 메서드

3. 세션 기술의 사용 방법 서블릿 클래스에서 세션 기술을 사용하는 방법 HttpSession 객체에 대해 getAttribute라는 메서드를 호출하면 세션 데이터 영역의 데이 터를 가져올 수 있다. getAttribute 메서드는 데이터 이름을 파라미터로 받고, 그에 해당하는 데이터 값을 리턴 한다. 주의: getAttribute 메서드의 리턴 타입은 java.lang.Object 이므로 데이터 값을 본래의 타 입으로 사용하려면 다음과 같이 캐스트 연산을 해야 한다. HttpSession 객체를 이용하면 세션 데이터를 삭제 할 수 있으며, 그렇게 하려면 removeAttribute 메서드를 호출하면 된다. String str = (String) session.getAttribute( “ID ”); 캐스트 연산자 데이터 이름 session.removeAttribute( “ID ”); 데이터 이름

session.invalidate(); 3. 세션 기술의 사용 방법 서블릿 클래스에서 세션 기술을 사용하는 방법 세션을 이용해서 할 일을 모두 마치고 나면 invalidate라는 메서드를 호출해서 세션을 끝 낼 수 있다. 이 메서드는 HttpSession 객체에 대해 호출해야 한다. session.invalidate(); 데이터 이름 음식 이름을 입력하면 동물 이름 입력 화면이 나타나고 동물 이름을 입력하면 결과 화면이 나타납니다. [그림 4-17] 성격 테스트 웹 애플리케이션의 화면 설계

3. 세션 기술의 사용 방법 서블릿 클래스에서 세션 기술을 사용하는 방법 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

3. 세션 기술의 사용 방법 서블릿 클래스에서 세션 기술을 사용하는 방법 HTML 문서가 앞에서 정한 URL을 갖도록 만들기 위해 톰캣의 brain04 웹 애플리케이션 디렉터리에 ptest라는 서브디렉터리를 만들고, 위 예제를 Food.html라는 이름으로 저장 한다. [예제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>

3. 세션 기술의 사용 방법 서블릿 클래스에서 세션 기술을 사용하는 방법 [예제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> ”); }

3. 세션 기술의 사용 방법 서블릿 클래스에서 세션 기술을 사용하는 방법 [예제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> ”); }

3. 세션 기술의 사용 방법 서블릿 클래스에서 세션 기술을 사용하는 방법 [그림 4-19] 예제 4-9 예제 4-10, 예제 4-11의 실행 결과

session.setAttribute( “ID ”, “lee77 ”); 3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 서블릿 클래스에서는 새로운 세션을 시작하거나 진행 중인 세션을 계속하기 위해서는 getSession 메서드를 호출해야 하지만, JSP 페이지에서는 JSP 페이지가 서블릿 클래스로 변환되는 과정에서 이 메서드를 호출하는 코드가 자동으로 추가 되기 때문에 getSession 메서드를 호출 할 필요가 없다. session 내장 변수를 사용하면 세션 데이터 영역에 데이터를 저장할 수도 있고, 그 영역 에 있는 데이터를 읽어오거나 삭제할 수도 있다. session.setAttribute( “ID ”, “lee77 ”); 세션 데이터를 저장하는 메서드

3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 세션을 끝내려면 session 내장 변수에 대해 invalidate라는 메서드를 호출하면 된다. String str = (String) session.getAttribute( “ID ”); 세션 데이터를 가져오는 메서드 session.removeAttribute( “ID ””); 세션 데이터를 삭제하는 메서드 session.invalidate(); 세션을 끝내는 메서드

[그림 4-20] 회원 가입 애플리케이션의 화면 설계 3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 [그림 4-20] 회원 가입 애플리케이션의 화면 설계

3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 http://localhost:8080/brain04/subscribe/PersonalInfo.html [그림 4-20]의 첫 번째 화면의 URL http://localhost:8080/brain04/subscribe/Agreement.jsp [그림 4-20]의 두 번째 화면의 URL http://localhost:8080/brain04/subscribe/Subscribe.jsp 회원 정보를 저장하는 JSP 페이지의 URL http://localhost:8080/brain04/subscribe/Result.jsp 회원 가입 결과를 출력하는 JSP 페이지의 URL

3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 앞 페이지의 네 URL에 해당하는 HTML 문서와 JSP 페이지는 다음과 같이 작성하면 된 다. [예제4-12] 개인 정보 입력 화면을 제공하는 HTML 문서 <HTML> <HEAD> <META http-equiv= “Content-Type ” content= ”text/html;charset=euc-kr ”> <TITLE>회원 가입</TITLE> </HEAD> <BODY> 개인 정보를 입력하세요. <FORM ACTION=Agreement.jsp METHOD=POST> 아이디: <INPUT TYPE=TEXT NAME=ID><BR> 패스워드: <INPUT TYPE=PASSWORD NAME=PASSWORD><BR> 이름: <INPUT TYPE=TEXT NAME=NAME><BR> <INPUT TYPE=SUBMIT VALUE= ‘확인 ’> </FORM> </BODY> </HTML>

3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 <%@page contentType= “text/html; charset=euc-kr ”%> <% request.setCharacterEncoding( “euc-kr ”); String id = request.getParameter( “ID ”); String password = request.getParameter( “PASSWORD ”); String name = request.getParameter( “NAME ”); session.setAttribute( “ID ”, id); session.setAttribute( “PASSWORD ”, password); session.setAttribute( “NAME ”, name); %> <HTML> <HEAD><TITLE>회원 가입</TITLE></HEAD> <BODY> <H3>약관</H3> ----------------------------------------------------- <BR> 1. 회원 정보는 웹 사이트의 운영을 위해서만 사용됩니다. <BR> 2. 웹 사이트의 정상 운영을 방해하는 회원은 탈퇴 처리합니다. <BR> <FORM ACTION=Subscribe.jsp METHOD=POST> 위의 약관에 동의하십니까? <INPUT TYPE=RADIO NAME=AGREE VALUE=YES>동의함 <INPUT TYPE=RADIO NAME=AGREE VALUE=NO>동의하지 않음 <BR><BR> <INPUT TYPE=SUBMIT VALUE= ‘확인 ’> </FORM> </BODY> </HTML> 세션 데이터를 저장합니다

3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 [예제4-14] 회원 정보를 저장하는 JSP 페이지 <%@page contentType= “text/html; charset=euc-kr ”%> <%@page import=“java.io.*”%> <% String agree = request.getParameter( “AGREE ”); String result = null; if (agree.equals( “YES ”)) { String id = (String) session.getAttribute( “ID ”); String password = (String) session.getAttribute( “PASSWORD ”); String name = (String) session.getAttribute( “NAME ”); PrintWriter writer = null; try { String filePath = application.getRealPath( ”/WEB-INF/ ” + id + “.txt ”); writer = new PrintWriter(filePath); writer.println( “아이디: ” + id); writer.println( “패스워드: ” + password); writer.println( “이름: ” + name); result = “SUCCESS ”; } catch (IOException ioe) { result = “FAIL ”; [예제4-14] 회원 정보를 저장하는 JSP 페이지 finally { try { writer.close(); } catch (Exception e) { else { result = “FAIL ”; session.invalidate(); response.sendRedirect( “Result.jsp?RESULT= ” + result); %>

3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 <%@page contentType= “text/html; charset=euc-kr ”%> <% String result = request.getParameter( “RESULT ”); %> <HTML> <HEAD><TITLE>회원 가입</TITLE></HEAD> <BODY> <H3>회원 가입 결과</H3> <% if (result.equals( “SUCCESS ”)) out.println( “가입되었습니다. ”); else out.println( “가입되지 않았습니다. ”); %> </BODY> </HTML>

3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 입력된 개인 정보는 파일로 저장되며, 그 파일의 내용을 확인하려면 brain04 웹 애플리 케이션 디렉터리의 WEB-INF 서브디렉터리로 가서 회원 아이디에 해당하는 파일을 열 어보면 된다. ② 회원 아이디에 해당하는 파일에 회원 정보가 저장되어 있을 것입니다 ① brain04 웹 애플리케이션 디렉터리의 WEB-INF 서브디렉터리로 가세요

3. 세션 기술의 사용 방법 JSP 페이지에서 세션 기술을 사용하는 방법 세션 기술에서는 웹 브라우저로 세션 아이디를 보낼 때 쿠키 형태로 만들어서 전송하는 데, 이 쿠키 이름은 JSESSIONID이다. [그림 4-23] 쿠키 형태로 전송되는 세션 아이디

[그림 4-24] URL과 함께 전송되는 세션 아이디 3. 세션 기술의 사용 방법 URL 재작성 메커니즘의 사용 방법 쿠키를 사용할 수 없는 웹 환경에서는 URL 뒤에 세션 아이디를 붙여서 전송하는 방법을 사용하면 된다. 이 방법은 본래의 URL을 가지고 새로운 URL을 만드는 방법이기 때문에 URL 재작성 (URL rewriting) 메커니즘이라고 부른다. [그림 4-24] URL과 함께 전송되는 세션 아이디 본래의 URL http://localhost:8080/brain04/subscribe/Agreement.jsp; jsessionid=8088A1AAA61960F0B113E331A1460089 URL 재작성으로 추가된 부분

3. 세션 기술의 사용 방법 URL 재작성 메커니즘의 사용 방법 URL 재작성을 하기 위해서는 URL 재작성 기능을 제공하는 encodeURL이라는 메서드 를 사용하면 된다. JSP 페이지에서는 response 내장 변수에 대해 이 메서드를 호출하면 되고, 서블릿 클래 스에서는 doGet, doPost 메서드의 두 번째 파라미터에 대해 호출하며 된다. encodeURL 메서드에는 현재의 웹 컴포넌트를 기준으로 한 상대적인 URL 경로명을 파 라미터로 넘겨 줄 수도 있다. 그러면 이 메서드는 URL 경로명 뒤에 세미콜론과 jessionid=세션_아이디를 붙여서 리턴할 것이다. String url = response.encodeURL(“http://localhost:8080/brain04/subscribe/Agreement.jsp ”); 본래의 URL String url = response.encodeURL( “common/Greetings.jsp ”); 상대적인 URL 경로명

3. 세션 기술의 사용 방법 URL 재작성 메커니즘의 사용 방법 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>

3. 세션 기술의 사용 방법 URL 재작성 메커니즘의 사용 방법 이 두 예제를 brain04 웹 애플리케이션 디렉터리에 WriteSessionData.jsp와 ReadSessionData.jsp이름으로 저장한다. [예제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>

3. 세션 기술의 사용 방법 URL 재작성 메커니즘의 사용 방법 [그림 4-25] 웹 브라우저의 쿠키 차단 방법

3. 세션 기술의 사용 방법 URL 재작성 메커니즘의 사용 방법 ①[예제 4-16]의 URL을 입력하세요. ②이 링크를 클릭하면 결과 화면이 나타납니다. [그림 4-26] 예제 4-16, 예제 4-17의 실행 결과