프로그래밍/Spring

[Spring] 7. JSP의 기본객체와 유효범위

브디크리 2023. 7. 31. 15:28

서론


이번에는 JSP의 기본객체와 유효범위에 대해서 알아보자


JSP 기본 객체


기본 객체 타입 설명
request javax.servlet.http.HttpServletRequest 요청 정보가 담겨있는 객체
response javax.servlet.http.HttpServletResponse 요청에 응답을 작성할 때 사용
session javax.servlet.http.HttpSession HTTP session을 구현한 객체,
세션 정보 저장에 사용
application javax.servlet.ServletContext Web Application 전체에서 공유하는 객체
config javax.servlet.ServletConfig JSP 페이지에 대한 설정 정보가 담긴 객체
page java.lang.Object JSP 페이지 객체 자신
pageContext javax.servlet.jsp.PageContext JSP 페이지의 context 정보를 제공
out javax.servlet.jsp.JspWriter 응답에 포함될 내용을 출력할 때 사용
exception java.lang.Throwable 예외가 발생했을 때 생성되는 예외 객체

유효범위(Scope) 와 속성 (Attribute)


  • HTTP 는 Stateless (상태 정보 저장 X) 이므로, 상태 정보를 저장하기 위한 저장소가 필요하다.

기본 객체(영역 객체) 유효 범위 설명
pageContext 1개 JSP 페이지 1. JSP페이지의 시작부터 끝까지
2. 해당 JSP 내부에서만 접근 가능
3. 페이지당 1개
request 1+ 개 JSP 페이지 1. 요청의 시작부터 응답까지
2. 요청마다 1개
session n개 JSP 페이지 1. Session의 시작부터 종료까지 (로그인 ~ 로그아웃)
2. 클라이언트마다 1개
application context 전체 1. Web Application의 시작부터 종료까지.
2. context 내부 어디서나 접근 가능
3. 모든 클라이언트가 공유
4. context마다 1개

1. pageContext


  • 지역변수 (Local Variable) 저장을 위해 사용한다.
     ※ JSP 기본 출력 형식 <%= lv %>를 사용하는 경우에는 상관없지만, EL (${lv})를 사용하는 경우에는 
    pageContext에 저장해 두어야 사용 가능하다.

  • 해당 페이지에서만 접근 가능
    login.jsp에서 write.jsp의 pageContext에  접근이 불가능하다. (반대의 경우도 마찬가지)

※ JSP Only : JSP 파일에는 pageContext가 내장되어 있다.


2. request


  • 요청을 받아서 응답하기 까지 객체가 유효

  • A.jsp -> B.jsp 로 forward 하게 되면, A.jsp와 B.jsp 둘 다 request 객체에 접근이 가능.

※ Servlet -> JSP : request.setAttribute("key", value); 로 전달
※ JSP -> Servlet : request.getAttribute("key"); 로 값 확인.


3. session


  • 클라이언트당 1개

  • HTTP는 Stateless인데, 로그인 후 게시물 작성등을 하기 위해 사용자의 신원을 인증한 결과등을 저장하여,
    다시 인증하는 과정을 생략하기 위해 사용

  • 클라이언트의 수만큼 세션객체가 생성되기 때문에, 서버 부담이 가장 크다.
    따라서, 최소한의 정보만 저장해야 한다. (여러 페이지에서 접근이 가능하여 편리하지만 사용에 유의)

※ request.getSession()을 통해 세션 객체를 얻음.
+ request.getSession().setAttribute("key", value); 로 값 저장

+ request.getSession().getAttribute("key"); 로 값 확인.


4. application


  • Web Application 전체에서 접근이 가능. 
  • 1개만 존재

※ request.getServletContext()을 통해 어플리케이션 객체를 얻음.
+ request.getServletContext().setAttribute("key", value); 로 값 저장

+ request.getServletContext().getAttribute("key"); 로 값 확인.


속성 관련 메서드


저장 : setAttribute(String name, Object value)

//지정된 값(value)을 지정된 속성 이름(name)으로 저장
void setAttribute(String name, Object value)

반환 : Object getAttribute(String name)

//지정된 이름(name)으러 저장된 속성의 값을 반환
Object getAttribute(String name)

삭제 : void removeAttribute(String name)

//지정된 이름(name)의 속성을 삭제
void removeAttribute(String name)

모든 속성 반환 : Enumeration getAttributeNames()

//기본 객체에 저장된 모든 속성의 이름을 반환
Enumeration getAttributeNames()