[jsp, servlet] session, cookie, application / 상태유지

seulki·2022년 10월 7일
0

jsp

목록 보기
10/51
post-thumbnail
post-custom-banner

🗝️ 상태유지의 필요성

  • application, session, cookie

🎈 application 알아보러가기!



🗝️ session

  • 하나의 웹 브라우저의 정보를 유지하기 위한 세션 정보를 저장
  • 브라우저가 시작될 때 저장공간이 생기고,
    브라우저가 닫히면 저장공간이 사라진다.
  • 내장객체로서 브라우저별로 각각 session이 존재하고
    고유한 sessionID를 생성 한 후 정보를 추출한다.
  • 저장위치 : 브라우저
  • 저장형식 : Object -> 값 가져올 때 형변환 해야함
  • 만료시점 : 브라우저 종료 시 삭제(기간 지정 가능)
  • 용량제한 : 서버가 허용하는 한, 용량제한 없음
  • 속도 : 쿠키보다는 느림
  • 보안 : 쿠키보다는 좋다.
  • session의 사용
    -> session의 값 설정
    session.setAtrribute("설정한 세션아이디", 세션에 넣을 값);
    -> session 시간 설정
       	session.setMaxInactiveInterval(60*60); // 60분동안 세션 유지
    		session.setMaxInactiveInterval(-1);	// 세션의 시간을 무한대로 설정
    -> session 값 가져오기
    		session.getAttribute("설정한 세션 아이디");
    -> session 값 삭제
    		session.removeAttribute("설정한 세션아이디");
    		session.invalidate();		// 세션 전체 제거, 무효화


🎈 session HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="calc3" method="post">
		<div>
			<label>입력 : </label>
			<input type="text" name="value">
		</div>
		<div>
			<input type="submit" name="operator" value="+">
			<input type="submit" name="operator" value="-">
			<input type="submit" name="operator" value="=">
		</div>
	</form>
</body>
</html>

  • 숫자 입력 후 "+""-" 를 클릭하면 첫번 째 입력했던 숫자와
    클릭한 +, - 기호가 application에 저장되고, 두번 째 숫자를 입력하고
    "="을 클릭하면 연산 결과가 출력된다.


🎈 session Java

package com.koit.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet("/calc3")
public class MyServlet3 extends HttpServlet{
	
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
			
		//session 저장소 선언
		HttpSession session = arg0.getSession();
		
		PrintWriter out = arg1.getWriter();
		
		String value_ = arg0.getParameter("value");
		String op = arg0.getParameter("operator");
		
		int value = 0;
		
		if(value_ != null && !value_.equals("")) {
			value = Integer.parseInt(value_);
		}
		
		if(op.equals("=")) {
			
			// 두번째 숫자와 '=' 이 value와 op에 저장됨.
			int x = (int) session.getAttribute("value");
			int y = value;  // 두번재 넘어온 숫자
			String operator = (String) session.getAttribute("op");
			
			int result = 0;
			
			
			if(operator.equals("+")) {
				result = x + y;
			}else {
				result = x - y;
			}
			
			out.println("결과 : " + result);
		}else { // op가 +, - 인 경우 또 value와 op값을 받아야하는데,
        // 요청은 단발성이기 때문에 요청이 다시 들어오면 기존 값은 사라진다.
				// 그렇기 때문에 기존 요청을 session에 저장해놓고
                //다시 파라미터를 전달받아야 한다.
			session.setAttribute("value", value);
			session.setAttribute("op", op);
			
			arg1.sendRedirect("calc3.html");
		}
	}

}
  • session 저장소 선언하기
    HttpSession session = arg0.getSession();
  • 사용자가 처음 입력한 숫자와 '+', '-' 를 파라미터로 받아 변수에 저장한다.
    ex) 5-

  • op변수가 '+', '-' 인 경우 두번째 숫자와 '='의 요청을 받아야하는데,
    그렇게 되면 첫 번째 받는 요청의 값이 사라지게 된다.
    ex) 3=

  • 그렇기 때문에 첫번째 요청값인 5-를 session 저장소에 저장을 해야한다.

  • session에 값 저장하기
    "value"라는 이름의 value값을 저장하고, "op"라는 이름에 op값을 저장한다.
	session.setAttribute("value", value);
	session.setAttribute("op", op);
  • 그 다음 두번째 요청 값인 숫자와 '='을 다시 변수에 받아오면
    처음 요청된 '+','-' 에 맞게 연산을 해야하기 때문에
    session에서 값을 꺼내와야 한다.

  • session에서 값 꺼내기 (저장할 때 썼던 이름값으로 담겨진 값을 가져온다)

int x = (int) session.getAttribute("value");
String operator = (String) session.getAttribute("op");




profile
웹 개발자 공부 중
post-custom-banner

0개의 댓글