[JSP] Forward / Redirect
JSP 환경에는 Java Web Application 이동 방식으로 Forward 방식과 Redirect 방식이 있다.
1. Forward 방식
- request.getRequestDispatcher("url").forward(request, response)
- Web Container 상에서 이동되기 때문에 Client는 이동 여부를 알 수 없다.
- 기존 request와 response가 유지된다.
- 주로 request의 setAttribute(name, value)를 통해 Controller가 View에 정보를 공유한다.
- 사용자가 재요청(새로고침)할 경우 기존 request가 유지되므로 재동작한다.
- 정보 조회에만 적합하다.
2. Redirect 방식
- response.sendRedirect("url")
- Web Container에서 (Controller)에서 Client에게 특정 url로 이동하여 응답받을 것을 지정하는 방식이다.
- Forward와는 다르게 url이 변경되고, request와 reponse는 유지되지 않는다.
- 정보 생성, 수정, 삭제에 적합하다.
3. 위의 두 가지 방식의 사용 예시를 간단히 살펴보면,
사용자가 회원가입을 하기 위해 필요한 정보들을 채운 후 회원가입을 진행할 때
forward와 redirect 중 어느 것을 사용해야 할까?
--> redirect가 적합하다.
사용자가 실수로 재요청(새로고침)할 경우 같은 forward의 경우에는, 회원가입 요청 정보들을 유지하고
있기 때문에 회원가입이 한 번 더 수행돼버린다.
(아이디나 주민번호의 중복이 일어나 회원가입이 이뤄지지는 않겠지만, 같은 정보를 가지고 계속해서
회원가입 재요청이 가능하다는 뜻이다.)
하지만 redirect의 경우 회원가입을 수행할 때의 요청 정보를 유지하고 있지 않기 때문에
회원가입이 여러 번 수행되지 않는다.
4. 정리
Forward 방식 | Redirect 방식 |
url이 변경되지 않음 | url이 변경됨 |
request와 response가 유지됨 | request와 response가 유지되지 않음 |
속도가 빠름 | 속도가 느림 |
request 객체에 소속되어 있음 | response 객체에 소속되어 있음 |