서블릿 JSP
Application 저장소
영카이브
2024. 2. 23. 22:08
서블릿은 서버 애플리케이션의 조각으로, 클라이언트의 요청에 따라 필요한 서블릿을 선택하여 사용한다. 서블릿은 요청을 처리한 후에 WAS에 의해 메모리에서 사라지게 되는데, 이는 다른 요청이 들어왔을 때 이전에 실행되었던 서블릿의 결과를 다음 요청에서 이용할 수 없다는 것을 의미한다.
하지만 로그인과 같이 서블릿의 의미 있는 값을 유지해야 하는 경우가 있다. application, session, cookie 는 상태를 저장할 수 있는 객체들이다.
Application이란?
서블릿 컨텍스트는 서블릿 간의 데이터를 공유하고 유지할 수 있는 저장소로, 마치 책갈피 역할을 하면서 서블릿들이 서로간의 문맥을 유지할 수 있도록 한다. 이를 통해 서블릿 간에 자원을 공유하고 데이터를 계속해서 이어갈 수 있다. 때문에 이를 Application이라고도 부른다.
Application은 웹 어플리케이션의 생명주기 동안 유지되는 객체 저장 공간이다. 사이트를 방문한 누구나 상태값을 서버(웹 어플리케이션)에 application 객체를 저장하여 사용한다.
Application특징
- 웹 어플리케이션의 모든 사용자에게 공유되는 데이터를 저장
- 웹 어플리케이션이 시작될 때 생성되고, 종료될 때 파괴
- 여러 서블릿 간 데이터를 공유하기 위해 사용
- 'ServletContext' 인터페이스를 통해 제공
- 웹 어플리케이션의 설정 정보나 공통 리소스에 대한 정보를 저장 가능
<body>
<div>
<form action="calc2" 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>
<div>
결과 : 0
</div>
</form>
</div>
</body>
@WebServlet("/calc2")
public class Calc2 extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// ServletContext : Application저장소
ServletContext application = req.getServletContext();
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; charset=UTF-8");
String v_=req.getParameter("v");
String op = req.getParameter("operator");
// 기본값(값을 입력하지 않은 경우)
int v=0;
int result=0;
if(!v_.equals("")) v = Integer.parseInt(v_);
// op에 따라 값을 계산하거나 저장한다.
// 계산
if(op.equals("=")) { // 계산
// x는 앞에서 저장했던값(Application저장소에 담겨진 내용)
int x=(Integer)application.getAttribute("value");
System.out.println(x);
// y는 지금 사용자가 전달한 값
int y=v;
String operator = (String)application.getAttribute("op");
if(operator.equals("+")) {
result=x+y;
}else {
result=x-y;
}
resp.getWriter().println("result is " + result);
}
// 저장
else { // 기본연산을 저장
// Application에 v와 op를 저장 (Map Collection과 유사)
application.setAttribute("value", v);
application.setAttribute("op", op);
}
}
}
getAttribute()과 setAttribute()를 사용하여 사용자가 전달한 값을 서버에 저장하고, 서블릿에서 사용하게 된다.
참고 자료 출처 : https://www.youtube.com/watch?v=leZ6Cf3cqEs&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=27