새소식

인기 검색어

개인공부/JSP

JSP 기본객체

  • -

JSP 기본객체

JSP 페이지에서는 직접 선언하지 않아도 사용 가능한 여러가지의 기본 객체들이 존재합니다.
이러한 기본 객체들은 JSP 페이지가 실행될때 필요에 따라 사용 가능 하도록 기능별로 나눈 것입니다.
 
직접 선언되지 않고도 기본 객체들을 사용할 수 있는 이유는 JSP가 JSP 컨테이너에 의해 Servlet 클래스로 변환되는 시점에 자동으로 기본객체 인스턴스를 만들어주기 때문입니다.
 
 
예를 들어 request 기본객체와 response 기본객체의 경우 Servlet으로 변환될 때 _jspService(request, response) 메서드의 매개변수로 넘어오로록 약속 되어 있기 때문에 우리는 request와 response 참조변수를 곧바로 이용 가능합니다. 즉 JSP 페이지의 코드에는 기본객체를 new(인스턴스화) 하는 코드가 나타나 있지 않지만 변환된 Servlet 클래스를 보면 기본 객체들을 생성하는 로직이 들어가 있음을 알 수 있습니다.
 
이러한 명세는 Servlet/JSP 스펙에 명시되어 있는 동작이므로 해당 스펙을 구현한 WAS에서 JSP를 작성하는 경우 사용 가능합니다.
다음의 글을 통해 JSP가 Servlet으로 변환되는 과정을 이해한다면 기본 객체를 어떻게 이용 가능한 것인지 원리를 알 수 있습니다.
 
기본 객체 종류
JSP에는 다음과 같은 기본 객체들이 있습니다. 각 기본 객체들의 종류와 설명입니다.
다음의 기본 객체는 모든 JSP 페이지에서 사용 가능하지만 exception 객체의 경우에는 에러 페이지로 지정된 JSP 페이지에서만 사용 가능합니다.
기본 객체
클래스
설명
request
javax.servlet.http.HttpServletRequest
클라이언트의 요청 정보를 처리할 수 있습니다.
response
javax.servlet.http.HttpServletResponse
클라이언트에게 보낼 응답 정보를 처리할 수 있습니다.
pageContext
javax.servlet.jsp.PageContext
JSP 페이지에 대한 정보를 저장하는데 사용합니다.
application
javax.servlet.ServletContext
JSP 페이지가 속한 웹 어플리케이션에 대한 정보를 저장합니다.
session
javax.servlet.http.HttpSession
HTTP 세션 정보를 다루는데 사용합니다.
out
javax.servlet.jsp.JspWriter
JSP 페이지에서 클라이언트로 데이터를 출력할 때 사용하는 출력 스트림입니다.
config
javax.servlet.ServletConfig
JSP 페이지에서 사용하는 설정 정보를 저장합니다.
page
java.lang.Object page
JSP 페이지를 구현한 자바 클래스의 인스턴스 입니다.
exception
java.lang.Throwable
예외 객체입니다. 현재 JSP 페이지가 예외 페이지인 경우에만 사용합니다.

 


 

기본 객체별 생명 주기 scope

JSP에는 request, pageContext, application, session 등의 여러 기본 객체들이 있습니다. 기본 객체들 중 방금 말했던 네가지의 기본 객체들은 각각 다음 설명하는 클래스들의 인스턴스(객체)인데, 이들은 각기 서로 다른 생명 주기를 가지고 생성되며, 소멸 되어집니다.
기본 객체
클래스
생성 범위(scope)
 
 
request
 
 
javax.servlet.http.HttpServletRequest
클라이언트가 HTTP 요청시마다 생성되고 결과를 응답할 때 사라집니다. 즉 세 번의 요청이 있으면 세 개의 request 객체가 생성됩니다. 최종 결과를 응답(출력) 할때까지는 소멸되지 않기 때문에 JSP에서 forward 또는 include 하는 페이지에서도 scope가 공유됩니다.
pageContext
javax.servlet.jsp.PageContext
JSP 페이지를 요청했을때 JSP 페이지를 처리하는 범위동안 생성됩니다. 오로지 하나의 JSP 페이지에서만 범위를 갖기 때문에 request 객체보다 범위가 작습니다.
application
javax.servlet.ServletContext
웹 어플리케이션 범위를 가지며, 웹 어플리케이션이 시작될 때 생성되었다가 웹 어플리케이션이 종료될 때 소멸됩니다. 따라서 모든 JSP 페이지에서 같이 공유할 수 있는 범위입니다.
 
 
session
 
 
javax.servlet.http.HttpSession
브라우저 단위로 생성됩니다. 즉 하나의 컴퓨터에서 Internet Explorer와 Chrome을 각각 두 개 띄워 웹서버에 접근했다면 세션은 두 개 생성되며, 브라우저가 종료될때까지 해당 웹 어플리케이션에 대한 세션은 소멸되지 않습니다.
 
