# JSP 디폴트 객체
□ JSP 디폴트 객체
□ 디폴트 객체가 사용되는 스코프(Scope)
■ page
- 한 JSP 페이지에서만 사용 가능.
- 스코프가 page인 디폴트 객체 : response, out, config, page, execption
■ request
- 다른 페이지로 전달(이동, Forward)되는 경우에 이동된 페이지에서도 사용 가능.
- 스코프가 request인 디폴트 객체 : request
■ session
- 세션이 사용되는 한, 여러 페이지에서 사용 가능.
- 예> 로그인 정보를 session 객체에 저장하고, 각 JSP 페이지에서 session에 저장된 로그인 정보를 보고 서비스를 제공하는 것.
- 스코프가 session인 디폴트 객체 : session
■ application
- 웹 응용프로그램에 소속된 모든 페이지들이 사용 가능.
- 웹 응용프로그램 전체에서 사용해야 하는 정보를 저장하고 사용하기 위해 이용.
- 스코프가 application인 디폴트 객체 : application
□ 디폴트 객체 분류
- JSP 페이지에 관련된 객체 : page, config
- 페이지 입출력에 관련된 객체 : request, response, out
- 컨텍스트에 관련된 객체 : session, application, pageContext
- 에러에 관련된 객체 : exception
□ 디폴트 객체
■ page 객체
○ 특징
- HttpJspPage 인터페이스를 구현.
- Object로부터 상속받는 클래스의 인스턴스.
- 톰캣은 JSP 페이지를 HttpJspPage 인터페이스를 구현하는 서블릿 클래스로 변환.
- JSP 페이지 자신을 표현하기 위한것. (현재 JSP 페이지에 선언된 모든 메소드들과 속성 값에 접근할 수 있는 방법 제공.)
○ 메소드
● void jspInit()
- JSP 페이지가 초기화 될 때 한 번 호출됨.
● void jspDestroy()
- JSP 페이지가 삭제될 때 호출 됨.
■ config 객체
○ 특징
- ServletConfig 타입.
- 서블릿의 구성 정보에 접근할 수 있는 방법 제공.
- JSP 페이지에서는 jspInit() 메소드에서 필요한 초기화 파라미터 값들을 읽을 수 있음.
■ request 객체
○ 특징
- HttpServletRequest 타입.
- 클라이언트(웹 브라우저)의 요청을 표현하기 위한 객체.
- JSP 페이지에서는 request 객체를 이용해서 웹 브라우저의 요청과 관련된 데이터에 접근.
- <jsp:forward>와 <jsp:include>를 사용해 request 객체를 다른 JSP페이지에 전달 가능. (추가적인 정보 저장 가능.)
■ response 객체
○ 특징
- HttpServletResponse 타입.
- 웹 브라우저에 응답 데이터를 전송하기 위해서 사용되는 객체.
■ out 객체
○ 특징
- JspWriter 타입의 객체.
- JSP 페이지의 출력 스트림의 위해서 사용되는 클래스.
○ JspWriter 클래스
- BufferedWriter와 PrintWriter의 기능을 동시에 수행할 수 있도록 작성.
○ PrintWriter와의 차이점
- JspWriter는 print() 메소드를 호출할 때 IOException이 발생 가능.
- page지시어에서 autoflush속성이 'true'인 경우에는 버퍼가 채워지면 자동적으로 출력되지만 'false'이고, 버퍼가 오버플로우가 되는 경우에 IOException 발생.
○ 메소드
● void clear()
- 버퍼를 클리어.
- 만약 버퍼가 플러쉬된 경우에는 IOException이 발생.
● void close()
- 버퍼 내용을 플러쉬하고 닫음.
● void flush()
- 버퍼 내용을 플러쉬.
● int getBufferSize()
- 버퍼 크기를 알아봄. (단위 : 바이트)
- 리턴값이 0이면 버퍼를 사용하지 않는 경우.
● int getRemaining()
- 버퍼에서 사용되지 않는 버퍼의 바이트 수를 리턴.
● boolean isAutoFlush()
- 자동적으로 플러쉬되는지 여부를 알아봄.
● void new Line()
- 줄바꾸기(Line Separator)를 출력.
● void print(<type> value)
- value를 문자열 타입으로 변환해서 출력.
● void println()
- 현재 줄에 줄바꾸기 문자를 추가.
● void println(<type> value>
- value를 문자열 타입으로 변환해서 출력하고, 줄 바꾸기를 함.
■ session 객체
○ 특징
- HttpSession 타입.
- 현재 사용자의 세션을 표현하기 위해서 사용되는 클래스.
- 세션을 사용하기 위해서는 page 지시어에서 session 속성의 값을 'false'로 설정해서는 안됨.
■ application 객체
○ 특징
- JSP 페이지가 속해 있는 웹 응용프로그램을 표현하기 위해서 사용되는 객체.
- ServletContext 인터페이스 타입.
■ pageContext 객체
○ 특징
- PageContext 타입.
- 다른 디폴트 객체들을 프로그램적으로 접근할 수 있는 방법과 클라이언트의 요청을 다른 페이지로 전달할 수 있는 메소드들을 제공.
○ 멤버 필드
● static int PAGE_SCOPE
- 페이지 스코프.
● static int REQUEST_SCOPE
- 리퀘스트 스코프.
● static int SESSION_SCOPE
- 세션 스코프.
● staitc int APPLICATION_SCOPE
- 응용 프로그램 스코프.
○ 메소드
● Object findAttribute(String name)
- 주어진 이름의 객체를 page, requet, session, application 스코프에서 찾아 리턴.
● void forward(String relativeUrlPath)
- 다른 페이지로 클라이언트의 요청을 전달(Forward)하기 위해서 사용.
● Object getAttribute(String name)
- 주어진 이름의 객체를 page 스코프에서 찾아 리턴.
● Object getAttribute(String name, int scope)
- 주어진 스코프에서 주어진 이름의 객체를 찾아 리턴.
● Enumeration getAttributeNamesInScope(int scope)
- 주어진 스코프의 모든 객체를 리턴.
● int getAttributesScope(String name)
- 주어진 이름에 해당되는 객체의 스코프를 리턴.
● Exception getException()
- 에러 페이지로 전달된 예외를 리턴.
● JspWriter getOut()
- 출력을 위한 JspWriter를 리턴.
● Object getPage()
- 현재 PageContext와 연관된 페이지 객체를 리턴.
● ServletRequest getRequest()
- 클라이언트 요청을 표현하는 ServletRequest 객체를 리턴.
● ServletResponse getResponse()
- ServletResponse 객체를 리턴.
● ServletConfig getServletConfig()
- ServletConfig 객체를 리턴.
● ServletContext getServletContext()
- ServletContext 객체를 리턴.
● HttpSession getSession()
- 세션을 리턴.
● void handlePageException(Exception e)
- 페이지에서 처리되지 않는 예외를 다른 페이지로 리다이렉트(Redirect)하기 위해서 사용.
● void include(String relativeUrlPath)
- 주어진 패스에 있는 자원도 현재의 ServletRequest와 ServletResponse를 이용해서 철.
● void removeAttribute(String name)
- 주어진 이름의 객체를 삭제.
● void removeAttribute(Stirng name, int scope)
- 주어진 스코프에 있는 주어진 이름의 객체를 삭제.
● void setAttribute(String name, Object attribute)
- 주어진 이름으로 객체를 페이지 스코프로 등록.
● void setAttribute(String name, Object o, int scope)
- 주어진 이름으로 객체를 주어진 스코프에 등록.
■ exception 객체
○ 특징
- 에러 페이지에서만 사용.
- JSP 페이지에서 catch로 처리되지 않아서 제어가 에러 페이지로 넘겨진 Throwable의 인스턴스.