티스토리 뷰

Servlet JSP

상태유지 Application 이용

Programmers 2021. 4. 23. 13:35
반응형

Application을 이용한 객체 값 저장 방법에 대해서 알아보자!
서블릿 콘텍스트 ServletContext라는 것을 이용해서 저장한다.
서블릿 콘텍스트는 여러 서 블릿 또는 자신의 서블릿에서 값을 임시로 저장하는 공간을 말한다.
그리고 거기에 저장하고, 가져와서 그 객체들을 사용할 수 있게 한다.

Servlet Context


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에 대해서 알아보았다.

반응형
댓글
공지사항