2009.10.28 12:02

/*
cookietest.jsp는 클라이언트 요청시에 포함된 Cookie 헤더를 참조하여 mybgcolor라는 이르므이 쿠키가 요청 헤더에 포함되었는지 확인하다. 헤더에 존재하지 않는 경우 서버의 응답 헤더에 Set-Cookie 헤더를 포함하여 클라이언트로 하여금 mybgcolor를 'green'으로 설정한 쿠키와 myname을 'Netie'로 설정한 2개의 쿠키를 응답헤더에 포함 하여 클라이언트에 저장하도록 한다. 최초의 요청시에는 mybgcolor 쿠키가 전송되지 않았을 것이고 두번째 요청부터 이후 모든 요청에서 지정된 패스와 매칭되는 겨웅 클라이언트의 요청 헤더에는 'Cookie:mybgcolor="green;myname="Netie'와 같이 지정된 쿠키가 클라이언트로 부터 서버로 전송된다.
*/

<%@page import="java.util.*" contentType="text/html;charset=euc-kr"%>
<%@page session="false"%>
<%
 String value = request.getHeader("Cookie");
 String bgcolor = "white";

 Vector cookies = new Vector();

 if(value == null) {
 /* 요청에 포함된 쿠키가 없을 경우 쿠키 2개를  설정*/
  response.addHeader("Set-Cookie","myname=Netie");
  response.addHeader("Set-Cookie","mybgcolor=green Path=/test");

 }else {
 /*요청 헤더에 쿠키가 포함되어 있으면 */
 StringTokenizer st = new StringTokenizer(value,";");
 while(st.hasMoreTokens()){
  String cookie = st.nextToken();
  cookies.addElement(cookie);
  //특정 이름을 가진 쿠키의 값을 판별하려면 String.indexOf()나 String.substring()메서드를
  //사용하거나,또는 String.split()으로 문자열을 잘라서 개별 쿠키들로 분리 하면 된다.
  if(cookie.indexOf("mybgcolor") != -1 ){
   /* mybgcolor 쿠기가 포함된 경우 */
   int index = cookie.indexOf("=");

   bgcolor = cookie.substring(index + 1);
   /*green 값을 얻는다.*/
  }
 }
 }
%>
<%-- 쿠키가 전송되지 않은 경우 배경색을 디폴트 white로 지정 --%>
<HTML>
<HEAD>
<TITLE>쿠키 테스트</TITLE>
</HEAD>
<BODY BGCOLOR="<%=bgcolor %>">
<H2>쿠키 테스트</H2>
<%
 for(int i = 0; i < cookies.size(); i++)
 {
  String cookie = (String) cookies.elementAt(i);

%>
<%=cookie %><BR>
<%
 }
%>
</BODY>
</HTML>

Posted by 박쥐소년
2009.10.28 11:18
Vector 클래스는 java.util 패키지에 있는 단순한 저장소 역할을 하는 클래스 입니다. 단순히 데이터를 잠깐 넣어두고 그리고 다시 데이터를 추출할 수 있는 기능을 하는 클래스 입니다.
1.단순한 저장소 역할을 하는 클래스
2.데이터가 삽입된 순서대로 저장된다.

ㅁ Vector 형 객체 생성 
   - Vector에 데이터를 삽입할 때는 addElement()를 사용하며, 추출 할때는 elementAt()이라는 메소드를 사용합니다.
   1. public void addElement(Object obj)
       - 데이터를 삽입할 때 사용
   2. public Object elementAt(int index)
       - 데이터를 추출 할때 사용
Posted by 박쥐소년
2009.10.28 10:08
쿠키는 클라이언트의 상태정보(또는 아이디)를 서버로 전송하기 위해 사용할 수 있는 방법 중 하나로 클라이언트에 저장되는 단순한 텍스트이다.

기본적으로 HTTP는 Stateless 프로토콜이기 때문에 하나의 클라이언트 요청에 대한 응답을 전송하고 나면 물리적인 네트워크 커넥션이 끊어져 서버는 새로운 요청을 받을때 이전에 요청을 시도한 클라이언트 와 현재 요청을 시도한 클라이언트를 구분할 방법이 없다. 하지만, 요청을 시도한 클라이언트가 매 요청마다 자신의 상태정보를 쿠키에 담아 요청에 포함하여 전송한다면 서버측에서는 이 정보를 가지고 각각의 클라이언트 상태정보를 관리 할 수 있게 된다.

클라이언트 와 서버간 상태정보나 세션을 유지하기 위해 쿠키를 사용하는 일잔적인 시나리오를 생각 해 보자
1.클라이언트가 서버에 HTTP 요청을 시도한다.
2. 서버는 요청을 처리하고 전송될 HTTP 응답 헤더에 쿠키 설정 헤더를 포함한다.
3. 웹브라우저는 서버로 부터 받은 응답 헤더에서 쿠키 설정 헤더를 확인하고 지정된 쿠키를 클라이언트의 지정된 영역(메모리 혹은 하드 디스크)에 저장한다. 이 경우 웹 브라우져의 설정이 쿠키를 사용하지 않도록 지정된 경우 서버가 요청한 쿠키 설정 헤더는 무시되고 쿠키는 클라이언트에 저장되지 않는다.
4.클라이언트가 쿠키를 설정한 서버의 URL로 다시 요청을 시도한다. 클라이언트 HTTP 요청 헤더내에는 쿠키가 포함되어 서버로 전송된다. 클라이언트에 저장된 쿠키내에는 클라이언트 관련 정보 뿐만 아니라 쿠키를 설정한 서버의 도메인,경로 패스도 함께 포함되어 있다. 이를 통해 클라이언트는 매 요청마다 요청에 사용된 서버의 도메인과 패스를 확인하여 현재 저장되어 있는 쿠키와 도메인과 패스에 매칭이 되는 경우에만 해당 쿠키를 요청 헤더에 포함하여 HTTP 요청을 서버로 전송한다.
5.요청을 받은 서버는 HTTP 요청 헤더에 포함된 쿠키를 얻어 해당 클라이언트의 정보를 얻는다. 만약 요청을 시도한 클라이언트 웹 브라우저가 쿠키를 사용하지 않도록 지정된 경우(혹은 쿠키를 인식하지 못하는 브라우저),이전에 서버가 쿠키 설정 헤더를 전송하였더라도 쿠키는 전송되지 않는다.
Posted by 박쥐소년

티스토리 툴바