Development/Server

[JSP, Servlet] redirect와 forward 차이점

자르비옹스 2022. 3. 23. 16:42

WAS에서 web page를 이동하는 방법에는 두 가지가 있다. forward와 redirec가 있는데, 차이점에 대하여 알아보자.

1. redirect

redirect는 was에 명령이 들어오면, 웹 브라우저로 이동할 url을 포함하여 응답을 보낸다. 그러면 url을 지시된 주소로 바꾸고 해당 주소로 이동한다. 이때 url은 동일 서버를 포함하여 타 url도 가능하다. redirect는 페이지가 이동할 경우, 이전에 서버로 전송하고 받은 request와 response는 소멸되고 새로운 request, response가 생성된다. 따라서 forward와는 다르게 이전의 request에 담긴 내용이 공유가 안된다. 따라서 data를 저장하기 위해서는 request로는 불가능하고, session이나 cookie를 이용해야 한다. 속도는 forward보다 느리다.

 

사용 예시 ) 시스템에 변화가 생기는 요청(회원가입, 글쓰기 등)의 경우 => request가 소멸되므로 중복된 데이터가 여러번 저장되는 현상을 막는다.

 

요약 :  서버가 클라이언트에게 어떤 URL로 이동하라는 요청을 보내는 것을 리다이렉트라고 한다.

출처 https://goodncuteman.tistory.com/58

 

2. forward

forward는 web container 차원에서 페이지의 이동만 존재한다. 따라서 동일 서버(project)내의 경로로만 이동이 가능하다. 실제로 웹 브라우저는 다른 페이지로 이동했음을 알 수 없기 때문에 웹 브라우저의 url은 최초에 호출한 url이 표시되고, 이동한 페이지의 url 정보는 확인할 수 없다.

forward에 의해 호출될 페이지는 request와 response를 공유하므로, 데이터를 저장 및 유지할 수 있다.

속도는 redirect보다 빠르다.

 

사용 예시 ) 정보 목록 출력 => 서버에서 얻은 데이터를 이동할 페이지에 출력해야 하므로 request에 저장한다.

request.setAttribute(name, value)

만약 사용자가 실수 혹은 고의로 글쓰기 응답 페이지에서 새로고침을 누른다면, 요청 정보가 그대로 살아있기 때문에 요청이 여러 번 전달되어 동일한 게시물이 여러 번 등록될 수 있다. 그렇기 때문에 게시판을 제작하는 과정에서는 시스템에 변화가 생기지 않는 단순 조회 요청(글 목록 보기, 검색)의 경우 forward로 응답하는 것이 바람직하다.

출처 https://goodncuteman.tistory.com/58

 

 

참고

https://goodncuteman.tistory.com/58

https://mangkyu.tistory.com/51