forward
- 웹 브라우저에서 Servlet에게 요청을 보내고 해당 Serclet이 요청을 처리하고 결과를 HttpServletRequest에 저장한다.
- Servlet은 결과가 저장된 HttpServletRequest와 응답을 위한 HttpServletResponse를 같은 웹 어플리케이션에 있는 다른 Servlet이나 JSP로 전송하여 값을 출력해 준다.
- url이 변경되지 않는다.
redirect
- 클라이언트가 서버로 요청을 보냈을 때 이를 처리하고 이동할 URL을 설정해 클라이언트를 이동시키는 것이 Redirect이다.
- redirect로 넘어간 페이지에서는 Request와 Response 객체가 새롭게 생성되기 때문에 이전의 값은 사라진다.
- url 역시 지정해 준 주소로 이동하며 클라이언트가 보는 주소도 바뀌게 된다.
redirect는 url에 변화가 있고 페이지가 이동할 때 Request와 Response 객체가 새로 생성되기 때문에 재사용할 수 없게 된다.
forward는 url에 변화가 없고 클라이언트가 넘긴 최초의 값을 저장하고 있기 때문에 재사용이 가능하다.
위의 내용으로 보자면 DB나 시스템 등에 변화가 생기는 요청(로그인, 로그아웃, 회원가입, 글 쓰기, 주문 결제 후)의 경우에는 redirect로 응답해 주어야 한다.
그 외의 시스템에 변화가 생기지 않는 게시판 조회, 리스트 조회, 검색 등은 forward로 응답해 주어야 한다.