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 등 다른 브라우저를 사용하면 쿠키 번호가 다르다.