ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Application객체와 서블릿Context
    Servlet-JSP 2022. 1. 13. 17:20

    **유튜브 뉴렉쳐님의 강의를 들으면서 공부하고 정리한 내용입니다.

     

     

     

     

     

    Application객체

    상태를 저장하기 위해서, 앞에서 다루었던 결과를 잠깐 저장하기 위해서 사용하는 객체이다.

    Applicaion 객체의 특성은 여러 서블릿이 있는데 클라이언트한테 요청 받은 해당 서블릿만 동작 하고 메모리에서 사라지게 된다. 이러한 동작하고 사라지는 특성 때문에 앞에서 동작한 서블릿을 뒤에 동작 할 서블릿이 받아서 처리 할 수 없게 되고 흐름이 끊기게 되는것이다.

     

    서블릿 Context

    이러한 서블릿들끼리 흐름을 이어 갈 수 있게 해주는 저장소를 서블릿 Context라는 것이있다.

    이 context 저장소는 일종의 중간저장소라고 생각하면 된다. 우리는 게임을 할 때 중간중간 저장을 해 주면 캐릭터가 죽거나 다음날 게임을 다시 시작 할 때에 저장 했던 위치에서부터 다시 시작 할 수 있게 된다.

     

    context는 그러한 역할을 하는것이라고 보면 된다.

     

    전에 만들어두었던 calc2파일을 가지고 개념을 익혀보자

     

    서버쪽에서 준비 할 것은 

    사용자 전달 값을 저장하고, 다음 요청에서 먼저 전달 된 값을 꺼내 볼 수 있느냐 이다.

    우선 기본적인 선언을 해 준 다음

    		
    		response.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html; charset=UTF8");
    		
    		//사용자에게 전달하는 값은 하나만 사용한다. 그리고 오퍼레이터값을 같이 전달한다.
    		String v_ = request.getParameter("v");
    		String op = request.getParameter("op"); 
    		
    		int v = 0; //기본값 설정. 값을 입력하지 않았을 경우 0으로 대처

    이 값을 저장을 해야하는데 그 저장공간은 request.getServletContext(); 라는 것이 있다. 이것이 application 저장소이다.

    		//이 값을 저장 해야함. request.getServletContext()는 어플리케이션의 저장소이기때문에
    		//ServletContext라는 변수를 하나 만들어서 application이름을 저장하고 거기에 담아준다.
    		ServletContext application = request.getServletContext();

    ServletContext()는 임포트 해 준다.

    그리고 이 application에 v랑 op값을 담아주도록 한다.

    		application.setAttribute("value", v);
    		application.setAttribute("op", op);

    그리고 덧뺄셈 버튼을 누를수도 결과값을 보여주는 = 버튼을 누르게 될 수도 있다.
    op가 무엇이냐에 따라서 저장을 해야할수도 계산을 해야 할 수도 있다.

    op가 무엇인지 알아보기 위해 조건문 if를 만들어 보자

     

    @WebServlet("/calc2")
    public class calc2 extends HttpServlet{
    	@Override
    	protected void service(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    		
    		ServletContext application = request.getServletContext();
    		response.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html; charset=UTF8");
    		
    		//사용자에게 전달하는 값은 하나만 사용한다. 그리고 오퍼레이터값을 같이 전달한다.
    		String v_ = request.getParameter("v");
    		String op = request.getParameter("operator"); 
    		
    		
    		int v = 0; //기본값 설정. 값을 입력하지 않았을 경우 0으로 대처 
    		//조건검사를 해준다.
    		//만약에(if) x가 가진것이 빈 문자열이 아니다. 그럴 경우에는 x값을 대체해준다(x = ). 형변환 해서 x값을 대입해준다.
    		if(!v_.equals("")) v = Integer.parseInt(v_);
    		
    		//덧뺄셈 버튼을 누를수도 결과값을 보여주는 = 버튼을 누르게 될 수도 있다.
    		//op가 무엇이냐에 따라서 저장을 해야할수도 계산을 해야 할 수도 있다.
    		//우선 =로 해 본다.그 이유는 +,-는 하는 일이 값하고 op후 저장인데 =의 역할은 저장이다.
    		
    		//계산
    		if(op.equals("=")) {
    			//=이 오면 계산하는걸로한다.
    			
    			int x = (Integer)application.getAttribute("value"); //앞에 입력한 값을 꺼내서 x라고 하고 빨간줄은 형변환해준다
    			int y =v; //지금 사용자가 저장한 value 값이라 v로 
    			String operator = (String)application.getAttribute("op"); //이걸 어플리케이션 저장소에서 읽어와야하니깐 섭ㄹ릿콘텍스트를 맨 위로 빼준다.
    			
    			int result = 0; //여기에 더하기 값을 담아 줄 것이고.
    			//앞에 저장한 값을 꺼내서 +할지 -할지는 =말고 op값을 꺼내서 확인해야하는 것
    			if(operator.equals("+")) 
    				result = x+y;
    			else
    				result = x-y;
    			
    			//result를 출력하기 위해서 response해서 getWriter를 얻어서 포멧팅 후 출력
    			response.getWriter().printf(" 값 :  %d\n", result );
    			
    		}
    		else { //+,-은 저장하는 걸로 하고 
    			//이 값을 저장 해야함. request.getServletContext()는 어플리케이션의 저장소이기때문에
    			//ServletContext라는 변수를 하나 만들어서 application이름을 저장하고 거기에 담아준다.
    			//어떻게 저장하느나. 컬랙션이라고 생각해주고 아래와 같이 작성해준다.이 내용을 두고두고 꺼내서 쓸 수 있게 된다.
    			application.setAttribute("value", v);
    			application.setAttribute("op", op);
    
    		}
    
    	}
    }
Designed by Tistory.