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

seulki·2022년 10월 7일
0

jsp

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

🗝️ 상태유지의 필요성

  • application, session, cookie

🎈 session 알아보러가기!



🗝️ application

  • 하나의 application생성되고 소멸 될 때까지 계속 유지
  • eclipse에서 하나의 project가 하나의 application이라고 생각하면 되고,
    하나의 server에는 여러 개의 web application이 존재할 수 있다.
  • 사용범위 : 전역 범위에서 사용하는 저장공간(tomcat서버가 저장되는 공간)
  • 생명주기 : WAS가 시작해서 종료할 때까지
    -> 웹 서버가 유지되는 기간동안 유지
  • 서버가 닫히기 전까지 정보가 유지되기 때문에, 보안에 취약하다.

-> application 저장소 선언하기

ServletContext application = arg0.getServletContext();

-> application에 값 저장하기

application.setAttribute("value", value);  
application.setAttribute("op", op);			

-> application에서 값 꺼내기

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


🎈 application HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="calc2" 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에 저장되고, 두번 째 숫자를 입력하고
    "="을 클릭하면 연산 결과가 출력된다.


🎈 application 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;

@WebServlet("/calc2")
public class MyServlet2 extends HttpServlet{
	
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		
		//application 저장소 선언
		ServletContext application = arg0.getServletContext();
		
		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) application.getAttribute("value");
			int y = value;  // 두번재 넘어온 숫자
			String operator = (String) application.getAttribute("op");
			
			int result = 0;
			
			
			if(operator.equals("+")) {
				result = x + y;
			}else {
				result = x - y;
			}
			
			out.println("결과 : " + result);
		}else { // op가 +, - 인 경우 또 value와 op값을 받아야하는데, 
        //요청은 단발성이기 때문에 요청이 다시 들어오면 기존 값은 사라진다.
				// 그렇기 때문에 기존 요청을 application에 저장해놓고
                //다시 파라미터를 전달받아야 한다.
			application.setAttribute("value", value);
			application.setAttribute("op", op);
			
			arg1.sendRedirect("calc2.html");
		}
	}

  • application 저장소 선언하기

    ServletContext application = arg0.getServletContext();
  • 사용자가 처음 입력한 숫자와 '+', '-' 를 파라미터로 받아 변수에 저장한다.
    ex) 5+

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

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

  • application에 값 저장하기
    "value"라는 이름의 value값을 저장하고, "op"라는 이름에 op값을 저장한다.

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

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

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




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

0개의 댓글