web container 차원에서의 페이지 이동, 실제로 웹 브라우저는 다른 페이지로 이동했는지 알 수 없다.
웹 브라우저에는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL정보는 볼수가 없다.
동일한 web container에 있는 페이지로만 이동이 가능하다.
현재 실행중인 페이지와 forward에 의해 호출될 페이지는 request, response 객체를 공유한다.
forwar방식은 다음 이동한 URL로 요청정보를 그대로 전달한다. 말 그대로 forward(건네주기)하는 것이다. 그렇기 때문에 사용자가 최초로 요청한 요청정보는 다음 URL에서도 유효하다.
web container는 redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내린다.
웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다.
다른 web container에 있는 주소로 이동이 가능하다.
새로운 페이지에서는 request, response객체가 새롭게 생성된다.
redirect의 경우 최초 요청을 받은 URL1에서 클라이언트에 redirect할 URL2를 리턴하고, 클라이언트에게 전혀 새로운 요청을 생성하여 URL2에 다시 요청을 보낸다. 따라서 처음 보냈던 최초의 요청정보는 더이상 유효하지 않게된다.
다시 정리해보자면 redirect와 forward의 차이점은 크게 두가지로 나눌 수 있다.
첫째, URL의 변화여부(변화 O -> redirect, 변화 X -> forward)
둘째, 객체의 재사용여부(재사용 O -> forward, 재사용 X -> redirect)
즉, 시스템(session, DB)에 변화가 생기는 요청(로그인, 회원가입, 글쓰기)의 경우 redirect방식으로 응답하는 것이 바람직하며, 시스템에 변화가 생기지 않는 단순조회(리스트보기, 검색)의 경우 forward방식으로 응답하는 것이 바람직하다.
'Java 웹 프로그래밍' 카테고리의 다른 글
java.lang.NoClassDefFoundError: Could not initialize class 해결 (0) | 2019.01.16 |
---|---|
JDBC MySQL 5.1.23 이상 사용시 time zone 관련 에러 발생 시 해결 방법 (2) | 2019.01.12 |
쿠키, 세션 (0) | 2019.01.10 |
JAVA IO - 깔끔하게 정리 필요 (0) | 2018.12.27 |
1218 강의 - 요약필요 (0) | 2018.12.27 |