JSP 의 내부 객체(Implicit Object)
내부 객체란 별다른 선언과정과 객체 생성없이 바로 사용할 수 있는 객체들을 말하며 이러한 객체는 JSP 컨테이너가 재공한다. JSP의 내부 객체의 종류는 크게 9가지로 나뉜다.
9가지를 다시 사용 범주로 나누면 아래와 같이 4가지 형태로 분류될 수 있다.
- JSP페이지 입출력 관련 객체
- JSP페이지 외부 환경 정보 재공 객체
- JSP페이지 서블릿 관련 객체
- JSP페이지 예외관련 객체
◇ 내부 객체 분류 | 객체 | 설명 | 입출력 관련 객체 | request | 브라우저에서 JSP 페이지로 전달되는 데이터의 묶음으로 HTTP헤더와 HTTP바디로 구성됨 | response | 요청을 시도한 클라이언트로 전송할(응답) 데이터의 묶음 | out | JSP페이지의 결과를 클라이언트에 전송해 주는 출력 스트림. | 외부 환경 정보 재공 객체 | session | 클라이언트 요청에 관한 context정보의 세션과 관련된 정보를 저장하고 관리하는 객체 | application | 스블릿 또는 애플리케이션 외부 환경 정보를 나타내는 객체 | pageContext | 현재 JSP페이지의 Context를 나타내며, pageContext 객체를 통하여 다른 내부 객체에 접근할 수 있는 객체 | 서블릿 관력 객체 | page | JSP페이지 그 자체를 나타내는 객체 | config | 서블릿이 초기화될 때 참조해야 할 다른 여러 정보를 가지고 있는 객체 | 예외관련 객체 | exception | 예외처리를 하기 위한 객체 |
1. request
1) 주요메소드
String getParameter(name) | name에 할당된 값을 반환하며, 지정된 파라미터 값이 없으면 null을 반환한다. 폼태그에서 전달된 모든 값은 getParameter(name)으로 받는다. | String[] getParameterValues(name) | name의 모든 값을 String 배열로 반환한다. 특히 checkbox와 같은 태그들을 처리할 때 사용된다. | void setCharaterENCODING(code_table) | 전달할 데이터의 코드 테이블을 지정한다. 만약 한글이 깨지거나 정상적인 처리가 되지 않을 경우 code_table을 "euc-kr" 이나 "8859_1"을 사용한다. |
2) 클라이언트 정보 메소드
String getMethod() | 요청에 사용된 요청 방식(GET, POST, PUT)을 반환한다. |
String getRequestURI() | 요청에 사용된 URL로부터 URI을 반환한다. |
String getQueryString() | 요청에 사용된 Query를 반환한다. |
String getRemoteHost() | 클라이언트의 호스트 이름을 반환한다. |
String getRemoteAddr() | 클라이언트의 주소를 반환한다. |
String getProtocol() | 사용중인 프로토콜을 반환한다. |
String getServerName() | 서버의 도메인 이름을 반환한다. |
int gtServerPort() | 서버의 포트번호를 반환한다. |
String getHeader(name) | HTTP 요청 헤더에 지정된 name의 값을 반환한다.(예: name -> User-Agent, Accept) |
[사용예]
- <%@ page contentType="text/html;charset=EUC-KR"%>
- <%
- String protocol = request.getProtocol();
- String serverName = request.getServerName();
- int serverPort = request.getServerPort();
- String remoteAddr = request.getRemoteAddr();
- String remoteHost = request.getRemoteHost();
- String method = request.getMethod();
- StringBuffer requestURL = request.getRequestURL();
- String requestURI = request.getRequestURI();
- String useBrowser = request.getHeader("User-Agent");
- String fileType = request.getHeader("Accept");
- %>
- <html>
- <body>
- <h1>Request Example2</h1>
- 프로토콜 : <%=protocol%><p>
- 서버의 이름 : <%=serverName%><p>
- 서버의 포트 번호 :<%=serverPort%><p>
- 사용자 컴퓨터의 주소 : <%=remoteAddr%><p>
- 사용자 컴퓨터의 이름 : <%=remoteHost%><p>
- 사용 method : <%=method%><p>
- 요청 경로(URL) : <%=requestURL%><p>
- 요청 경로(URI) : <%=requestURI%><p>
- 현재 사용하는 브라우저 : <%=useBrowser%><p>
- 브라우저가 지원하는 file의 type : <%=fileType%><p>
- </body>
- </html>
|
2. response
void setHeader(name, value) | 응답에 포함될 Header를 설정한다. |
void setContentType() |
MIME 타입을 지정한다. |
void addCookies() |
쿠키를 추가한다. |
void sendRedirect(url) |
브라우저의 현재 페이지를 다른 URL로 이동한다. |
vodi setStatus(code) |
HTTP 응답상태를 설정한다. |
[사용예]
- <h1>Response Example1</h1>
- <%
- response.sendRedirect("ResponseExample1_1.jsp");
- %>
|
- <%@ page contentType="text/html;charset=EUC-KR"%>
- <%
- response.setHeader("Pragma","no-cache");
- if(request.getProtocol().equals("HTTP/1.1")){
- response.setHeader("Cache-Control","no-cache");
- }
- %>
- <html>
- <body>
- <h1>Response Example1</h1>
- http://localhost:8080/myapp/ch06/ResponseExample1.jsp가<p>
- http://localhost:8080/myapp/ch06/ResponseExample1_1.jsp로 변경이 되었습니다.
- </body>
- </html>
|
[유사한 명령어]
JavaScript : windows.Location.href="url"META : <meta http-equiv="refresh" content="초; url=http://이동할페이지">; <jsp:forward page="url"/>
3. out
boolean isAutoFlush() |
출력 버퍼가 다 채워져 자동으로 flush했을 경우는 true를 반환하고, 그렇지 않은 경우는 false를 반환한다. | int getBufferSize() | 출력 버퍼의전체 크기를 바이트 단위로 반환한다. | int getRemaining() | 출력 버퍼의 남은 양을 바이트 단위로 반환한다. | void clearBuffer() | 출력 버퍼에 저장된 내용을 삭제한다. | String print(string), println(string) | string을 브라우저에 출력한다. | void flush() | 출력 버퍼의 내용을 클라이언트에게 전송한다. | void close() | 출력 버퍼의 내용을 flush하고 스트림을 닫는다. |
[사용예]
- <%@ page contentType="text/html;charset=EUC-KR"
- buffer="5kb"
- %>
- <%
- int totalBuffer = out.getBufferSize();
- int remainBuffer = out.getRemaining();
- int useBuffer = totalBuffer - remainBuffer;
- %>
- <h1>Out Example1</h1>
- <b>현재 페이지의 Buffer 상태</b><p>
- 출력 Buffer의 전체 크기 : <%=totalBuffer%>byte<p>
- 남은 Buffer의 크기 : <%=remainBuffer%>byte<p>
- 현재 Buffer의 사용량 : <%=useBuffer%>byte<p>
|
4. session
session객체는 page지시자의 session속성이 true(기본값)로 설정되어 있어야 사용가능하다.
1) 주요메소드
String getId() | 해당 세션의 세션 ID를 가져온다. | long getCreationTime() | 세션이 생성된 시간을 가져온다. | logn getLastAccessedTime() | 클라이언트에 의해 마지막으로 처리된 세션의 시간을 반환한다. | void setMaxInactiveInterval(time) | 세션을 유지할 시간을 초단위로 설정한다. | int getMaxInactiveInterval() | 세션의 유지 시간을 가져온다. 기본값(1800초) | boolean isNew() | 클라이언트 세션ID를 할당하지 않은 경우 true값을 반환한다. | void invalidate() | 해당 세션을 종료시킨다. | void setAttribute("세션변수명",값) | 세션변수를 생성한다. | Object getAttribute("세션변수명") | 저정된 세션변수명의 값을 가져온다. 가져올때는 반드시 해당 값의 성격에 따라 케스팅해야 한다. |
5. exception
exception객체는 jsp에서 발생한 예외를 처리하는 페이지를 지정한 경우 에러 페이지에 전달되는 예외 객체이다. page지시자의 isErrorPage 속성을 true로 지정한 jsp페이지에서만 사용 가능한 내부객체이다.
1) 주요 메소드
String getMessage() | 에러 메시지를 가져온다. | String toString() | 에러 클래스명과 에러 메시지를 반환한다. |
먼저 errorPage.jsp를 작성하되 page지시자의 errorPage의 속성값을 "resultPage.jsp"로 정해 오류가 발생하면 오류의 내용을 보여 주도록 하자.
- <%@page contentType = "text/html;charset=euc-kr"
- errorPage="resultPage.jsp"
- %>
- <%
- int su1 = 10;
- int su2 = 0;
- int r = su1 / su2; //오류가 발생하여 resultPage.jsp로 이동된다.
- %>
|
다음으로 위 소스에서 지정한 resultPage.jsp를 작성하여 오류의 종류를 나타내 보자.
- <%@page contentType="text/html;charset=euc-kr"
- isErrorPage="true"
- %>
- <%
- String message = exception.getMessage();
- String objectMessage = exception.toString():
- %>
- 에러메시지 : <%=message%><p>
- 에러 클래스명과 에러 메시지: <%=objectMessage%>
|
|