참고글
pageContext 객체(javax.servlet.jsp.PageContext)
pageContext 객체는 JSP 기본객체로 JSP 페이지에서 따로 선언하지 않아도 참조하여 사용 가능합니다. pageContext는 JSP 페이지에 대해 1:1로 연결된 객체로 JSP 페이지당 하나의 pageContext 객체가 생성됩니다. 따라서 같은 JSP 페이지 내에서는 서로 값을 공유할 수 있으며, 주요 기능은 다른 기본객체들을 구할때 사용하거나 페이지 흐름을 제어할 때 사용됩니다.
그러나 pageContext를 직접 사용하는 경우는 드물고 커스텀 태그를 구현할때 주로 사용됩니다. pageContext 에는 다음의 메서드들이 있고 각 메서드는 우리가 흔히 사용하는 기본객체들을 리턴합니다.
메서드 |
반환타입 |
설명 |
getRequest() |
ServletRequest |
request 기본 객체를 반환합니다. |
getResponse() |
ServletResponse |
response 기본 객체를 반환합니다. |
getSession() |
HttpSession |
session 기본 객체를 반환합니다. |
getServletContext() |
ServletContext |
application 기본 객체를 반환합니다. |
getServletConfig() |
ServletConfig |
config 기본 객체를 반환합니다. |
getOut() |
JspWriter |
out 기본 객체를 반환합니다. |
getException() |
Exception |
exception 기본 객체를 반환합니다. |
getPage() |
Object |
page 기본 객체를 반환합니다. |
실제로 이 메서드들은 JSP 페이지가 서블릿으로 변환될 때 기본객체들을 생성하는데에 사용됩니다. 즉 JSP가 서블릿으로 변환되는 과정에서 pageContext 객체를 통해 request, response, out 등의 기본객체를 생성해주기 때문에 우리는 JSP를 작성할 때 별다른 선언없이 사용이 가능했던 것입니다.
단 이러한 기본객체들은 <%! %> 전역 전언문 안에서는 사용할 수 없는데 그 이유는 서블릿으로 변환될때 기본객체들이 _jspService() 라는 메서드의 지역변수로 생성되기 때문입니다.
out객체를 통한 실습
다음은 아주 간단한 JSP 예제입니다. pageContext.getOut() 이 반환하는 Writer 객체가 실제로 out 기본객체인지를 판단하여 출력합니다. 실행을 해보면 콘솔창에 true가 출력됨을 알 수 있습니다. 즉 실제로 JSP 페이지가 서블릿으로 변환되는 시점에 pageContext 객체를 통해 다른 기본객체들을 생성함을 알게 되었습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<%
JspWriter pageOut = pageContext.getOut();
System.out.println(pageOut == out);
%>
</body>
</html> |
cs |
흐름제어 기능
pageContext 에는 흐름을 제어하는 기능도 있습니다.
메서드 |
반환타입 |
설명 |
forward(String relativeUrlPath) |
void |
지정한 상대경로 페이지로 이동합니다. |
include(String relativeUrlPath) |
void |
지정한 상대경로 페이지를 현재 JSP 페이지에 포함합니다. |
다음과 같이 JSP 페이지를 구성합니다.
contextJSP.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>contextJSP</h1>
<%
String type = request.getParameter("type");
if(type.equals("include")){
pageContext.include("target.jsp");
}else if(type.equals("forward")){
pageContext.forward("target.jsp");
}
%>
</body>
</html> |
cs |
target.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<h1>target</h1> |
cs |
include를 사용했을떄는 target.jsp 페이지의 내용을 포함합니다.
forward를 사용했을때는 target 페이지로 이동합니다.
'Servlet&Jsp' 카테고리의 다른 글
[서블릿/JSP] JSP application 기본 객체 서버 정보 가져오기 (0) | 2018.07.06 |
---|---|
[서블릿/JSP] JSP application 기본 객체란? web.xml 초기 설정 값 가져오기 (0) | 2018.07.06 |
[서블릿/JSP] JSP out 기본 객체 (0) | 2018.05.09 |
[서블릿/JSP] 웹 어플리케이션 개념 및 웹 어플리케이션 경로 규칙 (0) | 2018.02.17 |
[Tomcat] 톰캣 8080 포트 변경하기 (0) | 2018.02.16 |