티스토리 뷰

반응형

상태 유지를 위한 방법 중 Application과 Session은 WAS에 저장하고 사용하는 방법이다.
하지만 Cookie는 Client가 자신이 가지고 다니면서 상태를 유지하는 방법이다.

먼저 서버에 무언가를 요청하면 서버는 쿠키값을 만들어서 클라이언트에게 주고 값을 가지고 가라고 한다.
그래서 다음에 다시 접속하게 되면 그 클라이언트는 쿠키값을 가지고 서버로 들어가기 때문에 상태를 유지할 수 있다.

그러면 코드로 보도록 하자!

/*쿠키 저장하기*/
Cookie cookie = new Cookie("c", String.valueof(result));
//쿠키는 키"c"와 값으로 나누어진다.
response.addCookie(cookie);
//브라우저에 출력하고, 출력은 response에도 저장된다.

 

/*쿠키 일기*/
Cookie[] cookie = request.getCookies();
//배열로 저장된다.
String c_ = "";
/*배열을 읽는 작업*/
if(cookies != null)
	for(Cookie cookie : cookies)
    	if("c".equals(cookie.getName()))
        	c_ = cookie.getValues();

위의 코드를 활용해서 예제를 만들어보자!

//Calc2.java
package com.newlecture.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/calc2")
public class Calc2 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*쿠키 배열 선언*/
		Cookie[] cookies = request.getCookies(); //쿠키를 배열로 읽어온다
				
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		String v_ = request.getParameter("v");
		String btn = request.getParameter("button");
		
		int v = 0;
		if(!v_.equals("")) v = Integer.parseInt(v_);
						
		//계산
		if(btn.equals("=")) {
			int y = v; //위의 조건문으로부터 받아온 값
		/*쿠키 읽기*/	
			int x = 0; //x변수 선언
			for(Cookie c : cookies) //쿠키를 배열로 선언하고 배열의 개수를 돌면서 찾는 반복문.
				if(c.getName().equals("value")) { 
					//getName을 통해서 value라는 같은 이름을 찾는다.
					x = Integer.parseInt(c.getValue()); 
						//getValue를 통해 찾은 값을 x에 정수형으로 저장한다.
					break;
				}
			
			String button = ""; //button변수 선언
			for(Cookie c : cookies) //쿠키를 배열로 선언하고 배열의 개수를 돌면서 찾는 반복문.
				if(c.getName().equals("btn")) {
					//getName을 통해서 btn라는 같은 이름을 찾는다.
					button = c.getValue();
						//getValue()를 통해서 button에 문자열로 저장한다.
					break;
				}
			
			int result = 0;
			
			if(button.equals("+")) result = x + y;
			else result = x - y;
			
			response.getWriter().printf("Result is %d\n", result);
			
		}
		
		//저장
		else {
			/*쿠키 생성 및 저장 */
			Cookie valueCookie = new Cookie("value", String.valueOf(v));
				//문자열만 사용 할 수 있기 때문에 String.valueOf()로 변환시켜준다.
				//valueCookie를 선언하고 생성한다.
			Cookie btnCookie = new Cookie("btn", btn);
				//btnCookie를 선언하고 생성한다.
			response.addCookie(valueCookie);
            	//valueCookie를 클라이언트에게 저장하도록 보낸다.
			response.addCookie(btnCookie);
            	//btnCookie를 클라이언트에게 저장하도록 보낸다.
			
		}
		
		}
	}
	


코드가 길어졌다. . . . . 천천히 해보자!
/*쿠키 배열 선언*/
=> 말그대로 쿠키는 문자열 형태가 아닌 배열로만 읽어 들일 수 있다.

/*쿠키 생성 및 저장*/
=> 보면 쿠키들은 Cookie를 전달받은 값들을 클라이언트로 보낸다.

/*쿠키 읽기*/
=> 클라이언트가 가지고 있는 Cookie정보들을 배열 형태로 다시 읽어온다. 
배열이기 때문에 for문으로 전체를 돌면서 조건문 if에서 내가 필요한 값을 찾아야 한다.
복잡하지만 여러 가지 장점이 있다.

코드를 다시 복습하면서 이해해보도록 하자! 아 코드 왜래 어렵냐 벌써... 자바를 아직 안 했으니깐 그렇지....
그리고 결과 출력은 역시나 application과 session과 동일하다!

반응형
댓글
공지사항