Scope

ybong·2022년 2월 25일
0

웹 프로그래밍을 하다보면, 이미 약속된 객체들이 존재한다. 이 객체들의 범위가 어떻게 되느냐에 대해 알아볼 것이다.

Scope란?

4가지의 scope이 있다.

  • Application
    • 하나의 어플리케이션이 생성되어 소멸될 때까지 유지
  • Session
    • 세션객체가 생성되어 소멸될 때까지 유지
  • Request
    • 클라이언트가 요청하고 서버는 해당 요청에 대한 응답을 보낼 때, 이 과정까지 (하나의 요청~요청에대한응답까지) 사용할 수 있는 범위
  • Page
    • 서블릿이나 JSP나 그 한 페이지 내에서만 사용할 수 있는 범위

page scope

  • 특정 서블릿이나 JSP가 실행되는 동안에만 정보를 유지하고 싶을 때!
  • PageContext 추상클래스를 사용한다.
  • JSP 페이지에서 pageContext라는 내장 객체로 사용가능하다.
    • pageContext는 이 페이지가 이용될때까지만 존재한다.
  • forward가 될 경우, 이전 pageContext는 소멸되기때문에 사용이 불가하고, 넘어온 페이지의 pageContext가 생긴다. 이전 page scope에 지정된 변수는 사용할 수 없다.
    • *forward → 한 페이지에서 수행하고 동작을 그 다음 페이지로 넘기는것
  • 사용방법은 pageContext.getAttribute pageContext.setAttribute 로 사용,
  • 이 pageContext는 지역변수처럼, 한 페이지(jsp나 서블릿)가 유지될 때까지만 유지된다는 점이 다른 scope들과 다르다.
  • jsp에서 pageScope에 값을 저장한 후 해당 값을 EL표기법 등에서 사용할 때 사용된다.

request scope

request scope

  • http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지하고 싶을 때 사용한다.
  • HttpServletRequest 객체를 사용한다.
  • 모든 요청이 들어올 때 WAS가 request, response 객체를 만든다고 했다.
  • 요청이 들어와서 실행하고 응답이 나갈 때 만들어졌던 request, response 객체가 없어진다.
  • forward시 값을 유지하고자 사용한다.
  • 앞에서 forward에 대해 배울 때, forward하기 전에 request 객체의 setAttribute() 메서드로 값을 설정한 후, 서블릿이나 JSP에게 결과를 전달하여 값을 출력하도록 했는데, 이렇게 forward 되는 동안 값이 유지되는 것이 Request Scope을 이용했기 때문이다.

사용

  • JSP에서는 request 내장변수를 사용한다.
  • 서블릿에서는 HttpServletRequest 객체를 사용한다.
  • request.setAttribute() request.getAttribute()로 사용

session scope

session scope

  • 웹 브라우저별로 변수를 관리하고자 할 경우 사용
    • (클라이언트가 브라우저 - 여러개의 클라이언트일 수 있다)
    • 클라이언트마다 하나의 객체를 만들어서 관리하는 것이 session객체
    • session 객체는 상태정보를 유지하기 위해 사용한다.
    • 그렇기때문에 클라이언트마다 상태정보 각각 다름.
      • 로그인정보, 장바구니 등등 사용자별로 유지되어야 할 정보가 있을 때 사용한다.
  • 웹 브라우저간의 탭 간에는 세션정보가 공유되기때문에, 각각의 탭에서는 같은 세션정보를 사용할 수 있다.
  • HttpSession 인터페이스를 구현한 객체를 사용한다.
  • request scope보다 긺, 브라우저가 닫힐 때까지 세션이 유지된다.

사용

  • JSP에서는
    • session 내장변수를 사용한다.
  • 서블릿에서는
    • HttpServletRequestgetSession() 메서드를 이용해서 session 객체를 얻는다.
  • session.setAttribute session.getAttribute로 사용

application scope

웹어플리케이션이란?

  • 서버에는 여러 웹 어플리케이션이 있을 수 있는데, 이 웹 어플리케이션이란?
  • 이전 실습들에서, firstweb 같은 것이 하나의 웹어플리케이션 단위이다.
    (main→java→여기에 있는 패키지 하나가 웹어플 하나라 보면 됨)

application scope

  • application scope은 하나의 어플리케이션 안에 있는 한 객체라고 보면 된다.
    • 이 영역은 어플리케이션 하나 당 하나만 만들어진다. (어떤 클라이언트가 접근하던지간에 같은 어플리케이션이니까 하나의 객체를 사용)
  • 그렇기때문에 모든 클라이언트 공통으로 사용해야 할 값들이 있을 때 사용한다.
  • ServletContext 인터페이스를 구현한 객체를 사용한다.
  • jsp에서는
    • application 내장 객체를 이용한다. (그 객체를 가리키는 내장객체가 이미 약속되어있는것)
  • 서블릿에서는
    • getServletContext() 메서드를 이용하여 application 객체를 이용한다.

사용 (모든 scope들이 동일)

  • 값을 저장할 때는 application 객체의 setAttribute() 메서드를 사용
    • setAttribuㅈte(넣을때 정하는 이름, 넣을값) key-value인듯?
  • 값을 읽어들일 때는 application 객체의 getAttribute() 메서드를 사용

실습

  • Application scope 어떻게 얻어낼 수 있고, 값을 어떻게 저장하고 읽는 지 실습해보자.
  • JSP파일 먼저 실행하면 NULL임. Servlet 먼저 실행하고 나서 JSP 실행해줘야함 (Servlet에서 application - value를 초기화하기 때문)
profile
study blog

0개의 댓글