내장 객체(implicit object)는 JSP 페이지에서 사용할 수 있도록 JSP 컨테이너에 미리 정의된 객체이다. JSP 페이지가 서블릿 프로그램으로 번역될 때 JSP 컨테이너가 자동으로 내장 객체를 멤버 변수, 메소드 매개변수 등의 각종 참조 변수(객체)로 포함된다. 스크립틀릿 태그나 표현문 태그에 선언을 하거나 객체를 생성하지 않고도 직접 호출하여 사용한다.
--내장 객체의 종류--
| 내장 객체 | 반환 유형 | 설명 |
|---|---|---|
| request | javax.servlet.http.HttpServletRequest | 웹 브라우저의 HTTP 요청 정보를 저장한다. |
| response | javax.servlet.http.HttpServletResponse | 웹 브라우저의 HTTP요청에 대한 응답 정보를 저장한다. |
| out | javax.servlet.jsp.jsp.jspWriter | JSP 페이지에 출력할 내용을 담고 있는 출력 스트림이다. |
| session | javax.servlet.http.HttpSession | 웹 브라우저의 정보를 유지하기 위한 세션 정보를 저장한다. |
| application | javax.servlet.ServletContext | 웹 애플리케이션의 콘텍스트 정보를 저장한다. |
| pageContext | javax.servlet.jsp.PageContext | JSP 페이지의 정보를 저장한다. |
| page | java.lang.Object | JSP 페이지를 구현한 자바 클래스로 JSP 페이지 자체를 나타낸다. |
| config | javax.servlet.ServletConfig | JSP 페이지의 설정 정보를 저장한다. |
| exception | java.lang.Throwable | JSP 페이지의 예외 발생을 처리한다. |
내장 객체는 서블릿 프로그램에서 모두 _jspService() 메소드 내부에 있다. 그리고 메소드 매개변수인 request, reponse를 비롯해 pageContext, session, application, config, out, page 등은 메소드 내에서 참조할 수 있는 참조 변수이다.
모든 내장 객체는 JSP 컨테이너가 관리하는 객체로, 이 중 request, session, application, pageContext를 이용하여 속성을 관리할 수 있다. 속성은 각각의 내장 객체가 존재하는 동안 JSP 페이지 사이에서 정보를 주고받거나 공유하는데 사용된다.
--속성 처리 메소드의 종류--
| 메소드 | 반환 유형 | 설명 |
|---|---|---|
| setAttribute(String name, Object value) | void | 해당 내장 객체의 속성 이름이 name인 속성 값을 value로 저장한다. |
| getAttribute(String name) | Object | 해당 내장 객체의 속성 이름이 name인 속성 값을 가져온다. |
| removeAttribute(String name) | void | 해당 내장 객체의 속성 이름이 name인 속성을 삭제한다. |
| getAttributeNames() | java.util.Enumeration | 해당 내장 객체의 모든 속성 이름을 가져온다. |
request 내장 객체는 JSP 페이지에서 가장 많이 사용되는 기본 내장 객체로, 웹 브라우저에서 서버의 JSP 페이지로 전달하는 정보를 저장한다. 즉 폼 페이지로부터 입력된 데이터를 전달하는 요청 파라미터 값을 JSP 페이지로 가져온다. JSP 컨테이너는 웹 브라우저에서 서버로 전달되는 정보를 처리하기 위해 javax.servlet.http.HttpServletRequest 객체 타입의 request 내장 객체를 사용하여 사용자의 요구 사항을 얻어낸다.
요청 파라미터는 사용자가 폼 페이지에 데이터를 입력한 후 서버에 전송할 때 전달되는 폼 페이지의 입력된 정보 형태를 말한다. 이러한 요청 파라미터는 <name=value> 형식으로 웹 브라우저에서 서버의 JSP 페이지로 전송된다.
요청 파라미터는 폼 페이지에서 <input type="text" ...> 처럼 입력 양식이 텍스트 유형인 경우 값을 입력하지 않으면 서버로 빈 문자열이 전송된다. 하지만 체크 박스와 라디어 버튼 유형인 경우 선택하지 않고 전송하면 요청 파라미터 자체가 전달되지 않는다.
| 요청 파라미터 관련 메소드 | 반환 유형 | 설명 |
|---|---|---|
| getParameter(String name) | String | 요청 파라미터 이름이 name인 값을 전달받는다. 요청 파라미터 값이 없으면 null을 반환한다. |
| getParameterValues(String name) | String[] | 모든 요청 파라미터 이름이 name인 값을 배열 형태로 전달한다. 요청 파라미터 값이 없으면 null을 반환한다. |
| getParameterNames() | java.util.Enumeration | 모든 요청 파라미터의 이름과 값을 Enumeration 객체 타입으로 전달받는다. |
| getParameterMap() | java.util.Map | 모든 요청 파라미터의 이름과 값을 Map 객체 타입으로 전달받는다.(Map 객체 타입은(요청 파라미터 이름,값) 형식으로 구성된다. |
[요청 파라미터 값 출력하기]
request.jsp
<body>
<form action="process.jsp" method="post">
<p>
이름 : <input type="text" name="name">
<input type="submit" value="전송">
</p>
</form>
</body>
process.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
%>
<p> 이름 : <%=name %> </p>
</body>
웹 브라우저는 HTTP 헤더에 부가적인 정보를 담아 서버로 전송한다. request 내장 객체는 헤더 정보나 쿠키 관련 정보를 얻을 수 있는 메소드를 제공한다.
| 요청 HTTP 헤더 관련 메소드 | 반환 유형 | 설명 |
|---|---|---|
| getHeader(String name) | String | 설정한 name의 헤더 값을 가져온다. |
| getHeaders(String name) | Enumeration | 설정한 name의 헤더 목록 값을 가져온다. |
| getHeaderNames() | Enumeration | 모든 헤더 이름을 가져온다. |
| getIntHeader(String name) | int | 설정한 name의 헤더 값을 정수로 가져온다. |
| getDateHeader(String name) | long | 설정한 name의 헤더 값을 시간 값으로 가져온다. |
| getCookies() | javax.servlet.http.,Cookie | 모든 쿠키 값을 가져온다. |
[요청 HTTP 헤더 정보 값 출력하기]
<body>
<%
String hostValue = request.getHeader("host");
String laValue = request.getHeader("accept-language");
out.print("호스트명 : " + hostValue + "<br>");
out.print("설정된 언어 : " + laValue + "<br>");
%>
</body>
request 내장 객체는 웹 브라우저의 요청 및 서버 관련 정보를 얻을 수 있는 메소드를 제공한다.
| 웹 브라우저/서버 관련 메소드 | 반환 유형 | 설명 |
|---|---|---|
| getRemoteAdd() | String | 웹 브라우저의 IP 주소를 가져온다. |
| getContentLength() | long | 웹 브라우저의 요청 파라미터 길이를 가져온다. |
| getCharacterEncoding() | String | 웹 브라우저의 문자 인코딩을 가져온다. |
| getContentType() | String | 웹 브라우저의 콘텐츠 유형을 가져온다. |
| getProtocol() | String | 웹 브라우저의 요청 프로토콜을 가져온다. |
| getMethod() | String | 웹 브라우저의 HTTP 요청 메소드(GET, POST)를 가져온다. |
| getRequestURI() | String | 웹 브라우저가 요청한 URI 경로를 가져온다. |
| getContextPath() | String | 현재 JSP 페이지의 웹 애플리케이션 콘텍스트 경로를 가져온다. |
| getServerName() | String | 서버 이름을 가져온다. |
| getServerPort() | int | 실행 중인 서버 포트 번호를 가져온다. |
| getQueryString() | String | 웹 브라우저의 전체 요청 파라미터 문자열[물음표(?) 다음 URL에 할당된 문자열]을 가져온다. |
[웹 브라우저/서버 정보 출력하기]
request.jsp
<body>
<form action="process.jsp" method="post">
<p>
이름 : <input type="text" name="name">
<input type="submit" value="전송">
</p>
</form>
</body>
process.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
%>
<p>
이름 : <%=name%><br>
요청 정보 길이 : <%=request.getContentLength()%><br>
클라이언트 전송 방식 : <%=request.getMeghod()%><br>
요청 URI : <%=request.getRequestURI()%><br>
서버 이름 : <%=request.getServerName()%><br>
서버 포트 : <%=request.getServerPort()%><br>
</body>
response 내장 객체는 사용자의 요청을 처리한 결과를 서버에서 웹 브라우저로 전달하는 정보를 저장한다. 즉 서버는 응답 헤더와 요청 처리 결과 데이터를 웹 브라우저로 보낸다.
JSP 컨테이너는 서버에서 웹 브라우저로 응답하는 정보를 처리하기 위해 javax.servlet.http.HttpServletResponse 객체 타입의 response 내장 객체를 사용하여 사용자의 요청에 응답한다.
사용자가 새로운 페이지를 요청할 때와 같이 페이지를 강제로 이동하는 것을 리다이렉션(redirection)이라고 한다. 서버는 웹 브라우저에 다른 페이지로 강제 이동하도록 response 내장 객체의 리다이렉션 메소드를 제공한다. 페이지 이동 시에는 문자 인코딩을 알맞게 설정 해야 한다.
페이지 이동 방법
- 포워드(forward) 방식 : 현재 JSP 페이지에서 이동할 URL로 요청 정보를 그대로 전달하므로 사용자가 최초로 요청한 정보가 이동된 URL에서도 유효하다. 그러나 이동된 URL이 웹 브라우저의 주소 창에 나타나지 않고 처음 요청한 URL이 나타나기 때문에 이동 여부를 사용자가 알 수 없다.
<jsp:forward page="이동할 페이지"/>- 리다이렉트(redirect)방식 : 처음 요청받은 현재 JSP 페이지로부터 이동할 URL을 웹 브라우저로 반환한다. 이때 웹 브라우저에서는 새로운 요청을 생성하여 이동할 URL에 다시 요청을 전송하므로 처음 보낸 요청 정보가 이동된 URL에서는 유효하지 않는다. 즉 클라이언트가 새로 페이지를 요청한 것과 같은 방식으로 페이지가 이동한다. 따라서 이동된 URL이 웹 브라우저의 주소 창에 보이는 것이다.
response.sendRedirect("이동할 페이지")
| 페이지 이동 관련 메서드 | 반환 유형 | 설명 |
|---|---|---|
| sendRedirect(String url) | void | 설정한 URL 페이지로 강제 이동한다. |
[페이지 이동하기]
<body>
<%
response.sendRedirect("http://www.google.com");
%>
</body>
응답HTTP 헤더 관련 메소드는 서버가 웹 브라우저에 응답하는 정보에 헤더를 추가하는 기능을 제공한다. 헤더 정보에는 주로 서버에 대한 정보가 저장되어 있다.
| 응답 HTTP 헤더 관련 메소드 | 반환 유형 | 설명 |
|---|---|---|
| addCookie(Cookie cookie) | void | 쿠키를 추가한다. |
| addDateHeader(String name, long date) | void | 설정한 헤더 이름 name에 날짜/시간을 추가한다. |
| addHeader(String name, String value) | void | 설정한 헤더 이름 name에 value를 추가한다. |
| addIntHeader(String name, int value) | void | 설정한 헤더 이름 name에 정수 값 value를 추가한다. |
| setDateHeader(String name, long date) | void | 설정한 헤더 이름 name에 날짜/시간을 설정한다. |
| setHeader(String name, String value) | void | 설정한 헤더 이름 name에 문자열 값 value를 설정한다. |
| setIntHeader(String name, int value) | void | 설정한 헤더 이름 name에 정수 값 value를 설정한다. |
| containsHeader(String name) | boolean | 설정한 헤더 이름 name이 HTTP 헤더에 포함되었는지 여부를 확인한다. |
| getHeader(String name) | String | 설정한 헤더 이름 name 값을 가져온다. |
response 내장 객체는 웹 브라우저로 응답하기 위해 MIME 유형, 문자 인코딩, 오류 메시지, 상태 코드 등을 설정하고 가져오는 응답 콘텐츠 관련 메소드를 제공한다.
| 응답 콘텐츠 관련 메서드 | 반환 유형 | 설명 |
|---|---|---|
| setContentType(String type) | void | 웹 브라우저에 응답할 MIME 유형을 설정한다. |
| getContentType() | String | 웹 브라우저에 응답할 MIME 유형을 가져온다. |
| setCharacterEncoding(String charset) | void | 웹 브라우저에 응답할 문자 인코딩을 설정한다. |
| getCharacterEncoding() | String | 웹 브라우저에 응답할 문자 인코딩을 가져온다. |
| sendError(int status_code, String message) | void | 웹 브라우저에 응답할 오류(코드 및 오류 메시지)를 설정한다. |
| setStatus(int statuscode) | void | 웹 브라우저에 응답할 HTTP 코드를 설정한다. |
out 내장 객체는 웹 브라우저에 데이터를 전송하는 출력 스트림 객체이다. JSP 컨테이너는 JSP 페이지에 사용되는 모든 표현문 태그와 HTML 일반 텍스트 등을 out 내장 객체를 통해 웹 브라우저에 그대로 전달한다. out 내장 객체는 스크립틀릿 태그에 사용하여 단순히 값을 출력 하는 표현문 태그(<%= ...%>)와 같은 결과를 얻을 수 있다.
| out 내장 객체 메소드 | 반환 유형 | 설명 |
|---|---|---|
| print(String str) | void | 설정된 str 값을 웹 브라우저에 출력한다. |
| println(String str) | void | 설정된 str 값을 웹 브라우저에 출렵한다. 이때 줄 바꿈(\n)이 적용되지 않는다. |
| newLine() | void | 줄바꿈(\n)을 출력한다. |
| getBufferSize() | int | 현재 출력 버퍼의 크기를 가져온다. |
| getRemaining() | int | 현재 남아 있는 출력 버퍼의 크기를 가져온다. |
| clear() | void | 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하지 않고 비운다. 만약 버퍼가 이미 플러시되었다면 IOException이 발생한다. |
| clearBuffer() | void | 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하지 않고 비운다. 만약 버퍼가 이미 플러시되었다면 IOException이 발생하지 않는다. |
| flush() | void | 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하고 비운다. |
| isAutoFlush() | boolean | 출력 버퍼가 채워졌을 때의 처리를 결정한다. 자동으로 플러시하는 경우 true를 반환하고, 그렇지 않은 경우 false를 반환한다. |