[JSP & Servlet] JSP 내장 객체

 

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으로 출력한다.