프로그래밍/자바, JDBC

뉴렉처 학습(서블릿/JSP) 31강 ~ 33강

현호s 2020. 5. 17. 06:12
반응형

#31강 Cookie의 maxAge 옵션

- 쿠키에 maxAge를 설정하지 않으면, 쿠키는 브라우저의 생존 주기와 같아진다.

- 기본적으로 쿠키는 브라우저 메모리에 존재하다가 기간 설정 or maxAge 설정을 하게 되면 해당 브라우저와 상관없이 기간 내에 존재해야 하기 때문에 외부 파일에 저장된다.

valueCookie.setMaxAge(초); // setMaxAge 지정 60은 1분 24*60*60 은 1일 

valueCookie값에 대한 setMaxAge(); 만료일자 지정

package com.newlecture.web;

import java.io.IOException;

import javax.servlet.ServletContext;
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 {

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 어플리케이션 저장소 : ServletContext
		ServletContext application = request.getServletContext();
		HttpSession session = request.getSession();
		Cookie[] cookies = request.getCookies(); // 쿠키를 읽을 때 request 사용

		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");

		String v_ = request.getParameter("v");
		String op = request.getParameter("operator");

		int v = 0;

		if (!v_.equals(""))
			v = Integer.parseInt(v_);

		// 계산을 위한 조건 설정
		if (op.equals("=")) {

			// x = 담은 값을 가져와 x에 저장(꺼내서 사용)
			// int x = (Integer)application.getAttribute("value");
			// int x = (Integer)session.getAttribute("value");

			int x = 0;
			for (Cookie c : cookies) {
				if (c.getName().equals("value")) {
					x = Integer.parseInt(c.getValue());
					break;
				}
			}

			int y = v;
			// operator = 담은 값을 가져와 operator에 저장(꺼내서 사용)
			// String operator = (String)application.getAttribute("op");
			// String operator = (String) session.getAttribute("op");

			String operator = "";
			for (Cookie c : cookies) {
				if (c.getName().equals("op")) {
					operator = c.getValue();
					break;
				}
			}

			int result = 0;

			if (operator.equals("+")) {
				result = x + y;
			} else {
				result = x - y;
			}

			response.getWriter().printf("result is %d\n", result);
		}
		// 저장을 위한 조건 설정
		// 오퍼레이터 입력이 덧셈 또는 뺄셈인 경우, 그냥 값 저장만 진행
		else {
			// application.setAttribute("value", v);
			// application.setAttribute("op", op);

			// session.setAttribute("value", v);
			// session.setAttribute("op", op);

			Cookie valueCookie = new Cookie("value", String.valueOf(v));
			Cookie opCookie = new Cookie("op", op);
			//valueCookie.setPath("/");   // 모든 경로 
			//opCookie.setPath("/");      // 모든 경로
			//valueCookie.setPath("/add");  // add라는 url 요청 시
			//opCookie.setPath("/add");     // add라는 url 요청 시
			valueCookie.setPath("/calc2");  // calc2라는 url 요청 시
			opCookie.setPath("/calc2");     // calc2라는 url 요청 시
			valueCookie.setMaxAge(24*60*60);	// 만료날짜 지정 (초단위로 지정, 60은 1분)
						
			response.addCookie(valueCookie);
			response.addCookie(opCookie);
		}

	}

}

 

#32강 Application/Session/Cookie 정리

*Application

- 사용범위 : 전역 범위에서 사용하는 저장 공간

- 생명주기 : WAS(Web Application Server)가 시작해서 종료할 때 까지

- 저장위치 : WAS 서버의 메모리

 

*Session

- 사용범위 : 세션 범위에서 사용하는 저장 공간 (특정 사용자만)

- 생명주기 : 세션이 시작해서 종료할 때 까지

- 저장위치 : WAS 서버의 메모리

 

*Cookie

- 사용범위 : Web Browser별 지정한 path범주 공간 (서버 자원을 빌리지 않아 서버에 부담을 주지 않는다.)
(path를 통해 특정 url만 데이터 사용 가능하도록 지정 가능)

- 생명주기 : Browser에 전달한 시간부터 만료시간까지 (만료시간 설정으로 서버 생명주기에 상관없이 클라이언트가 데이터를 가질 수 있다.)

- 저장위치 : Web Browser의 메모리 또는 파일

- 장기간 값을 보관(1년) 하기 위해선 쿠키 사용.

- 특정 url만 사용 가능하도록 하기 위해선 쿠키 사용.

 

#33강 서버에서 페이지 전환해주기(redirection)

- 기존에 값을 입력하여 연산 진행 시 첫 번째 값 입력 후 사칙연산(더하기 or 빼기) 입력 시 값이 post 되면서 서블릿으로부터 백지를 돌려받고, 뒤로 가기 누른 후 두 번째 값 입력 후 =을 클릭하여 결과를 얻어왔다.

- 페이지 전환을 사용하게 되면 서블릿이 백지상태를 돌려주지 않고 경로를 우회 결과를 전달받게 된다.

sendRedirect 경로 우회 지정

package com.newlecture.web;

import java.io.IOException;

import javax.servlet.ServletContext;
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 {

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 어플리케이션 저장소 : ServletContext
		ServletContext application = request.getServletContext();
		HttpSession session = request.getSession();
		Cookie[] cookies = request.getCookies(); // 쿠키를 읽을 때 request 사용

		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");

		String v_ = request.getParameter("v");
		String op = request.getParameter("operator");

		int v = 0;

		if (!v_.equals(""))
			v = Integer.parseInt(v_);

		// 계산을 위한 조건 설정
		if (op.equals("=")) {

			// x = 담은 값을 가져와 x에 저장(꺼내서 사용)
			// int x = (Integer)application.getAttribute("value");
			// int x = (Integer)session.getAttribute("value");

			int x = 0;
			for (Cookie c : cookies) {
				if (c.getName().equals("value")) {
					x = Integer.parseInt(c.getValue());
					break;
				}
			}

			int y = v;
			// operator = 담은 값을 가져와 operator에 저장(꺼내서 사용)
			// String operator = (String)application.getAttribute("op");
			// String operator = (String) session.getAttribute("op");

			String operator = "";
			for (Cookie c : cookies) {
				if (c.getName().equals("op")) {
					operator = c.getValue();
					break;
				}
			}

			int result = 0;

			if (operator.equals("+")) {
				result = x + y;
			} else {
				result = x - y;
			}

			response.getWriter().printf("result is %d\n", result);
		}
		// 저장을 위한 조건 설정
		// 오퍼레이터 입력이 덧셈 또는 뺄셈인 경우, 그냥 값 저장만 진행
		else {
			// application.setAttribute("value", v);
			// application.setAttribute("op", op);

			// session.setAttribute("value", v);
			// session.setAttribute("op", op);

			Cookie valueCookie = new Cookie("value", String.valueOf(v));
			Cookie opCookie = new Cookie("op", op);
			//valueCookie.setPath("/");   // 모든 경로 
			//opCookie.setPath("/");      // 모든 경로
			//valueCookie.setPath("/add");  // add라는 url 요청 시
			//opCookie.setPath("/add");     // add라는 url 요청 시
			valueCookie.setPath("/calc2");  // calc2라는 url 요청 시
			opCookie.setPath("/calc2");     // calc2라는 url 요청 시
			valueCookie.setMaxAge(24*60*60);	// 만료날짜 지정 (초단위로 지정, 60은 1분)
						
			response.addCookie(valueCookie);
			response.addCookie(opCookie);
			
			response.sendRedirect("calc2.html"); // redirect 사용 경로 우회	
		}

	}

}
반응형