[JSP] 영역(Scope) 객체 - page/request/session/application

hiyayeah·2023년 1월 8일
0

JSP

목록 보기
7/8

1. 영역(Scope) 객체란?

  • JSP 내장 객체 중 각기 다른 영역(Scope)을 갖는 4대 영역 객체 → page, request, session, application 영역에 대응하는 pageContext, request, session, application 객체
  • 각 영역 객체에 저장되는 데이터를 속성(Attribute) 이라고 하며, 저장 및 가져오는 메서드가 동일
    • 데이터를 저장하는 메서드 : setAttribute( )
    • 데이터를 가져오는 메서드 : getAttribute( )

2. 영역 객체 4가지

2-1. page 영역의 pageContext 객체

  • 현재 페이지 정보를 저장하고 관리하는 객체
  • 현재 페이지 내에서만 접근 가능

    💡페이지가 변경(이동)되면 현재 페이지 정보가 저장된 pageContext 객체가 제거되므로 현재 페이지 정보는 사라지고, 새로운 페이지 정보를 관리하는 pageContext 객체가 생성됨

2-2. request 객체★★★

  • 현재의 요청(request) 정보를 저장하고 관리하는 객체
  • 현재 요청에서부터 응답(response) 페이지까지는 접근 가능
    • "a.jsp" 페이지의 form 태그에서 "b.jsp" 페이지로 요청이 발생할 경우 새로운 request 객체가 생성되고 응답 페이지인 "b.jsp" 페이지까지 request 객체가 유지됨 (request.getParameter( ) 메서드)
    • "a.jsp" 페이지에서 "Dispatcher 방식"의 포워딩을 통해 페이지를 이동할 경우 새로운 request 객체가 생성되지 않고 그대로 request 객체가 유지됨
  • 만약, 새로운 요청이 발생하면 기존 request 객체가 제거되므로 기존에 저장되어 있던 요청 정보가 사라지고 새로운 request 객체가 생성됨

💗새로운 요청이란?

(response.sendRedirect( ), 하이퍼링크, 자바스크립트 location.href, URL 직접 입력 등)

✍️ form 태그 또는 URL 을 통해 전달된 파라미터값은 request.getParameter( ) 메서드로 가져올 수 있으며, request.setAttribute( ) 메서드로 저장되어 전달받은 데이터 request.getAttribute( ) 메서드로만 가져올 수 있다!

2-3. session 객체★

  • 클라이언트와 서버 간의 연결 정보를 저장하고 관리하는 객체
  • 페이지와 무관하게 웹브라우저가 동작하는 동안 유지되는 객체
  • 웹브라우저를 완전히 종료하거나, 세션 타이머가 만료되거나(= 기본값 1800초 = 30분), invalidate() 메서드를 호출하여 세션을 초기화하면 session 객체 정보가 제거
    • ex) 로그인 시 세션 객체에 아이디를 저장하고, 로그아웃 수행 시 세션에 저장된 아이디 제거
    • ex) 쇼핑몰에서 비회원 상태에서 장바구니에 상품을 담고, 웹브라우저 종료 시 세션에 저장된 장바구니 제거

2-4. application 객체

  • 웹 애플리케이션 서버(WAS = 웹컨테이너 = 톰캣)에 대한 정보를 관리하는 객체
  • 웹 애플리케이션(= 프로젝트) 당 하나의 application 객체만 생성됨 → 애플리케이션 전체 영역에서 하나의 객체를 공유함 (세션은 접속자마다, 브라우저마다 새로운 session 객체 생성)
  • 서버가 시작되면 application 객체가 생성되고, 서버가 중단되면 객체가 제거됨

3. 영역 객체의 공통 메서드

3-1. setAttribute(String key, Object value)

  • key 에 해당하는 이름으로 value 에 해당하는 데이터를 저장(= 매핑)
  • key 에 해당하는 이름은 객체의 데이터를 구분하는 용도로 사용하며, 중복되는 key 값이 지정될 경우, 기존의 데이터를 덮어쓰게 됨 → 하나의 key 에 저장될 수 있는 value(데이터)는 동시에 하나뿐이다!
  • Object 타입으로 전달되는 value(데이터)는 모든 타입을 사용 가능(= 만능 타입) ex) 사물함의 특정 번호를 key 로 지정하고, 해당 사물함 번호에 물건(value)을 저장하는 것
<%
	// 각 영역 객체에 값을 저장 => setAttribute(String key, Object value) 메서드 사용
	pageContext.setAttribute("pageContextValue", "pageContext value");
	request.setAttribute("requestValue", "request value");
	session.setAttribute("sessionValue", "session value");
	application.setAttribute("applicationValue", "application value");
%>

3-2. getAttribute(String key)

  • key 에 해당하는 value(데이터) 를 리턴(= 가져오기)
  • 리턴타입이 Object 타입(어떤 데이터든 모두 Object 타입으로 리턴됨) → 따라서, 상황에 따라 변수에 저장 등의 경우 형변환 연산자를 통해 데이터타입을 변환해야 할 수 있음 ex) 사물의 번호를 key 로 사용하여 사물함 내에 저장된 물건(value)을 꺼내는 것
<%=pageContext.getAttribute("pageContextValue") %>
<%=request.getAttribute("requestValue") %>
<%=session.getAttribute("sessionValue") %>
<%=application.getAttribute("applicationValue") %>

3-3. removeAttribute(String key)

  • key 값으로 등록되어 있는 key 와 value 를 모두 제거

0개의 댓글