Attribute와 SCOPE

서희찬·2023년 12월 11일
0

웹프로그래밍

목록 보기
24/30
post-thumbnail
post-custom-banner

Attribute와 SCOPE에 대해 먼저 배우고 가자
우리는 앞서 내장객체 여러개를 봐왔다.
그 중 pageContext, request, session, application은 내장 객체 영역이 있다.

대충 눈치 챌 수 있듯이

내장 객체는

내장 객체가 저장되는 메모리의 유효기간 및 참조 범위

Scope는

APPLICATION > SESSION > REQUEST > PAGE

이와 같다.

각 영역 마다 아래와 같은 유지시간이 있다.

⏳ 유지시간

  • Page : 동일한 페이지에서만 공유되고 페이지를 벗어나면 소멸
  • Request : 하나의 요청의 처리를 위해 호출된 페이지와 포워드(요청 전달) 된 페이지까지 공유
  • Session : 클라이언트가 처음 접속한 후 웹 브라우저를 닫을 때까지 공유
  • Application : 한 번 저장되면 웹 애플리케이션이 종료될 때까지 유지

영역(Scope)과 내장(저장) 객체의 관계


유의 할점은 Page Scope와 내장 객체 pageContext만 서로 이름 다르다는것을 유의하면 된다.

범위는 이와 같고, 더 넓은 영역은 작은 영역을 둘 이상 포함 가능하다.

영역 내장 객체가 가지는 성격

  • 영역(Scope) : 공유를 위한 객체의 유효 범위
  • 애트리뷰트(Attribute) : 영역 내에 공유되는 데이터

애트리뷰트(Attribute)

  • 영역의 범위에 따라 애트리뷰트의 데이터 사용가능
  • 애트리뷰트는 객체에 저장
  • 다양한 데이터 입력 가능(String, int, …)
  • 애트리뷰트의 형식 : <key, value>

    즉, get,set,remove가 있고 List로 구하는 Names가 있다고 보면된다.

Scope

1️⃣ PAGE

  • 하나의 JSP 페이지 내에서 공유될 데이터 저장
  • 하나의 JSP 페이지 내에서만 객체를 공유하는 영역
  • 주로 커스텀 태그에서 새로운 변수를 추가할 때 사용
  • 한 번의 클라이언트 요청이 오면, 하나의 JSP 페이지가 응답
  • JSP 파일에는 pageContext 객체 내장
  • JSP 파일의 <% %> 안에 변수 사용 시 PAGE 영역에 정의된 객체이기 때문에 해당 JSP 파일 내에서만 유효하다.

2️⃣ REQUEST

  • 요청을 받아서 응답하기까지 객체가 유효
  • 한번의 요청을 처리하는데 사용되는 모든 JSP페이지에서 공유(전달)될 데이터 저장
  • Servlet에서 forward 또는 include 사용 시
  • request객체가 공유되어서 request영역을 통해 공유

3️⃣ SESSION

  • 한 사용자와 관련된 정보를 JSP들이 공유하기 위해서 사용
  • 사용자의 로그인 정보와 같은 것들을 저장
  • 같은 브라우저 내에서 요청되는 페이지들은 같은 객체를 공유
  • 세션이 종료되면 객체는 반환
  • 하나의 브라우저 당 1개의 session객체가 생성

4️⃣ APPLICATION

같은 애플리케이션 내에서 요청되는 모든 페이지들은 같은 객체를 공유

  • 모든 사용자와 관련해서 공유할 정보 저장
  • 임시 디렉터리 경로와 같은 웹 어플리케이션의 설정 정보를 주로 저장
  • 하나의 애플리케이션 당 1개의 application객체가 생성
  • 애플리케이션이 종료되면 객체는 반환

예제

Attribute Set

//Application 객체
ServletContext appication = request.getServletContext();
application.setAttribute("value1", value);
//Session 객체
HttpSession session = request.getSession();
session.setAttribute("value2", value+1);
//request 객체
request.setAttribute("value3", value+2);

이용

<%= application.getAttibute("value1") %> <br>
<%= session.getAttibute("value2") %> <br>
<%= request.getAttibute("value3") %> <br>
<%= pageContext.getAttibute("value4") %> <br>

pageContext를 불러와야함을 유의하자!~

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)
post-custom-banner

0개의 댓글