내장객체는 JSP 페이지 내에서 제공하는 특수한 레퍼런스 타입의 변수로, 사용하고자 하는 변수와 메소드로 접근한다. JSP 페이지에서 사용하게 되는 특수한 레퍼런스 타입의 변수는 선언과 객체 생성 없이 사용할 수 있다. 이유는 JSP 페이지가 서블릿으로 변환될 때 JSP 컨테이너가 자동적으로 제공하기 때문이다.
public void _jspService(final ...request, final ...response) throws ...ServletException {
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
}
위와 같이 _jspService라는 메서드에 매개변수로 request와 resoponse가 있고, 아래에 객체들이 변수로 선언되어있다. 따라서 이 객체명들은 jsp 내에서 <% String out = "선언" %>과 같이 변수명으로 이용할 수 없다.
내장객체의 종류는 9가지로, 다음과 같다.
사진 출처 : https://velog.io/@ansalstmd/JSP5.-%EB%82%B4%EC%9E%A5-%EA%B0%9D%EC%B2%B4
기본적으로 request, session, application, pageContext 내장객체는 속성(attribute)값을 저장하고 읽을 수 있는 메소드인 setAttribute() 메소드와 getAttribute() 메소드를 제공한다. 속성값을 저장하고 읽을 수 있는 기능은 내장객체를 사용해서 JSP 페이지들 및 서블릿 간에 정보를 주고받을 수 있게 해준다. 아래에서 소개하는 것들은 주로 사용하는 내장객체들이다.
request
request는 http 헤더와 http 바디로 구성되어있다. JSP 페이지에서는 HttpServletRequest 객체를 request 객체명으로 사용한다.
response
response는 브라우저로 응답할 정보를 가지고 있다.
out
JSP 페이지가 웹 브라우저에게 보내는 모든 정보는 out 객체를 통해서 전송된다. 여기서 모든 정보는 JSP 스크립트 요소뿐만 아니라 비스크립트 요소인 HTML, 일반 텍스트들도 모두 포함된다.
표현식(<%=문장%>)과 out.println()은 둘 다 브라우저에 출력시키는 똑같은 역할을 수행한다. JSP 페이지가 서블릿으로 변환될 때 <%=문장%> 부분은 out.println("문장")으로 변환되어 실행된다.
session
session은 웹 브라우저의 요청 시, 요청한 웹 브라우저에 관한 정보를 저장하고 관리하는 내장객체이다. session 내장객체는 웹 브라우저(클라이언트)당 1개가 할당된다. 따라서 주로 회원관리 시스템에서 사용자 인증에 관련된 작업을 수행할 때 사용된다. 일반적으로 setAttribute()와 getAttribute()로 관리하며, 웹 컨테이너가 기본적으로 session을 만들어주기 때문에 만약 session을 사용하고 싶지 않다면 지시자에서 <%@ page session = false %>로 지정해주면 된다.
exception
exception은 JSP 페이지에서 예외가 발생하였을 경우, 예외를 처리할 페이지에 전달되는 객체이다. exception 객체는 페이지 지시자에서 <%@ page isErrorPage = true %>로 지정한 JSP 페이지에서만 사용 가능하다.