JSP & Servlet

[JSP] Forward / Redirect

55yudi 2021. 8. 12. 01:11

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 객체에 소속되어 있음