본문 바로가기
JAVA/JSP

Redirect와 Forward

by solutionmaster 2023. 5. 13.

JSP(JavaServer Pages)에서 "redirect"와 "forward"는 둘 다 클라이언트의 요청을 다른 리소스로 전달하는 방법을 나타낸다. 하지만 각각의 방법은 서로 다른 동작을 수행한다

1. Redirect(리다이렉트)
   - 리다이렉트는 클라이언트의 요청을 다른 페이지로 전송하는 방법이다
   - 서버는 클라이언트에게 특정 URL로 다시 요청하도록 응답한다.
   - 클라이언트는 새로운 URL로 재요청하고, 서버는 새로운 요청에 대한 콘텐츠를 반환한다.
   - 즉, 브라우저의 주소 표시줄이 새로운 URL로 변경된다.
   - 리다이렉트는 보통 다른 도메인 또는 다른 애플리케이션으로의 전환에 사용된다.
   - 리다이렉트는 `response.sendRedirect("새로운URL")`과 같이 JSP에서 사용할 수 있다.

2. Forward(포워드)
   - 포워드는 클라이언트의 요청을 다른 리소스(주로 JSP, 서블릿 등)로 전달하는 방법이다.
   - 서버는 클라이언트에게 새로운 요청을 보내지 않고, 서버 내부에서 요청을 처리한다.
   - 따라서 클라이언트는 전혀 인식하지 못하고, URL은 처음 요청한 페이지의 URL로 유지된다.
   - 포워드는 같은 애플리케이션 내에서 다른 리소스로의 전환에 사용된다.
   - 포워드는 `request.getRequestDispatcher("리소스URL").forward(request, response)`와 같이 JSP에서 사용할 수 있다.

리다이렉트와 포워드의 주요 차이점은 클라이언트의 인식과 URL의 변화이다. 리다이렉트는 클라이언트에게 새로운 URL로 재요청하도록 알리고, URL이 변경된다. 반면에 포워드는 클라이언트에게는 인식되지 않으며, URL은 처음 요청한 페이지의 URL로 유지된다.


1. Redirect(리다이렉트)

// 리다이렉트.jsp
<%
   // 다른 페이지로 리다이렉트
   response.sendRedirect("newPage.jsp");
%>

2. Forward(포워드)

// 포워드.jsp
<%
   // 다른 페이지로 포워드
   request.getRequestDispatcher("newPage.jsp").forward(request, response);
%>


위의 코드에서 리다이렉트의 경우 `response.sendRedirect("newPage.jsp");`를 사용하여 "newPage.jsp"로 클라이언트를 리다이렉트한다. 따라서 클라이언트는 "newPage.jsp"로 새로운 요청을 보내고, 주소줄에도 "newPage.jsp"의 URL이 표시된다.

반면 포워드의 경우 `request.getRequestDispatcher("newPage.jsp").forward(request, response);`를 사용하여 "newPage.jsp"로 포워드한다. 이 경우 클라이언트는 전혀 인식하지 못하며, 주소 표시줄에는 처음 요청한 페이지의 URL이 표시된다. 

따라서 클라이언트는 새로운 요청을 보내지 않고, 서버 내부에서 "newPage.jsp"를 처리하고 그 결과를 클라이언트에게 반환한다.

 

정리해보자면,

URL의 변경여부 -> Redirect(변경), Forward(그대로) 

객체의 재사용 여부 -> Redirect(재사용X), Forward(재사용)

댓글