프로그래밍/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()