웹에서는 현재 작업중인 페이지에서 다른 페이지로 이동하기 위해 2가지 페이지 이동(전환)기능을 제공합니다. Forward 와 Redirect 가 그 2가지입니다.
Forward 방식은 Web Container 차원에서의 페이지 이동만 존재합니다. 실제 웹 브라우저는 다른 페이지로 이동했음을 알 수 없습니다, 때문에 웹 브라우저는 최초 호출URL 이 변경되지 않습니다.
그 말은 즉슨, 이동한 URL정보는 확인할 수 없습니다.
또한 현재 실행중인 페이지와 forward에 의해 호출되는 페이지는 *Request / Response* 객체를 공유합니다.
위 사진을 보시면 금방 이해가 되실 겁니다. Request객체가 그대로 유지된 상태로 전송됨으로 정보를 공유할 수 있습니다.
Forward 주의할 점
위 사진처럼 요청정보를 그대로 전달하기 때문에 사용자가 최초로 요청한 정보도 유효합니다.
그 말은, 사용자가 기본키설정이 되어있지 않은 테이블을 이용하여 회원가입을 진행한다고 했을 때 사용자가 실수나 고의로 페이지에서 새로고침을 누른다면 요청정보가 그대로 살아있기 때문에 새로고침을 누를 때마다 아이디가 계속하여 등록될 수 있습니다.그러므로, Forward는 시스템에 변화가 없는 조회 요청에 적합합니다.
Redirect는 Web Container로 명령이 들어오면, 웹 브라우저에 다른 페이지로 이동하라는 명령을 내립니다. 그럼 브라우저는 URL을 지시된 주소로 바꾸고 해당 주소로 이동합니다. Forward와는 반대로 request / response 객체가 새롭게 생성됩니다.
위 사진을 보시면 최초 요청받은 URL1에서 클라이언트에게 Redirect할 URL을 다시 반환하고 클라이언트에게 새로운 요청을 생성하여 다음 URL2에 다시 요청을 보낸다. 따라서 처음 보냈던 최초의 요청정보는 더 이상 유효하지 않게 된다.
Redirect 주의할 점
위 사진처럼 요청정보를 다음 객체가 URL1에서 사라지고 redirect 된 후 다시 request객체가 생성되어 요청되는 것을 볼 수 있다. 따라서, Forward에서의 주의할 점이 사라지기
때문에, 시스템에 변화가 생기는 요청의 경우에 적합합니다.
forward | redirect |
URL의 변경 X | URL의 변경 O |
Request/response 유지 O | Request/response 유지 X |
속도가 빠름 | 속도가 느림 |
Request객체 소속 | Response객체 소속 |
forward / redirect 숙지하자!!!
벨로그 왜 표기능 지원 안해줘.... 빨랑해줘ㅠㅠ