7장 JSP페이지의 내장객체(Implicit Object)와 영역(Scope) 이장에서 배울 내용 : 웹 컨테이너는 JSP 페이지에서 상황에 따라 필수적으로 사용되는 9개의 객체를 객체의 생성 없이 바로 사용할 수 있도록 제공 한다. 이들 객체들을 JSP의 내장객체(Implicit Object)라고 부르는데, 이번 장에서는 이들 기본 객체가 무엇이며 어떻게 쓰이지는 그리고 이들의 영역에 대해 학습한다. 김은옥(oda94@naver.com)
목차 내장객체의 개요 내장객체의 종류 내장객체의 영역
내장객체의 개요 내장 객체 (Implicit Object) 는 JSP 페이지 내에서 제공하는 특수한 레퍼런스 타입의 변수로 사용하고자 하는 변수와 메소드에 접근 JSP 페이지에서 사용하는 특수한 레퍼런스 타입의 변수는 선언과 객체 생성 없이 사용 할 수 있음. JSP 페이지가 서블릿으로 변환이 될 때, JSP 컨테이너가 자동적으로 제공을 하기 때문.
내장객체의 개요 JSP 페이지의 내장 객체 내장 객체 리턴 타입(Return Type) 설명 request javax.servlet.http.HttpServletRequest 또는 javax.servlet.ServletRequest 웹 브라우저의 요청 정보를 저장하고 있는 객체이다. response javax.servlet.http.HttpServletResponse 또는 javax.servlet.ServletResponse 웹 브라우저의 요청에 대한 응답 정보를 저장하고 있는 객체이다. out javax.servlet.jsp.JspWriter JSP페이지 출력할 내용을 가지도 있는 출력 스트림 객체이다. session javax.servlet.http.HttpSession 하나의 웹 브라우저 내에서 정보를 유지하기 위한 세션 정보를 저장하고 있는 객체이다. application javax.servlet.ServletContext 웹 어플리케이션 Context의 정보를 저장하고 있는 객체이다. pageContext javax.servlet.jsp.PageContext JSP페이지 대한 정보를 저장하고 있는 객체이다. page java.lang.Object JSP 페이지를 구현한 자바 클래스 객체이다 config javax.servlet.ServletConfig JSP페이지 대한 설정정보를 저장하고 있는 객체이다 exception java.lang.Throwable JSP 페이지에서 예외가 발생한 경우에 사용되는 객체이다
내장객체의 개요 request, session, application, pageContext 내장 객체는 속성(attribute)값을 저장하고 읽을 수 있는 메소드인 setAttribute()메소드와 getAttribute()메소드를 제공. 속성 값을 저장하고 읽을 수 있는 기능은 내장객체를 사용해서 JSP 페이지들 및 서블릿 간에 정보를 주고받을 수 있게 해 줌.
내장객체의 개요 내장 객체의 속성(attribute) 관련된 메소드 메소드 : 리턴 타입 setAttribute(String key, Object value) : void 해당 내장객체의 속성(attribute)값을 설정하는 메소드로, 속성명에 해당하는 key매개변수에, 속성 값에 해당하는 value매개변수의 값을 지정한다. getAttributeNames() : java.util.Enumeration 해당 내장객체의 속성(attribute)명을 읽어오는 메소드로 모든 속성의 이름을 얻어낸다. getAttribute(String key) : Object 해당 내장객체의 속성(attribute)명을 읽어오는 메소드로, 주어진 key매개변수에 해당하는 속성 값을 얻어낸다. removeAttribute(String key) : void 해당 내장객체의 속성(attribute)을 제거하는 메소드로, 주어진 key매개변수에 해당하는 속성명을 제거한다.
내장객체의 종류 request 내장객체 request 객체는 웹 브라우저에서 JSP 페이지로 전달되는 정보의 모임. 웹 컨테이너는 요청된 HTTP 메시지를 통해 HttpServletRequest 객체를 얻어내고, 이 객체로부터 사용자의 요구사항을 얻어냄. JSP페이지에서는 HttpServletRequest 객체를 request 객체명으로 사용.
내장객체의 개요 request 객체에서 사용자의 요구사항을 얻어내는 요청 메소드 메소드 : 리턴타입 getParameter(name) : String 파라메터 변수 name에 저장된 변수 값을 얻어내는 메소드로, 파라메터 변수 name에 해당하는 변수명이 없으면 null값을 리턴 한다. getParameterValues(name) : String[] 파라메터 변수 name에 저장된 모든 변수 값을 얻어내는 메소드로, 이때 변수의 값은 String 배열로 리턴 된다. checkbox에서 주로 사용된다. getParameterNames() : Enumeration 요청에 의해 넘어오는 모든 파라미터 변수를 java.util.Enumeration 타입으로 리턴 한다. 변수가 가진 객체들을 저장해야하기 때문에 컬렉션인 Enumeration 타입을 사용했다.
내장객체의 개요 request 객체의 웹 브라우저, 웹 서버 및 요청 헤더의 정보를 가져올 때 사용되는 메소드 메소드 : 리턴타입 getProtocol() : String 웹 서버로 요청 시, 사용 중인 프로토콜을 리턴 한다. getServerName() : String 웹 서버로 요청 시, 서버의 도메인 이름을 리턴 한다. getMethod() : String 웹 서버로 요청 시, 요청에 사용된 요청 방식(GET, POST, PUT등)을 리턴 한다. getQueryString() : String 웹 서버로 요청 시, 요청에 사용된 QueryString을 리턴 한다. getRequestURI() : String 웹 서버로 요청 시, 요청에 사용된 URL로부터 URI값을 리턴 한다.
내장객체의 개요 request 객체의 웹 브라우저, 웹 서버 및 요청 헤더의 정보를 가져올 때 사용되는 메소드 메소드 : 리턴타입 getProtocol() : String 웹 서버로 요청 시, 사용 중인 프로토콜을 리턴 한다. getServerName() : String 웹 서버로 요청 시, 서버의 도메인 이름을 리턴 한다. getMethod() : String 웹 서버로 요청 시, 요청에 사용된 요청 방식(GET, POST, PUT등)을 리턴 한다. getQueryString() : String 웹 서버로 요청 시, 요청에 사용된 QueryString을 리턴 한다. getRequestURI() : String 웹 서버로 요청 시, 요청에 사용된 URL로부터 URI값을 리턴 한다.
내장객체의 개요 메소드 : 리턴타입 getRemoteHost() : String 웹 서버로 정보를 요청한 웹 브라우저의 호스트 이름을 리턴 한다. getRemoteAddr() : String 웹 서버로 정보를 요청한 웹 브라우저의 IP주소를 리턴 한다. getServerPort() : int 웹 서버로 요청 시, 서버의 Port번호를 리턴 한다. getContextPath() : String 해당 JSP페이지가 속한 웹 어플리케이션의 컨텍스트 경로를 리턴 한다. getHeader(name) : String 웹 서버로 요청 시, HTTP 요청 헤더(header) 헤더이름 name에 해당하는 속성 값을 리턴 한다. getHeaderNames() : Enumeration 웹 서버로 요청 시, HTTP 요청 헤더(header)에 있는 모든 헤더이름을 리턴 한다.
내장객체의 개요 response 객체는 웹 브라우저로 응답할 응답 정보를 가짐. 웹 브라우저에 보내는 응답정보는 HttpServletResponse 객체를 사용하는데, JSP에서는 response 객체를 사용. response 객체는 응답 정보와 관련하여 주로 헤더 정보 입력, 리다이렉트 하기 등의 기능을 제공.
내장객체의 개요 response 객체에서 자주 사용되는 헤더 정보 입력과 리다이렉트에 관련된 메소드 메소드 설명 void setHeader(name, value) 헤더정보의 값을 수정하는 메소드로, name에 해당하는 헤더정보를 value값으로 설정한다. void setContentType(type) 웹 브라우저의 요청의 결과로 보일 페이지의 contentType을 설정한다. void sendRedirect(url) 페이지를 이동시키는 메소드로, url로 주어진 페이지로 제어가 이동한다.
내장객체의 개요 out 내장 객체 JSP 페이지가 생성한 결과를 웹 브라우저에 전송해 주는 출력 스트림 JSP 페이지가 웹 브라우저에게 보내는 모든 정보는 out 객체로 통해서 전송. 여기서 모든 정보는 JSP 스크립트요소 뿐만 아니라 비 스크립트요소인 HTML, 일반텍스트도 모두 포함. out객체는 javax.servlet.jsp.JspWriter 클래스 타입으로 JSP에서는 out 객체로 사용. 주로 많이 사용되는 메소드는 웹 브라우저에 출력을 하기 위한 println( ) 메소드.
내장객체의 개요 out 내장 객체의 메소드 메소드 - 설명 isAutoFlush() : boolean - 출력 버퍼가 다 찼을 때 처리여부를 결정하는 것으로, 자동으로 플러시(출력해서 비우기) 할 경우에는 true를 리턴하고, 그렇지 않을 경우 false를 리턴 한다. getBufferSize() : int - 출력 버퍼의 전체 크기를 리턴 한다. getRemaining() : int - 현재 남아 있는 출력 버퍼의 크기를 리턴 한다. clearBuffer() : void - 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하지 않고 비운다. println(str) : String - 주어진 str값을 웹 브라우저에 출력한다. 이때 줄 바꿈은 적용되지 않는다. flush() : void - 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하고 비운다. close() : void - 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하고 출력스트림을 닫는다.
내장객체의 종류 pageContext 내장객체 pageContext 객체는 현재 JSP 페이지의 컨텍스트(Context)를 나타내며, 주로 다른 내장객체를 구하거나, 페이지의 흐름제어 그리고 에러데이터를 얻어낼 때 사용. javax.servlet.jsp.PageContext객체 타입으로, JSP에서는 pageContext객체로 사용.
내장객체의 종류 pageContext 내장 객체의 메소드 메소드 : 리턴 타입 getRequest() : ServletRequest 페이지 요청 정보를 가지고 있는 request 내장 객체를 리턴 한다. getResopnse() : ServletResponse 페이지 요청에 대한 응답 정보를 가지고 있는 response 내장 객체를 리턴 한다. getOut() : JspWriter 페이지 요청에 대한 출력 스트림인 out 내장 객체를 리턴 한다. getSession() : HttpSession 요청한 웹 브라우저의 세션 정보를 담고 있는 session 내장 객체를 리턴 한다. getServletContext() : ServletContext 페이지에 대한 서블릿 실행 환경 정보를 담고 있는 application 내장 객체를 리턴 한다. getPage() : Object page 내장 객체를 리턴 한다. getServletConfig() : ServletConfig 해당 페이지의 서블릿 초기 정보 설정 정보를 담고 있는 config 내장 객체를 리턴 한다. getException() : Exception 페이지 실행 중에 발생되는 에러 페이지에 대한 예외정보를 갖고 있는 exception 내장 객체를 리턴 한다.
내장객체의 종류 session 내장객체 요청한 웹 브라우저에 관한 정보를 저장하고 관리하는 내장 객체 session 객체는 javax.servlet.http.HttpSession 객체 타입으로, JSP에서는 session 객체로 사용. session 객체는 웹 브라우저(클라이언트)당 1개가 할당. 따라서 주로 회원관리 시스템에서 사용자 인증에 관련된 작업을 수행할 때 사용.
내장객체의 종류 session 내장 객체의 메소드 메소드 : 리턴 타입 getId() : String getCreationTime() : long 해당 세션이 생성된 시간을 리턴 한다. getLastAccessedTime() : long 웹 브라우저의 요청이 시도된 마지막 접근시간을 리턴 한다. setMaxInactiveInterval(time) : void 해당 세션을 유지할 시간을 초단위로 설정한다. getMaxInactiveInterval() : int 기본 값은 30분으로 setMaxInactiveInterval(time) 로 지정된 값을 리턴 한다. isNew() : boolean 현재의 웹 브라우저가 새로 불려진 즉, 새로 생성된 세션의 경우 true 값을 리턴 한다. invalidate() : void 현재 정보의 유지로 설정된 세션의 속성 값을 모두 제거한다. 주로 세션을 무효화시킬 때 사용된다.
내장객체의 종류 application 내장객체 웹 어플리케이션의 설정정보를 갖는 context와 관련이 있는 객체로 웹 어플리케이션과 연관됨. application 객체는 웹 어플리케이션이 실행되는 서버 의 설정 정보 및 자원에 대한 정보를 얻어내거나, 어플리케이션이 실행되고 있는 동안에 발생할 수 있는 이벤트 로그 정보와 관련된 기능들을 제공. application 기본 객체는 웹 어플리케이션 당 1개의 객체가 생성. 하나의 웹 어플리케이션에서 공유하는 변수로 사용된다. 웹 사이트의 방문자 기록을 카운트할 때 사용. application 객체는 javax.servlet.ServletContext 객체 타입으로 제공하고 application 객체 형태로 사용.
내장객체의 종류 application 객체 관련 메소드 메소드 : 리턴 타입 getServerInfo() : String 웹 컨테이너의 이름과 버전을 리턴 한다. getMimeType(fileName) : String 지정한 파일의 MIME 타입을 리턴 한다. RealPath(path) : String 지정한 경로를 웹 어플리케이션 시스템상의 경로로 변경하여 리턴 한다. log(message) : void 로그 파일에 message를 기록한다.
내장객체의 종류 config 내장객체 config 내장 객체는 javax.sevlet.ServletConfig 객체타입. 서블릿이 초기화될 때 참조해야 하는 정보를 가지고 있다가 전달. config 내장 객체는 컨테이너당 1개의 객체가 생성. 같은 컨테이너에서 서비스되는 모든 페이지는 같은 객체를 공유
내장객체의 종류 config 내장 객체의 메소드 메소드 : 리턴 타입 getInitParameterNames() : Enumeration 모든 초기화 파라미터 이름을 리턴 한다. getInitParameter(name) : String 이름이 name인 초기화 파라미터의 값을 리턴 한다. getServletName() : String 서블릿의 이름을 리턴 한다. getServletContext() : ServletContext 실행하는 서블릿 ServletContext 객체를 리턴 한다.
내장객체의 종류 page 내장 객체 JSP 페이지 그 자체를 나타내는 객체 JSP 페이지 내에서 page 객체는 this 키워드(this : 자바에서 자기 자신을 가리키는 레퍼런스)로 자기 자신을 참조할 수 가 있음. page 객체는 javax.servlet.jsp.HttpJspPage 객체 타입으로 JSP 내장 객체이다. 웹 컨테이너는 자바만을 스크립트 언어로 지원하기 때문에 page 객체는 현재 거의 사용 되지 않는 내장 객체.
내장객체의 종류 exception 내장객체 JSP 페이지에서 예외가 발생하였을 경우, 예외를 처리할 페이지에 전달되는 객체. exception 객체는 page 디렉티브의 isErrorPage 속성을 true로 지정한 JSP 페이지에서만 사용 가능한 내장 객체로, java.lang.Throwable 객체 타입.
내장객체의 종류 exception 내장 객체의 메소드 메소드 : 리턴 타입 getMessage() : String 발생된 예외의 메시지를 리턴 한다. toString() : String 발생된 예외 클래스명과 메시지 리턴 한다. printStackTrace() : String 발생된 예외를 역추적하기 위해 표준 예외 스트림을 출력한다. 예외발생시 예외가 발생한 곳을 알아낼 때 주로 사용된다.
내장객체의 영역 웹 어플리케이션은 page, request, session, application 이라는 4개의 영역을 가지고 있음. 내장 객체의 영역은 객체의 유효기간이라고도 불리며, 객체 공유 범위 page영역 한 번의 웹 브라우저(클라이언트)의 요청에 대해 하나의 JSP페이지가 호출. 웹 브라우저의 요청이 들어오면 이때 단 한 개의 페이지만 대응. page영역은 객체를 하나의 페이지 내에서만 공유. page영역은 pageContext내장 객체를 사용한다.
내장객체의 영역 request영역 한 번의 웹 브라우저(클라이언트)의 요청에 대해 같은 요청을 공유하는 페이지가 대응. include 액션 태그, forward 액션 태그를 사용하면 request 기본객체를 공유하게 되어서 같은 request영역이 됨. 주로 페이지 모듈화에 사용. request영역은 request 기본 객체를 사용한다.
내장객체의 영역 session영역 웹 브라우저 당 1개의 session객체가 생성 같은 웹 브라우저 내에서는 요청되는 페이지 들은 같은 객체를 공유 주로 회원관리에서 회원인증에 사용. session영역은 session 내장 객체를 사용.
내장객체의 영역 application영역 하나의 웹 어플리케이션 당 1개의 application 객체가 생성. 같은 웹 어플리케이션에 요청되는 페이지들은 같은 객체를 공유. application영역은 application 기본 객체를 사용한다.