본문 바로가기

Programming/JSP

DAY 131. JSP - Redirect와 Forward의 차이점

 

 

JSP 내장 객체

 

Response 객체

웹 브라우저의 요청에 대한 (클라이언트에게 보내줄) 응답을 나타내는 객체이다.

 

- sendRedirect(String url)

- 매개값으로 지정한 URL로 요청을 재전송한다. (브라우저에 표시되는 URL이 변경된다.) 

- 브라우저에 표시되는 주소가 바뀌는 방식을 리다이렉트 방식이라고 한다.

- 리다이렉트는 브라우저가 이동할 페이지로 요청과 응답 객체를 새로 생성하여 전송하기 때문에 요청과 응답 정보가 유지되지 않는다.

 

 PageContext 객체

JSP 페이지와 관련된 다른 내장 객체를 얻어내거나 현재 페이지의 요청과 응답에 제어권을 다른 페이지로 넘겨주는 데 사용되는 객체이다.

 

- forward(String url)

- 지정한 URL로 현재 페이지의 요청과 응답에 대한 제어권을 영구적으로 넘긴다.

- 브라우저에 표시되는 주소가 바뀌지 않는 방식을 포워딩 방식이라고 한다.

- 포워딩 방식은 현재 페이지의 요청과 응답에 대한 제어권만 다른 페이지로 넘어가기 때문에 요청 정보와 응답 정보가 유지되는 특성이 있다.

 


 

 

[리다이렉트]

redirect.jsp가 아니라 redirect_target.jsp로 URL이 바뀐다.
클라이언트가 브라우저에서 서버로 요청을 보내면 -> redirect.jsp를 요청한다. -> sendRedirect() 응답 객체에 redirect 정보를 준다. -> 브라우저는 응답을 보고 다시 요청을 보낸다. -> To "redirect_target.jsp"로
이 내용 대로 처리한 다음에 그 결과 내용을 클라이언트에게 보내준다. 
요청이 2번이 가게 된다. 서버는 2번의 응답을 해주게 된다. 
따라서 클라이언트에서 요청을 보낼 때는 request 메시지를 만들어서 보내고, 서버에서 응답할 때는 response 메시지를 만들어서 응답한다.
그리고 서버에서 다시 요청하라고 했기 때문에 앞과 다른 메시지를 만들어서 보내고, 서버에서 응답에 따라서 또 다른 response 메시지를 만들어서 응답한다.

 

브라우저에서 요청을 해서 redirect.jsp로 왔는데 다시 요청을 한다.
여기에서 sendRedirect로 응답을 해주면, 브라우저에서 sendRedirect에 적힌 URL로 브라우저가 재전송, 재요청을 한다.
그래서 요청이 2번이 하게 되는 구조이다.
즉, sendRedirect는 매개값으로 지정한 URL로 요청을 재전송 시킨다. ("클라이언트야 이 주소로 다시 요청해!" 라고 응답하는 것)
브라우저에서 재요청하기 때문에 URL이 변경된다.

 

 


[포워드]


forward() 하면 request와 response를 요청에 대한 정보를 현재 서버 안에 있는 forward.jsp가 직접 요청을 처리하는게 아니라, 요청 내용을 내부에서 forward_target.jsp로 넘긴다. 
페이지를 이동시킨 것일 뿐, 아직 사용자에게 응답을 해준 것은 아니다. (=요청이 처리된 것이 아니다.)
그럼 forward_target.jsp가 요청 처리하고 그 응답 결과를 클라이언트에게 보내준다.
그래서 클라이언트(브라우저) 입장에서는 하나의 요청만 보냈는데 요청 정보를 forward.jsp에서 forward_target.jsp로 forward한다. (다른 페이지로 넘긴 것) 
그래서 이 응답할 때 사용한 response 객체를 같이 넘겨준다. 그럼 forward_target.jsp이 처리하고 응답 내용을 response에 담아서 클라이언트에게 내려준다.
최초 요청했던 url이 유지된다. but, 실제 내용은 forward_target.jsp에 있는 내용이 내려온다.

 

redirect처럼 페이지를 이동시키는 것은 맞지만,
요청도 1번만 가고, Status Code : 200, URL도 바뀌지 않는다. 

 

 


** 둘은 장단점이 있는게 아니라, 상황에 따라서 필요에 따라 사용한다.

'Programming > JSP' 카테고리의 다른 글

DAY 112. JSP - EL/JSTL  (0) 2021.12.08
DAY 111. JSP - 내장 객체, 영역 스코프  (0) 2021.12.07
DAY 107. JSP - 기본 개념  (0) 2021.12.03