참고글



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 페이지로 이동합니다.


블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,