Redirect와 Forward 차이

Posted by 열정보이
2018. 12. 10. 22:52 Web



JSP를 사용하여 페이지를 전환할 때, 우리는 sendRedirect 또는 forward를 사용한다.


이 둘의 차이는 무엇일까?

그 차이를 알아보도록 하자!



1. URL 변환


sendRedirect를 이용하여 화면을 전환할 경우 URL도 요청한 변환 페이지와 동일하게 변한다.

그러나 forward를 통해 화면을 전환할 경우, 화면은 전환되더라도, URL은 forward가 실행 전인 페이지에 머물러 있다.



2. request 와 response 객체


sendRedirect의 경우 화면 전환 후에 request와 response 객체가 새로 생성되어, 담고있던 데이터가 사라진다.

그러나 forward의 경우 request와 response 객체가 유지되어, 화면 전환 후에도 request를 통해 데이터를 전달 할 수 있다.


이러한 차이가 발생하는 이유는 무엇일까?


둘이 실행되는 위치가 다르기 때문이다.

forward같은 경우 서블릿 컨테이너에서 실행되며, 컨테이너 내부의 작업이므로 request와 response가 유지된다. 또한  브라우저는 서버에서 무슨일이 발생하는지 알 수 없으므로, URL도 변경되지 않는다.

하지만 sendRedirect 같은 경우, HTTP 헤더에 화면을 전환할 URL을 저장하는것 뿐이며, 실제로 Redirect하는 주체는 브라우저다. 그렇기 때문에 URL 또한 변하게되며, 다시 서버 작업을 요청하기 때문에 request와 response 객체가 새로 생성되는 것이다.