
Controller(Servlet)가 클라이언트의 요청을 받아 View(JSP)로 페이지를 전환할 때,
redirect와 forward기법이 있다.
이 둘 기법에는 페이지 전환 시, 데이터를 전달하는 방법에 차이가 존재한다.
| Redirect 기법 | |
|---|---|
| Controller(Servlet) | response.sendRedirect("JSP파일경로?변수이름=값&변수이름=값"); |
| View(JSP) | request.getParameter("변수이름"); |
1. response.sendRedirect("JSP파일경로?변수이름=값");
2. request.getParameter("변수이름");
3. 클라이언트가 View페이지를 새롭게 재요청하는 효과를 내기 때문에 url이 변경된다.
| 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);
2. RequestDispatcher rd = request.getRequestDispatcher("JSP파일경로");
rd.forward(request, response);
3. request.getAttribute("list");
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");의 형태로 데이터를 추출할 수 있는 것이다.