기본 객체를 통한 데이터 공유
앞에서 설명한 각각의 기본객체의 공통점은 데이터를 저장하고 빼내올 수 있는 메서드들을 제공한다는 점 입니다. 각 객체들은 다음의 공통적인 메서드들을 통해 Scope에 따라 데이터를 공유할 수 있습니다.
메서드
설명
void setAttribute(String name, Object value)
name을 key로 하는 데이터를 저장하는 경우 사용합니다. Object 타입으로 매개변수를 받기 때문에 모든 클래스 타입의 객체를 저장할 수 있습니다. 같은 name에 대해서 여러번 메서드를 호출하며 나중에 저장한 데이터로 덮어 씌워집니다.
Object getAttribute(String name)
name에 해당하는 저장 데이터를 가져옵니다. 이전에 setAttribute()로 저장한 데이터를 반대로 name을 key로 해서 가져오는 메서드입니다. 단 Object 타입으로 리턴되므로 원래 클래스 타입으로 캐스팅(형변환)하여 사용합니다. key에 해당하는 값이 없는 경우 null을 리턴합니다.
void removeAttribute(String name)
name에 해당하는 저장 데이터를 제거합니다. 이전에 setAttribute()로 저장한 데이터를 name을 key로 해서 제거 하는 메서드입니다.
 
request 객체로 setAttribute() 이후 getAttribute()
      <%
            request.setAttribute("age"30);
            System.out.println((Integer)request.getAttribute("age"));  //30 리턴
      %>
 

생명 주기에 따른 공유 범위(Scope)

앞 네 개의 기본 객체는 서로 다른 생존 범위를 가지고 있습니다. 그에 따라 웹어플리케이션 전역에서 데이터를 공유할 수 있는가 하면, 클라이언트로부터의 요청시에 생성되고 곧바로 소멸되어 하나의 요청 범위 안에서만 데이터를 공유하기도 합니다. 다음의 그림은 네 개의 기본 객체가 데이터를 공유할 수 있는 범위 즉 생존 범위를 나타낸 것입니다.
 
 
request 범위
request 범위는 웹 브라우저에서 요청한 하나의 HTTP request에 대한 범위를 가집니다. HTTP 프로토콜은 클라이언트가 request 메시지를 보내면 웹서버에서 response 메시지를 보냅니다. 이 하나의 작업 단위를 http 트랜잭션이라고 하는데, request객체는 이 한번의 트랜잭션 안에서 request에 대한 범위를 가집니다. 즉 같은 브라우저에서 F5 버튼을 통해 여러번의 새로고침을 하는 경우라 할지라도 각각 다른 request 객체를 생성하기 때문에 각각 다른 범위를 가집니다.
 
다음과 같이 JSP 페이지를 한 번 요청하게 되면 하나의 request 객체가 생성됩니다. JSP 페이지가 처리한 결과를 브라우저로 되돌려주면 생성되었던 request 객체는 소멸됩니다.

 

 
아래와 같이 JSP 페이지1을 요청한 경우에 request 객체가 하나 생성되는데 JSP 페이지1이 JSP 페이지2에 include나 forward를 사용하여 결과를 처리하는 경우에도 하나의 request 객체 범위를 갖게 됩니다. 즉 request 객체는 최종 처리 결과가 만들어져 브라우저에게 출력할 때 까지 살아있게 되므로 이 사이에서 처리에 참여하는 JSP 페이지1, 2 모두 하나의 request 객체를 공유하게 되는 것입니다.
 
pageContext 범위
pageContext는 하나의 JSP 페이지에 대한 범위를 가지게 됩니다. 앞서 reqeust를 설명할 때와 같은 상황에서 request 객체는 최종 응답 직전에 여러 JSP 페이지가 처리를 하는 경우 하나의 reqeust 객체를 공유한다고 했습니다. pageContext의 경우에는 다음과 같이 두 개의 JSP 페이지가 처리를 하는 경우 두 개의 pageContext 객체가 각각 생성되는 차이가 있습니다. 즉 페이지1과 페이지2는 각각의 pageContext 객체를 가지게 되므로 pageContext 객체로는 서로 데이터를 공유할 수 없고 request 객체를 통해서 공유하거나, 나중에 설명할 session이나 application 객체를 통해서 공유해야 합니다.

 

session 범위
session은 브라우저당 하나가 생성되는 객체입니다. 즉 하나의 컴퓨터에서 Internet Explorer, Chrome 두 개의 브라우저로 서버에 접속하면 두 개의 session 객체가 생성되며, 각각의 브라우저를 종료할 때까지 객체가 소멸되지 않습니다. 즉 서버에 여러개의 요청을 하는 경우에도 하나의 브라우저로부터 요청한 것이라면 session 객체를 통해 서로 데이터를 공유할 수 있습니다.
 
application 범위
application 객체는 웹 어플리케이션마다 하나씩 생성됩니다. 웹 어플리케이션이 시작될 때 생성되어 웹 어플리케이션이 종료될 때 소멸되고, 하나의 웹 어플리케이션 안에서라면 어디서든 공유될 수 있습니다. 웹 어플리케이션이라 함은 톰캣의 webapps 하위에 있는 각각의 어플리케이션들을 말합니다.

 

 

[서블릿/JSP] JSP 기본객체 종류

JSP 기본객체 JSP 페이지에서는 직접 선언하지 않아도 사용 가능한 여러가지의 기본 객체들이 존재합니다. 이러한 기본 객체들은 JSP 페이지가 실행될때 필요에 따라 사용 가능 하도록 기능별로

dololak.tistory.com

 

'개인공부 > JSP' 카테고리의 다른 글

HTTP 에러코드 . 응답코드 . 상태코드 종류  (0) 2022.09.16
HTTP HTTPS 차이점  (1) 2022.09.16
JSP 스크립트 요소(선언문, 표현식, 스크립틀릿)  (0) 2022.09.16
RequestDispatcher  (0) 2022.09.15
객체 범위  (0) 2022.09.15
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.