JSP 내장 객체란?
JSP는 실행되면 웹 컨테이너에 의해 Servlet 클래스로 변환되어 사용자의 요청을 수행한다.
JSP 내장 객체는 JSP가 Servlet으로 변화될 때 컨테이너가 자동으로 생성시키는 Servlet 멤버 변수를 말한다.
JSP를 지원하는 웹 컨테이너에서는 Servlet을 구현하는데 공통적으로 요구되는
- javax.servlet 패키지 아래 8개의 객체
- 예외처리를 위한 java.lang 패키지 아래 1개의 객체
를 제공한다.
JSP 내장 객체 직접 확인해 보기
JSP 파일이 실행되면 웹 컨테이너에 의해 다음 두 파일이 서버에 저장된다.
- Servlet 클래스로 변환된 자바 소스 파일(_jsp.java)
- 클래스 파일(_jsp.class)
Servlet 클래스를 살펴보면 JSP 페이지에서 우리가 선언하지 않았지만 웹 컨테이너가 자동적으로 pageContext, session, application, config, out 등의 객체들을 _jspService() 메서드 내부에 자동으로 구현한 모습을 볼 수 있다. (내장객체)
내장 객체 | Servlet Type | 설명 |
request | javax.servlet.http.HttpServletRequest | 클라이언트의 요청 정보를 저장 |
response | javax.servlet.http.HttpServletResponse | 응답 정보를 저장 |
pageContext | javax.servlet.jsp.PageContext | JSP 페이지에 대한 정보를 저장 |
session | javax.servlet.http.HttpSession | 세션 정보를 저장 |
application | javax.servlet.ServletContext | 컨텍스트 정보를 저장 |
out | javax.servlet.jsp.JspWriter | JSP 페이지에서 결과를 출력 |
config | javax.servlet.ServletConfig | JSP 페이지에 대한 설정 정보를 저장 |
page | java.lang.Object | JSP 페이지의 서블릿 인스턴스를 저장 |
exception | java.lang.Exception | 예외 발생 시 예외를 처리 |
JSP 내장 객체 각각 설명
request 객체
리턴 타입 | 메서드 명 | 설명 |
String | getParameter(String name) | name이란 이름으로 지정된 파라미터에 할당된 값을 리턴한다. 지정된 이름의 파라미터가 없으면 null을 리턴한다. |
String[ ] | getParameterValues(String name) | name이란 이름으로 지정된 파라미터의 모든 값을 String 배열로 리턴한다. |
Enumeration | getParameterNames() | 요청에 포함된 모든 파라미터 이름을 java.util.Enumeration 객체로 리턴한다. |
예시1)
이름<%=request.getParameter("name") %>
예시2)
<% String[] hobby = request.getParameterValues("hobby");
for(int i=0;i<hobby.length;i++){
%>
<%=hobby[i] %>
<% } %>
HTTP 헤더 정보와 관련된 메서드들
리턴 타입 | 메서드 명 | 설명 |
String | getHeader(String headerName) | HTTP 요청 헤더에 headerName으로 지정된 이름으로 할당된 값을 리턴한다. haderName으로 지정된 이름이 없을 경우 null을 리턴한다. |
Enumeration | getHeader(String headerName) | haederName으로 지정된 이름으로 할당된 모든 값을 java.jtil.Enumeration 객체로 리턴한다. |
Enumeration | getHeaderNames() | HTTP 요청 헤더에 포함된 모든 헤더 이름을 java.util.Enumeration 객체로 리턴한다. |
int | getIntHeader(String headerName) | headerName 헤더의 값을 int 타입으로 리턴한다. 헤더 값을 int로 변환할 수 없는 경우 예외가 발생하고 headerName 헤더가 없을 경우 -1을 리턴한다. |
세션 정보와 관련된 메서드들
리턴 타입 | 메서드 명 | 설명 |
HttpSession | getSession() | 요청한 클라이언트에 할당된 HttpSession 객체를 반환한다. 이전에 생성된 HttpSession 객체가 없으면 새로운 객체를 생성해 할당한다. |
HttpSession | getSession(Boolean create) | create가 true일 경우 getSession() 메서드와 동일한 결과를 리턴하지만 create를 false로 지정하면 이전에 생성된 HttpSession 객체가 없을 경우 null을 리턴한다. |
String | getRequestedSessionId() | 요청한 클라이언트에 지정된 세션의 ID를 문자열로 리턴한다. |
boolean | isRequestedSessionIdValid() | 요청에 포함된 클라이언트의 세션 ID가 유효하면 true를, 아니면 false를 리턴한다. |
쿠키, URL/URI, 요청 방식과 관련된 메서드들
리턴 타입 | 메서드 명 | 설명 |
Cookie[] | getCookies() | HTTP 요청 메시지의 헤더에 포함된 쿠키를 javax.servlet.http.Cookie 배열로 리턴한다. |
String | getServerName() | 서버의 도메인명을 문자열로 리턴한다. |
int | getServerPort() | 서버의 포트 번호를 int형으로 리턴한다. |
StringBuffer | getRequestURL() | 요청 URL을 StringBuffer로 리턴한다. |
String | getRequestURI() | 요청 URI를 문자열로 리턴한다. |
String | getQueryString() | 요청에 사용된 쿼리 문장을 문자열로 리턴한다. |
String | getRemoteHost() | 클라이언트의 호스트 이름을 문자열로 리턴한다. |
String | getRemoteAddr() | 클라이언트의 IP주소를 문자열로 리턴한다. |
String | getProtocol() | 요청에 사용된 프로토콜 이름을 문자열로 리턴한다. |
String | getMethod() | 요청에 사용된 요청 방식(GET, POST 등)을 문자열로 리턴한다. |
String | getContextPath() | 해당 JSP 페이지의 컨텍스트 경로를 문자열로 리턴한다. |
response 객체
리턴 타입 | 메서드명 | 설명 |
없음 | setHeader(String headerName, String headerValue) |
응답에 포함될 헤더 정보에 headerName의 이름으로 headerValue 값을 설정해 추가한다. |
없음 | addCookie(Cookie cookie) | javaxservlet.http.Cookie 타입의 쿠키 객체를 응답 헤더에 추가한다. |
없음 | sendRedirect(String url) | 지정된 URL로 요청을 재전송한다. |
없음 | setContentType(String type) | 응답 페이지의 contentType을 설정한다. |
pageContext 객체
- JSP 페이지와 관련된 프로그램에서 다른 내장 객체를 얻어낼 때 사용
- 현재 페이지의 요청과 응답의 제어권을 다른 페이지로 넘겨주는데 사용
pageContext 객체의 중요한 기능은 바로 request, session, application처럼 내장 객체의 속성을 제어하는 기능이다.
pageContext, request, session, application는 각각의 영역과 관련된 자신의 속성을 가질 수 있고 이를 통해 각각의 영역별로 속성 데이터를 공유할 수 있다. 이들은 4가지 내장 객체를 따로 영역 객체라고도 부른다.
이에 관련해서는 다음 포스팅에서 할 것이므로 이런게 있구나 정도로만 보면 된다.
리턴 타입 | 메서드 명 | 설명 |
ServletRequest | getRequest() | 클라이언트의 요청 정보를 담고 있는 객체를 리턴한다. (request 내장 객체를 리턴한다.) |
ServletResponse | getResponse() | 요청에 대한 응답 객체를 리턴한다. (response 내장 객체를 리턴한다.) |
JspWriter | getOut() | 응답 출력 스트림을 리턴한다. (out 내장 객체를 리턴한다.) |
Object | getPage() | 서블릿 인스턴스 객체를 리턴한다. (page 내장 객체를 리턴한다.) |
ServletConfig | getServletConfig() | 서블릿의 초기 설정 정보를 담고 있는 객체를 리턴한다. (config 내장 객체를 리턴한다.) |
ServletContext | getServletContext() | 서블릿의 실행 환경 정보를 담고 있는 객체를 리턴한다. (session 내장 객체를 리턴한다.) |
HttpSession | getSession() | 클라이언트의 세션 정보를 담고 있는 객체를 리턴한다.(session 내장 객체를 리턴한다.) |
없음 | forward(String url) | 현재 페이지의 요청과 응답에 관한 제어권을 URL로 지정된 주소로 영구적으로 넘긴다. forward된 페이지의 요청 처리가 종료되면 응답도 종료된다. |
없음 | include(String url) | 현재 페이지의 요청과 응답에 관한 제어권을 URL로 지정된 주소로 임시로 넘긴다. include된 페이지의 처리가 끝나면 제어권은 다시 원래의 페이지로 돌아온다. 따라서 include로 지정된 페이지의 내용을 원래 페이지에 삽입하는 효과를 가진다. |
session 객체
HTTP 프로토콜은 요청/응답의 구조로 되어있어서 서버가 요청에 대한 응답을 전송하고 나면 연결이 끊어지게 된다.
따라서 정보가 유지되어야 할 필요가 있는 경우를 위해 가상 연결이라는 개념의 세션이 등장하였고 JSP에서는 이러한 세션을 session 내장 객체를 이용하여 구현해 준다.
Servlet에서는 session 객체를 getSession() 메소드를 호출해서 얻어야 하지만 JSP에서는 굳이 메소드를 호출하지 않아도 내장 객체로 자동 생성되기 때문에 번거로움이 줄어든다.
뒤에 session 부분만 자세하게 한 번 다루도록 하겠다.
application 객체
application 객체는 javax.servlet.ServletContext 클래스를 상속받아 웹 커테이너가 구현하여 제공하는 객체로 해당 웹 어플리케이션의 실행 환경을 제공하는 서버의 정보와 서버측에 대한 정보를 얻어내거나 해당 어플리케이션의 이벤트 로그를 다루는 메서드들을 제공한다.
application 객체는 각 웹 어플리케이션 당 오직 단 하나만 생성되므로 해당 웹 어플리케이션 전체 영역에서 자원을 공유해야 할 때(ex. 방문자 수 등 통계) 사용한다.
리턴 타입 | 메서드 명 | 설명 |
int | getMajorVersion() | Servlet API 스펙의 Major 버전을 int로 리턴한다. |
int | getMinorVersion() | Servlet API 스펙의 Minor 버전을 int로 리턴한다. |
String | getServerInfo() | 서블릿/JSP 컨테이너의 이름과 버전을 문자열로 리턴한다. |
String | getMimeType(String file) | 서버에 존재하는 file이란 이름을 가진 파일의 MIME 타입을 문자열로 리턴한다. |
java.net.URL | getResource(String path) | path로 지정된 경로의 자원을 URL 객체로 리턴한다. 자원이 존재하지 않으면 null 리턴한다. |
InputStream | getResourceAsStream(String path) | path로 지정된 경로의 자원을 InputStream 객체로 리턴한다. 지원이 존재하지 않으면 null 리턴한다. |
String | getRealPath(String path) | path로 지정된 경로의 자원을 서버의 실제 파일 시스템상의 경로로 바꾸어 문자열로 리턴한다. |
없음 | log(String msg) | 문자열 msg를 서블릿 로그 파일에 기록한다. |
없음 | log(String msg, java.lang.Throwable exception) | 문자열 msg와 예외의 StackTrace 정보를 로그 파일에 기록한다. |
out 객체
out 객체는 JSP/Servlet 컨테이너가 응답 페이지를 만들기 위해 사용하는 출력 스트림 객체로 java.io.Writer 클래스를 상속한 javax.servlet.jsp.JspWriter 클래스 타입으로 생성된다.
JSP 기능의 핵심은 사용자의 요구에 맞는 응답 페이지를 만들어 내는 것이므로 이 응답 페이지를 만드는데 직접적으로 사용되는 out 객체는 가장 중요하고 빈번하게 사용되는 객체라 할 수 있다. 하지만 JSP 개발자가 이 out 객체를 사용하는 일은 빈번하지 않다. 그 이유는 out 객체를 사용하지 않고도 표현식을 이용하여 자바 코드의 변수 값들과 메소드의 리턴값들을 충분히 출력할 수 있기 때문이다.
표현식 태그와 out 객체의 print() 메서드는 그 처리 과정이 완전히 동일하다.
out 객체의 print() 메서드
표현식 태그
리턴 타입 | 메서드 명 | 설명 |
없음 | clear() | 출력 버퍼에 저장된 내용을 버린다. 만일 이미 버퍼가 다 채워져서 클라이언트로 전송되었을 경우에는 예외를 발생시킨다. |
없음 | clearBuffer() | 출력 버퍼에 저장된 내용을 버린다. clear() 메서드와는 다르게 버퍼에 담긴 내용이 이미 전송된 이후에도 예외를 발생시키지 않고 현재 저장되어 있는 버퍼만을 버린다. |
없음 | flush() | 현재 버퍼에 저장되어 있는 내용을 클라이언트로 전송하고 버퍼를 비운다. |
없음 | close() | 출력 버퍼를 클라이언트로 전송하고 출력 스트림을 종료한다. |
boolean | isAutoFlush() | page 지시어의 autoFlush 속성으로 지정된 값을 리턴한다. 즉 출력 버퍼가 다 채워졌을 때 버퍼 내용을 클라이언트로 전송하도록 지정되어 있으면 true를 리턴하고, 출력 버퍼가 다 채워졌을 때 예외가 발생하도록 지정되어 있으면 false를 리턴한다. |
int | getBufferSize() | 출력 버퍼의 크기를 바이트 단위로 계산하여 정수 값으로 리턴한다. |
int | getRemaining() | 출력 버퍼의 남은 양을 바이트 단위로 계산하여 정수 값으로 리턴한다. |
없음 | print(String str) | 출력 스트림으로 str 문자열을 출력한다. |
없음 | log(String msg, java.lang.Throwable exception) | 문자열 msg와 예외의 StackTrace 정보를 로그 파일에 기록한다. |
config 객체
config 내장 객체는 JSP 페이지가 서블릿 클래스로 변환되어 Servlet 인스턴스가 생성될 때 참조해야 할 초기 설정 정보들을 저장해 놓은 객체이다. 이러한 초기 설정 정보들은 웹 컨테이너가 구동될 때 내부에서 자체적으로 생성/관리되며 Servlet 당 1개만의 객체가 생성되며 같은 서블릿 인스턴스는 동일한 config 객체를 참조하게 된다.
리턴 타입 | 메서드 명 | 설명 |
String | getInitParameter(String init_paramName) | 컨테이너의 설정 파일에 저장되어 있는 초기 파라미터 값 중 init_paramName의 이름을 가진 파라미터 값을 리턴한다. init_paramName의 이름을 가진 파라미터가 없을 경우 null을 리턴한다. |
Enumeration | getInitParameterNames() | 컨테이너의 설정 파일에 저장되어 있는 모든 초기 파라미터 이름을 Enumeration 타입으로 리턴한다. |
String | getServletName() | 해당 서블릿의 이름을 문자열로 리턴한다. |
page 객체
page 객체는 JSP 페이지에 의해 생성되는 서블릿 인스턴스 자체를 나타내는 객체이다.
exception 객체
execption 객체는 JSP 페이지에서 예외가 발생하였을 경우 그 예외를 처리할 에러 페이지를 사용자가 지정한 경우에 해당 에러 페이지에 전달되는 예외 객체이다. exception 객체를 사용하기 위해서는 해당 페이지가 에러 페이지로 지정되어 있어야만 한다. 즉 page 지시어에 의해 isErrorPage 속성이 true로 지정되어 있어야만 사용 가능하며 isErrorPage 속성의 기본값은 false 이기 때문에 사용자가 true로 설정해 주어야 에러페이지로 지정된다. exception 객체는 java.lang.Throwable 클래스로 선언 된다.
리턴 타입 | 메서드 명 | 설명 |
String | getMessage() | 에러 메시지를 문자열로 리턴한다. |
없음 | printStackTrace() | 해당 에러의 StackTrace 정보를 출력 |
없음 | printStackTrace(PrintWriter out) | 해당 에러의 StackTrace 정보를 PrintWriter 객체 out으로 출력한다. |
없음 | printStackTrace(PrintStream out) | 해당 에러의 StackTrace 정보를 PrintStream 객체 out으로 출력한다. |
'JSP & Servlet > 개념' 카테고리의 다른 글
[JSP] JSP 액션 태그 (0) | 2022.03.29 |
---|---|
[JSP] JSP 영역 객체 (application, session, request, pageContext) (0) | 2022.03.29 |
[JSP] JSP 스크립트 요소 (선언문, 스크립틀릿, 표현식) (0) | 2022.03.28 |
[JSP] JSP 지시어 (0) | 2022.03.28 |
[JSP] JSP 주석 (0) | 2022.03.28 |