BoostCourse | Scope

judyzero·2025년 1월 31일

BoostCourse

목록 보기
3/7

scope에 값을 줄 때는 setAttribuate(), 값을 받을 때는 getAttribute()를 사용한다.

Application Scope

하나의 어플리케이션이 생성되어서 소멸 될 때까지 계속 유지한다.

  • ServletContext 인터페이스를 구현한 객체를 사용한다.
  • 웹 어플리케이션 하나 당 하나의 application 객체가 사용된다.
  • 모든 클라이언트가 공통으로 사용해야 할 값들이 있을 때 사용한다.
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        
        PrintWriter out = response.getWriter();
        
        
        ServletContext application = getServletContext();
        int value = 1;
        application.setAttribute("value", value);
        
        
        out.println("<h1>value : " + value + "</h1>");
        
    }

application scope를 만들고, value 변수를 관리하도록 하였다.

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        
        PrintWriter out = response.getWriter();
        
        ServletContext application = getServletContext();
        
        
        try {
            int value = (int)application.getAttribute("value");
            value++;
            application.setAttribute("value", value);
            out.println("<h1>value : " + value + "</h1>");
        }catch(NullPointerException ex) {
            out.println("value가 설정되지 않습니다.");
        }
        
        
    }

저장되어 있는 value 값을 불러와 1 증가시키고 다시 application scope에 넣어주었다.

해당 값은 어느 브라우저나 클라이언트가 접속해도 같은 값을 보이기 때문에, 전역적으로 동일한 값을 보여줘야 할 때 사용한다.
아마.. 게시글 조회수나 좋아요 수에 적용하면 될 것 같다.

Session Scope

세션 객체가 생성되어서 소멸 될 때까지 사용 가능하다.
여러개의 요청이 들어와도 남아있다. 상태 유지를 할 때 사용한다.

  • 웹 브라우저 별로 변수를 관리하고자 할 경우 사용한다.
  • 웹 브라우저간의 탭 간에는 세션정보가 공유되기 때문에, 각각의 탭에서는 같은 세션 정보를 사용할 수 있다.
  • HttpSession 인터페이스를 구현한 객체를 사용한다.
  • 서블릿에서는 HttpServletRequest의 getSession() 메소드를 이용하여 session 객체를 얻는다.
  • 장바구니처럼 사용자별로 유지가 되어야 할 정보가 있을 때 사용한다.

Request Scope

클라이언트로부터 요청이 들어와서 서버가 응답을 보낼 때까지 사용 가능하다.

  • HttpServletRequest 객체를 사용한다.
  • JSP에서는 request 내장 변수를 사용한다.
  • 서블릿에서는 HttpServletRequest 객체를 사용한다.
  • forward 시 값을 유지하고자 사용한다.
    forward 하기 전에 request 객체의 setAttribute() 메소드로 값을 설정한 후, 서블릿이나 jsp에게 결과를 전달하여 값을 출력하도록 하였는데, 이렇게 포워드 되는 동안 값이 유지되는 것이 request scope를 이용했다고 한다.

Page Scope

한 페이지 안에서만 사용 가능하다.

  • PageContext 추상 클래스를 사용한다.
  • JSP 페이지에서 pageContext라는 내장 객체로 사용 가능하다.
  • forward가 될 경우 page scope에 지정된 변수는 사용할 수 없다.
    forward는 수행을 다른 페이지로 넘기기 때문에 사용할 수 없다.

0개의 댓글