[Servlet&JSP] Redirect vs Forward 차이

KKS·2023년 8월 12일
post-thumbnail

개요

Controller(Servlet)가 클라이언트의 요청을 받아 View(JSP)로 페이지를 전환할 때,
redirect와 forward기법이 있다.
이 둘 기법에는 페이지 전환 시, 데이터를 전달하는 방법에 차이가 존재한다.

1. Redirect 기법

Redirect 기법
Controller(Servlet)response.sendRedirect("JSP파일경로?변수이름=값&변수이름=값");
View(JSP)request.getParameter("변수이름");

1. response.sendRedirect("JSP파일경로?변수이름=값");

  • Controller에서 Redirect로 요청할 View페이지를 지정한다.
  • "?변수이름=값&변수이름=값"의 형태로 데이터를 View페이지로 전달한다.(QueryString, Get방식)

2. request.getParameter("변수이름");

  • View페이지로 전달된 데이터를 추출하여, html형식으로 클라이언트에게 View페이지를 응답한다.

3. 클라이언트가 View페이지를 새롭게 재요청하는 효과를 내기 때문에 url이 변경된다.

2. Forward 기법

Forward 기법
request.setAttribute("list", list);
Controller(Servlet)RequestDispatcher rd = request.getRequestDispatcher("JSP파일경로");
rd.forward(request, response);
View(JSP)request.getAttribute("list");

1. request.setAttribute("list", list);

  • View페이지로 포워딩 하기 전, request객체에 list객체를 바인딩한다.

2. RequestDispatcher rd = request.getRequestDispatcher("JSP파일경로");
rd.forward(request, response);

  • 포워딩 할 View페이지를 지정하고, forward()메서드로 포워딩한다.

3. request.getAttribute("list");

  • View페이지로 전달된 데이터를 추출한다.
  • 이 때, list가 Object타입으로 반환되기 때문에 다운캐스팅이 필요하다.

4. forward된 후, view페이지를 controller를 거쳐 클라이언트에게 응답하기 때문에,
redirect와는 달리, url은 변경되지 않는다.

cf) 클라이언트의 요청을 받은 Controller(Servlet)에 HttpServletRequest, HttpServletResponse객체가 생성되는데, Redirect로 페이지를 전환하면 JSP에 생성되는 Request, Response객체는 Servlet의 Request, Response객체와는 전혀 다른 새로운 것이 된다.
반면, Foward로 페이지를 전환하면 JSP에 생성되는 Request, Response객체는 Servlet으로부터 넘겨 받는 것이므로 완전히 동일한 것이 되어 데이터를 추출할 수 있게 된다.
따라서, request.getAttribute("list");의 형태로 데이터를 추출할 수 있는 것이다.

profile
공부하고 이해한 내용들을 직접 그림과 표를 그리면서 정리해보는 공간입니다.🤗

0개의 댓글