FrontEnd/Servlet

Servlet session, cookie, application 사용법 (Calc 프로그램)

H_Develop 2022. 8. 16. 18:27

Calc.html

 

<body>
	<form action="calc" method="post">
    <div>
    	<label>입력 : </label>
        <input type="text" name="v"/>
    </div>
    <div>
    	<input type="submit" name="operator" value="+"/>
        <input type="submit" name="operator" value="-"/>
        <input type="submit" name="operator" value="*"/>
    </div>
    결과 : 0
</body>

 

Calc.java

 

import java.io.IOException;

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("/Calc")
public class Calc extends HttpServlet {
	private static final long serialVersionUID = 1L;
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	ServletContext application = request.getServletContext();
    	// application 별도의 저장공간, 전역변수(모든 method에서 불러 사용가능하다) /cookies
        // 이 부분은 필요에 의해 session, cookie, application으로 사용할 수 있다.
        response.setCharacterEncoding("UTF-8");
    	response.setCharacterType("text/html; charset=UTF8");
        String v_ = request.getParameter("v");
        // 값 입력
        String op = request.getParameter("operator");
        // 연산
        int v = 0; // v는 앞 뒤 숫자 다 넣을 변수이다.
        if(!v_.contentEquals("")) {v = Integer.parseInt(v_);}
        if(op.equals("=")) {
        	int x = (Integer)application.getAttribute("value");	// Wrapper 형변환
            int y = v;
            String operator = (String)application.getAttribute("op");
            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);
        }
    }
}

 

또는

 

@WebServlet("/calc")
public class Calc extends HttpServlet {
	private static final long serialVersionUID = 1L;
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOEception {
    	HttpSession session = request.getSession();
        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_.contentEquals("")) { v=Integer.parseInt(v_); }
        if(op.contentEquals("=")) {
        	int x = (Integer)session.getAttribute("value");
            int y = v;
            String operator = (String)session.getAttribute("op");
            int result = 0;
            if(operator.equals("+")) {
            	result = x+y;
            } else {
            	result = x-y;
            }
            response.getWriter().printf("result is %d\n", result);
        } else {
        	session.setAttribute("value", v);
            session.setAttribute("op", op);
        }
    }
}

ServletContext application = request.getServletContext(); 대신,

HttpSession session = request.getSession();를 사용했다

 

같은 브라우저를 사용하면 쿠키 번호가 같은데,

FireFox 나 edge 등 다른 브라우저를 사용하면 쿠키 번호가 다르다.