pageContext 객체

essential·2023년 7월 31일
1

JSP

목록 보기
8/21

pageContext 객체

  • JSP 페이지와 관련된 프로그램에서 다른 내장 객체를 얻어내거나 현재 페이지의 요청과 응답의 제어권을 다른 페이지로 넘겨주는 데 사용
  • request, session, application과 같은 내장 객체의 속성을 제어
  • 관련 메소드
리턴 타입메소드명설명
ServletRequestgetRequest()클라이언트의 요청 정보를 담고 있는 객체를 리턴 한다(request 내장 객체를 리턴 한다.)
ServletResponsegetResponse()요청에 대한 응답 객체를 리턴 한다.(response 내장 객체를 리턴 한다.)
JspWritergetOut()응답 출력 스트림을 리턴 한다.(out 내장 객체를 리턴 한다.)
ObjectgetPage()서블릿 인스턴스 객체를 리턴 한다.(page 내장 객체를 리턴 한다.)
ServletConfiggetServletConfig()서블릿의 초기 설정 정보를 담고 있는 객체를 리턴 한다.(config 내장 객체를 리턴 한다.)
ServletContextgetServletContext()서블릿의 실행 환경 정보를 담고 있는 객체를 리턴 한다. (application 내장 객체를 리턴 한다.)
HttpSessiongetSession클라이언트의 세션 정보를 담고 있는 객체를 리턴 한다.(session 내장 객체를 리턴 한다.)
없음forward(String url)현재 페이지의 요청과 응답에 관한 제어권을 URL로 지정된 주소로 영구적으로 넘긴다. forward된 페이지의 요청 처리가 종료되면 응답도 종료 된다. / URL 은 바뀌지 않으면서 String url로 이동이 발생
없음include(String url)현재 페이지의 요청과 응답에 관한 제어권을 URL로 지정된 주소로 임시로 넘긴다. include된 페이지의 처리가 끝나면 제어권은 다시 원래의 페이지로 돌아온다. 따라서 include 로 지정된 페이지의 내용을 원래 페이지에 삽입하는 효과를 가진다.

예제

pageContextTest1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
request.setAttribute("id", "lee");
pageContext.forward("pageContextTest2.jsp");
//response.sendRedirect("pageContextTest.jsp");
%>

pageContextTest2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>pageContext Test	</title>
</head>
<body>
<%
pageContext.include("pageContextTest3.jsp");
%>
<h2>pageContext의 forward 메소드로 포워딩된 페이지 입니다.</h2>
<%=request.getAttribute("id") %>
</body>
</html>

pageContextTest3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h3>include 되는 pageContextTest3.jsp 페이지 입니다.</h3>
<hr>

pageContextTest1.jsp 실행 시 나오는 화면

  • pageContextTest1.jsp 실행 → URL 변경 없이 pageContextTest2.jsp 로 이동 됨
  • pageContexTest2.jsp 실행 → include 실행 → pageContextTest3.jsp 를 포함해서 보여줌

pageContextTest1 실행 후 개발자 도구를 열어보면 include 된 것을 확인 가능하다.

왜 forward를 쓸까?

  • pageContextTest1.jsp 에서 request.setAttribute("id", "lee"); 선언한 객체를
  • pageContextTest2.jsp 에서 <%=request.getAttribute("id") %> 가져올 수 있다.

→ pageContextTest1 에서 만든 request 객체를 Test2에서 사용한다. (Test2 에서 setAttribute를 하지 않았음에도 lee 가 나온 이유)

pageContextTest1.jsp 에서
주석 처리 된 Redirect를 주석 해제 하고 forward 코드를 주석 후 실행 시 화면

  • URL 변경 됨(pageContextTest1.jsp->pageContextTest2.jsp)
  • null 값 -> request,response 객체를 새로 생성함(forward에서만 재사용)
profile
essential

1개의 댓글

comment-user-thumbnail
2023년 7월 31일

좋은 정보 감사합니다

답글 달기