저는 jsp를 통해서 브라우저에 화면을 띄우는 과정에서 sendRedirect와 RequestDispatcher가 똑같이 브라우저에 jsp를 띄우는 거 아니야? 뭐가 다른거야? 배우기는 했지만 가지고 있는 지식이 많지 않아서 확실하게 이해가 되지 않았다. 그래서 복습하는 과정에서 이해해보려고 노력했다.
먼저 sendRedirect는 request정보를 완전히 없애서 새로운 url로 할당한다는 것이였습니다. 한마디로 표현하자면 데이터를 갖지 않고 브라우저에 출력한다는 뜻입니다.
그렇다면 RequestDispatcher는 뭘까요. requestDispatcher는 이름에도 있듯이 request정보를 가지고 url을 브라우저에 띄우는 것입니다. 한마디로 데이터를 가지고 브라우저에 출력하는 것을 뜻합니다.
이렇게 보시다시피 둘의 차이점은 브라우저가 요청한 request정보를 가지고 url를 출력하냐 그렇지 않냐의 차이입니다.(이름으로 보면 request가 있고 없고로 구분하면 되겠죠?ㅎㅎ)
여기서 또 궁금했던 것이 그럼 forward방식과 include방식이 뭔차이인가 입니다.
일단 forward방식과 include방식은 RequestDispatcher의 2가지 방법이라고 할 수 있습니다.
RequestDispatcher의 첫번째 forward방식은 a.jsp에서 b.jsp로 제어권을 넘기고 b.jsp로 브라우저에 출력하는 것입니다. 한마디로 b.jsp내용만 브라우저에 출력하는 것입니다.
RequestDispatcher의 두번째 방식은 include방식인데 이 방식은 a.jsp에서 제어권을 b.jsp로 넘긴다음 b.jsp의 내용을 가져와서 다시 a.jsp 내용을 브라우저에 출력하는 것이라고 생각하면 됩니다. 한마디로 b.jsp내용을 가져와서 a.jsp에서 같이 브라우저로 전송한다고 생각하면 됩니다.
그래서 sendRedirect와 RequestDispatcher가 어디서 사용되는데?
RequestDispatcher는 request정보를 가지고 있기 때문에 보통 controller에서 doGet 메서드에서 많이 활용된다. 왜냐하면 브라우저에서 요청한 request정보를 가지고 다시 화면에 출력해줘야하기 때문이다.
controller에서 doPost 메서드에서는 주로 정보를 저장하고 처리하는 과정을 진행하므로 정보를 다 처리하고 나서 sendRedirect를 사용해서 브라우저에 새로운 화면을 띄운다.