프로그래밍/Web
Redirect & Forward
국윤창
2018. 7. 11. 11:53
Redirect
요청받은 Servlet이 redirect를 한다면 헤더에 결과값으로 30x를 보내고 redirect할 URL을 같이 보낸다. 그러면 Client는 결과값이 30x임을 확인하고 Server에 해당 URL로 요청을 다시 보내게 된다. 보통 302가 결과값으로 들어가는데 자세한 것은 아래 참고 링크를 확인하자.
[그림 1] HTTP Redirect
요청이 두 번이므로 Request와 Response 객체가 2번 만들어지게 된다. 그리고 요청을 다시 보내는 것이기 때문에, 결과 주소가 달라지게 된다.
Forward
Redirect와 달리 응답은 한 번이고, 서버 내부에서 역할을 위임한다. 따라서 Request, Response 객체를 같은 것을 사용하며, Forward를 한 Servlet1의 Request, Response 객체가 Forward를 받은 Servlet2에게 전달된다. 따라서 Servlet2는 Servlet1의 response 객체를 이용하여 결과를 반환한다.
[그림 2] HTTP Forward
Request 객체에 값을 넣고, Request, Response 객체를 넘기는 것은 아래 코드처럼 사용할 수 있다.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int randValue = (int)(Math.random() * 6) + 1;
request.setAttribute("randValue", randValue);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/next");
requestDispatcher.forward(request, response);
}
RequestDispatcher 객체에 forward할 URL을 넣고 request와 response 객체를 넣는다. 또한 request에 attribute로 전달할 값을 넣는 것을 볼 수 있다.
참고
https://developer.mozilla.org/ko/docs/Web/HTTP/Redirections#attr1