redirect와 forward의 차이

    - jsp 환경에서, 현재 작업중인 페이지에서 다른 페이지로 이동하는 두가지 방식의 페이지 전환 기능.


  * Forward : Web Container 차원에서 페이지 이동만 있다. 실제로 웹 브라우저는 다른 페이지로 이동했음을 알 수       없다.그렇기 때문에, 웹 브라우저에는 최초에 호출한 URL이 표시되고 이동한 페이지의 URL 정보는 볼 수 없다. 동일한  웹 컨테이너에 있는 페이지로만 이동할 수 있다.

   현재 실행중인 페이지와 forwad에 의해 호출될 페이지는 request와 response 객체를 공유한다.


  * Redirect : Web Container는 Redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라고 명령을 내린다. 그러면 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다. 다른 웹 컨테이너에있는 주소로 이동이 가능하다.

   새로운 페이지에서는 request와 response객체가 새롭게 생성된다.


  웹 개발을 하는 사람이라면 아주 익숙한 단어일 것이다. 둘 다 한 페이지에서 다른 URL 로 이동하고자 할 때 사용된다. 하지만 두방식은 커다란 차이점을 가지고 있다.


  forward 방식은 다음 이동할 URL로 요청정보를 그대로 전달한다. 말 그대로 forward(건네주기) 하는 것이다. 그렇기 때문에 사용자가 최초로 요청한 요청정보는 다음 URL에서도 유효하다.



 반면 redirect의 경우 최초 요청을 받은 URL1 에서 클라이언트에 redirect할 URL2을 리턴하고, 클라이언트에서는 전혀 새로운 요청을 생성하여 URL2에 다시 요청을 보낸다. 따라서 처음 보냈던 최초의 요청정보는 더 이상 유효하지 않다.



   forward와 redirection의 이러한 차이 때문에 실제 웹 애플리케이션을 작성할 때 두 가지 방식 중 하나를 적절히 선택하여 사용해야 한다.

  예를 들어, 게시판 애플리케이션을 작성한다고 하자. 사용자가 보낸 요청 정보를 이용하여 글쓰기 기능을 수행하는 CGI가 있다면, 이 CGI의 응답 페이지는 forward와 redirection 중 어느 것을 사용해야 할까? 정답은 redirection이다. 사용자가 실수 혹은 고의로 글쓰기 CGI의 응답 페이지에서 '새로고침'을 누르면 어떻게 될까? forward의 경우 요청정보가 그대로 살아있기 때문에 똑같은 글이 여러번 등록될 수 있다. 하지만 redirection의 경우 처음 글을 작성할 때 보냈던 요청 정보는 존재하지 않는다. 또한 글쓰기 기능을 하는 URL1이 아닌 URL2로 요청을 보내기 때문에 글쓰기가 여러번 수행되지 않는다.

  한 마디로 시스템(세션, DB, ...)에 변화가 생기는 요청(로그인, 회원가입, 글쓰기 등)의 경우 redirection 방식으로 응답하는 것이 바람직 하며, 시스템에 변화가 생기지 않는 단순 조회 요청(글 목록 보기, 검색 등)의 경우 forward 방식으로 응답하는 것이 바람직하다.


출처 : http://blog.naver.com/saintw?Redirect=Log&logNo=100165339381

[출처] redirect, forward 차이|작성자 임성수

[출처] redirect, forward 차이|작성자 임성수


'Programming > 개발 노트' 카테고리의 다른 글

mht가 이상하게 열린다?!  (0) 2014.02.19
입력값에 null/Empty 있는 경우 처리  (0) 2013.12.24
[iBatis] Dynamic SQL, iterate  (0) 2013.12.24
VirtualBox 다루기!!  (0) 2013.10.29
by 으스스 2013. 10. 28. 09:37
| 1 |