티스토리 뷰
Application을 이용한 객체 값 저장 방법에 대해서 알아보자!
서블릿 콘텍스트 ServletContext라는 것을 이용해서 저장한다.
서블릿 콘텍스트는 여러 서 블릿 또는 자신의 서블릿에서 값을 임시로 저장하는 공간을 말한다.
그리고 거기에 저장하고, 가져와서 그 객체들을 사용할 수 있게 한다.
ServletContext application = request.getServletContext();
-> ServletContext 변수 application을 만든다.
1. 저장: application.setAttribute(name, object);
-> application에 name으로 object를 저장한다.
2. 가져오기: request.getAttribute();
-> application으로부터 object를 가져온다.
어떻게 사용하는지 한번 알아보자!
<!-- calc2.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="calc2" method="post">
<div>
<label>숫자만 입력하세요</label>
</div>
<div><input type="text" name="v"/></div>
<div>
<input type="submit" name="button" value="+" />
<input type="submit" name="button" value="-" />
<input type="submit" name="button" value="=" />
</div>
</form>
</body>
</html>
입력창 하나와 submit버튼 3개를 만들어준다. value는 간단하게+, -, =로 만든다.
//Calc2.java
package com.newlecture.web;
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 Calc2 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application = request.getServletContext();
//ServletContext 변수 application을 선언
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String v_ = request.getParameter("v");
String btn = request.getParameter("button");
int v = 0;
if(!v_.equals("")) v = Integer.parseInt(v_);
//계산
if(btn.equals("=")) {
int x = (Integer) application.getAttribute("value");
//object로 값을 반환하기 때문에 (Integer)라는 refer클래스로 해결!
int y = v; //위의 조건문으로부터 받아온 값
String button = (String) application.getAttribute("btn");
//지역변수 이름을 button으로 설정해서 다른 지역변수와 충돌을 없앤다.
int result = 0;
if(button.equals("+")) result = x + y;
else result = x - y;
response.getWriter().printf("Result is %d\n", result);
}
//저장
else {
application.setAttribute("value", v);
//application변수에 value이라는 이름으로 v값을 저장한다.
application.setAttribute("btn", btn);
//application변수에 btn이라는 이름으로 btn값을 저장한다.
response.getWriter().println(v); //전달 값 숫자
response.getWriter().println(btn); //전달 값 버튼
}
}
}
코드가 꽤 복잡하다. 먼저 서블릿컨텍스트를 사용하기 위해서
ServletContext appilcaion = request.getServletContext();코드를 통해 application 변수를 선언해준다.
이제 이 application 서블릿컨텍스트에 값들을 저장하고 불러오고 할 것이다.
//저장 코드에서
application.setAttribute("value", v);로 받아온 문자열v를 value라고 저장하고,
application.setAttribute("btn", btn);을 통해 받아온 문자열 btn을 btn이라고 저장한다.
//계산 코드에서는
int x = (Integer) application.getAttribute("value"); 으로 application에 저장된 값을 불러와 사용한다.
이때, object로 값이 반환되므로 Integer클래스를 통해서 변환해줘야한다.
String button = (String) application.getAttribute("btn");도 마찬가지로 application에 저장된 값을 불러와 사용한다.
여기서도 object로 값이 반환되기 떄문에 String클래스를 통해서 변환 해주어야한다.
나머지는 코드를 읽어보면서 이해해보자!
정상적으로 잘 출력되는 것을 확인 할 수있다.
여기서는 저장되는 것만 확인 하기 위해서 뒤로가기 버튼을 이용해서 그냥 확인만 할 수있는 예제이다.
이렇게 Application을 이용한 임시저장 ServletContext에 대해서 알아보았다.
'Servlet JSP' 카테고리의 다른 글
상태유지 Cookie(자바 공부도 해야되는데.... 코드 어렵) (0) | 2021.04.23 |
---|---|
상태유지 Session 이용(feat. Application 객체와 차이점) (0) | 2021.04.23 |
상태 유지의 필요성? (0) | 2021.04.23 |
입력 데이터 배열 전달 (0) | 2021.04.23 |
여러 개의 Submit버튼 사용!(feat. 개발자도구를 통한 분석) (0) | 2021.04.23 |