새소식

인기 검색어

개인공부/JSP

객체 범위

  • -

1. 객체 범위 종류

웹 애플리케이션에는 4개의 객체 범위가 존재합니다.

  1. page 영역
  2. request 영역
  3. session 영역
  4. application 영역

 

이로 미루어 보아 scope 범위는 page < request < session < application 순이라는 것을 알 수 있습니다. 

 

 

 

 

2. 테스트

4개의 scope 개념에 대해 알았으니, 이제 어떻게 활용하는지 알아보도록 하겠습니다.

 

ScopeServlet.java

@WebServlet("/scope")
public class ScopeSerlvet extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // page는 JSP파일에서 작성 ( JSP only )

        // request
        request.setAttribute("num2", 20);

        // session
        request.getSession().setAttribute("num3", 30);

        // application
        request.getServletContext().setAttribute("num4", 40);

        RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/index.jsp");
        rd.forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

각 영역에 객체를 할당하는 방법은 위와 같습니다.

page 영역은 JSP 내에서만 존재하므로 Servlet에서 만들 수 없습니다.

 

 

이제 JSP 파일을 만들어서 각 영역의 값을 확인해보겠습니다.

/WEB-INF/index.jsp

<%
    pageContext.setAttribute("num1", 10);
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
</head>
<body>
    ${ pageScope.num1 } <br>
    ${ requestScope.num2 } <br>
    ${ sessionScope.num3 } <br>
    ${ applicationScope.num4 } <br>
    <hr>
    ${ num1 } <br>
    ${ num2 } <br>
    ${ num3 } <br>
    ${ num4 } <br>
</body>
</html>

Scope를 출력하는 방법은 위와 같습니다.

  • 지금까지 java 코드 값을 출력하는 방식으로 <%=  %>을 사용했었는데, 지금은 ${  }을 사용했습니다.
  • ${  }은 표현식으로서, 다음 글에서 자세히 다룹니다. 지금은 각 Scope의 값을 출력하는 방법에 주목해주세요.

 

첫 번째 방법은 Scope 영역을 명시하고 출력하고자 하는 애트리뷰트 명을 작성했고,

두 번째 방법은 바로 애트리뷰트 명을 작성했습니다.

결과를 보면 다음과 같습니다.

 

 

두 방법 모두 같은 결과를 얻습니다.

즉, 애트리뷰트 명을 잘 작성했다면 두 번째 방법으로 사용하는 것이 간단하므로 좋을 것입니다.

 

그런데 서로 다른 영역에 같은 이름을 갖는 애트리뷰트가 있다면 어떤 영역의 애트리뷰트가 선택될까요?

스코프 범위에 따라, 애트리뷰트 명은 좁은 범위의 영역부터 큰 범위의 영역으로 탐색을 합니다.

즉, page  ->  request  -> session  -> application  순으로 탐색을 하며, 탐색이 된다면 더 이상 큰 범위로 탐색을 진행하지 않습니다.

'개인공부 > JSP' 카테고리의 다른 글

HTTP HTTPS 차이점  (1) 2022.09.16
JSP 기본객체  (0) 2022.09.16
JSP 스크립트 요소(선언문, 표현식, 스크립틀릿)  (0) 2022.09.16
RequestDispatcher  (0) 2022.09.15
JSP와 Servlet(서블릿) 비교  (0) 2022.09.15
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.