개발/JSP

[JSP] pageContext 객체 / include() 메서드

suniverse 2023. 1. 29. 00:47

<pageContext 객체>

 

- pageContext 클래스를 통해 톰캣에서 구현한 내장객체이다. 

 

- JSP 페이지와 관련된 다른 내장 객체를 얻어내거나, 

  현재 페이지 요청과 응답의 제어권을 다른 페이지로 넘겨주는 역할을 수행한다. 

  또한, 다른 내장 객체(request, session, application)들의 속성을 제어하는 기능을 제공한다. 

 

- 현재 페이지 내에서만 유효한 객체이다. 즉, 다른 페이지로 이동 시 새로운 pageContext 객체가 생성된다. 

 

1. Redirect 방식
새로운 요청이 발생하여 이동 시
이동 대상 주소가 주소표시줄에 표시되는(= 주소 표시줄의 주소가 변경되는) 이동 방식
response.sendRedirect() 메서드를 사용한다.

--> 자바 코드는 서버(톰캣)에 의해 먼저 실행된다. (html 태그는 응답 시 클라이언트에서 실행 됨)
따라서, 리다이렉트 코드가 실행되면 서버가 클라이언트에 재요청을 보내라는 신호를 전송하고
클라이언트에 의해 새로운 요청이 발생하여 최종적으로 해당 페이지로 이동한다. 

2. Dispatch 방식
새로운 페이지 요청 시 기존 주소가 그대로 유지되는(= 변경되지 않는) 이동 방식 
pageContext객체의 forward() 메서드를 호출하여 이동한다. 



 

✍ 1. Redirect 방식 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
response.sendRedirect("pageContextTest2.jsp");
%>

이 코드가 실행되면? 

💻

--> 리다이렉트 방식을 사용하였으므로, Test1에서 Test2 페이지로 이동 요청 후 

주소가 Test1로 바뀐 것을 확인할 수 있다. 

 

✍ 2. Dispatch

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
pageContext.forward("pageContextTest2.jsp");
%>

 

💻

--> 디스패치 방식을 사용하였으므로 Test1에서 Test2 페이지로 이동 요청 후 

주소가 그대로 Test2로 유지되는 걸 확인할 수 있다. 

 

주의!!!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
// response.sendRedirect("pageContextTest2.jsp");
pageContext.forward("pageContextTest2.jsp");
%> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>pageContextTest1.jsp</h1>
	<script type="text/javascript">
		alert("확인");
	</script>
</body>
</html>

--> 만약 위와 같이 html태그가 존재한다면 이 태그들은 실행되지 못한다. 왜? jsp의 이동 코드로 인해 실행되지 않는다. 

클라이언트에서 확인이 불가하기 때문이다. 

 

 


include() 메서드

 

pageContext 객체의 include() 메서드를 호출하면 현재 페이지에 포함시킬 페이지를 지정 가능하다.

 

✍ 전체 코드 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>pageContextTest2.jsp</h1>
	<h3>pageContext 객체의 include() 메서드 호출 전</h3>
	<hr>
	<%
	pageContext.include("pageContextTest3_1.jsp"); // include메서드를 이용해 Test3_1 페이지 불러오기
	%>
	<hr>
	<%
	pageContext.include("pageContextTest3_2.jsp"); // include메서드를 이용해 Test3_2 페이지 불러오기
	%>	
	<hr>
	<h3>pageContext 객체의 include() 메서드 호출 후</h3>
</body>
</html>

💻 결과 

--> Test3_1 과 Test3_2 페이지가 포함된 걸 확인할 수 있다. 

 

✍ Test3_1에 작성된 코드 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>pageContext의 include() 메서드로 포함된 페이지 1</h3>
</body>
</html>

✍ Test3_2에 작성된 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>pageContext의 include() 메서드로 포함된 페이지 2</h3>
</body>
</html>