728x90
include와 forward
JSP를 이용해서 템플릿을 만드려고 하여 인터넷에 방법을 검색했더니 include 와 forward를 찾을 수 있었습니다.
jsp:include와 jsp:forward는 둘 다
JavaServer Pages (JSP)에서 다른 JSP 페이지를 포함하거나 전달하는 데 사용되는 액션 태그입니다.
둘 다 코드의 재사용성을 촉진하고 모듈화를 가능하게 합니다. 다른 JSP 페이지의 내용을 현재 페이지에 포함하거나 전달함으로써 코드의 중복을 피할 수 있습니다.
include
<jsp:include page="/header.jsp" flush="false">
<jsp:param name="PAGETITLE" value="나"/>
</jsp:include>
forward
<jsp:forward page="header.jsp">
<jsp:param name="PAGETITLE" value="가"/>
</jsp:forward>
비교해보기
그럼 두개는 어떤 차이점이 있는지 확인해보려 합니다.
header.jsp
먼저 공통으로 사용할 header를 만들었습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String pageTitle = request.getParameter("PAGETITLE");
%>
<h1><%= pageTitle %>
</h1>
<p>
<a href="/">홈</a> |
<a href="/history.jsp">위치 히스토리 목록</a> |
</p>
index.jsp
include
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<jsp:include page="/header.jsp" flush="false">
<jsp:param name="PAGETITLE" value="가"/>
</jsp:include>
<p>aaa</p>
</body>
</html>
forward
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<jsp:forward page="header.jsp">
<jsp:param name="PAGETITLE" value="나"/>
</jsp:forward>
<p>aaa</p>
</body>
</html>
차이점
둘의 큰 차이점은 request 제어권에서 차이가 있습니다.
Forward는 url1에서 forwar해서 url2로 전달하게 되면 제어권을 다시 url1으로 전달받지 못하나,
Include는 url1에서 include를 하면 url2로 제어권을 잠시 빌려주고 처리를 다 하면 다시 url1으로 제어권을 반납합니다.
- 처리 방식
- jsp:include: 현재 페이지의 실행이 다른 JSP 페이지의 내용으로 확장됩니다. 다른 JSP 페이지의 내용이 현재 페이지에 포함되는 것이므로, 최종적으로는 하나의 페이지로 합쳐져 보여집니다.
- jsp:forward: 현재 페이지의 실행이 완전히 중단되고, 다른 JSP 페이지로 제어가 전달됩니다. 현재 페이지에서 제어를 전달한 후, 더 이상의 실행은 존재하지 않습니다.
- 표현된 URL
- jsp:include: 포함될 페이지의 결과가 현재 페이지의 결과에 포함되므로, 최종적으로는 클라이언트에게 보이는 URL은 현재 페이지의 URL입니다.
- jsp:forward: 제어가 완전히 새로운 페이지로 전달되므로, 클라이언트는 전달된 페이지의 URL을 볼 수 있습니다.
- 속도와 성능
- jsp:include: 현재 페이지와 포함될 페이지 간에는 서버에서의 내부 호출이 발생하므로, 처리 속도가 상대적으로 느릴 수 있습니다.
- jsp:forward: 새로운 페이지로의 제어 전달은 서버 내에서 진행되므로, jsp:include에 비해 상대적으로 빠를 수 있습니다.
- Request 및 Response 객체
- jsp:include: 포함될 페이지와 현재 페이지 간에는 하나의 Request와 Response 객체를 공유합니다.
- jsp:forward: 새로운 페이지로의 제어 전달은 새로운 Request와 Response 객체를 생성하여 처리됩니다.
- 사용 시나리오
- jsp:include: 특정 페이지의 일부를 여러 페이지에서 재사용하고자 할 때 사용합니다.
- jsp:forward: 현재 페이지에서 일어난 처리 결과를 완전히 다른 페이지로 전달하고자 할 때 사용합니다.
요약하면, jsp:include는 페이지의 일부를 현재 페이지에 포함시키는 데 사용되고, jsp:forward는 현재 페이지의 제어를 완전히 다른 페이지로 전달하는 데 사용됩니다.
728x90