티스토리 뷰

WEB

[Servlet] Redirect와 Forward

_쿠나 2021. 11. 12. 13:40
728x90

 

 

 

 

redirect와 forward에 대해서 찾아보던 중 시작부터 설명하는 글을 찾아서 포스팅.

출처 : https://www.baeldung.com/servlet-redirect-forward

아래 포스팅은 위 출처의 글을 번역합니다.

 

Overview

때때로 자바 서블릿의 initial HTTP Request Handler는 Request를 다른 리소스로 위임할 필요가 있다.
이런 경우 우리는 request를 forward 하거나 다른 리소스로 redirect 할 수 있다.

 

Maven Dependencies

시작은 Servlet 메이븐 디펜던시 추가

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.0</version>
</dependency>

 

Forward

forward부터 살펴보자

protected void doGet(HttpServletRequest req, HttpServletResponse resp){
    RequestDispatcher dispatcher = getServletContext()
        .getRequestDispatcher("/forwarded");
      dispatcher.forward(req, resp);
}

RequestDispatcher 참조를 부모 Servlet으로부터 잡고(hold) 다른 서버 리소스를 가리킨다.
We get hold of RequestDispatcher reference from parent Servlet and point it to another server resource
간단하게 말하자면 request를 전달한다는 얘기
클라이언트가 http://localhost:8080/hello?name=James 를 request로 제출하면, 로직이 실행되고 요청이 /forwarded로 전달된다.

(무슨 뜻이지..?)

Redirect도 보자

 

Redirect

protected void doGet(HttpServletRequest req, HttpServletResponse resp){
    resp.sendRedirect(req.getContextPath() + "/redirected");
}

원래의 응답 객체object를 사용해서 이 request를 다른 URL:"/redirected" 로 보내게 된다.
클라이언트가 http://localhost:8080/welcome?name=James를 제출하면 request는 http://localhost:8080/redirected로 redirect 된다.

redirect에 대해 더 많이 알고 싶다면 : https://www.baeldung.com/spring-redirect-and-forward

 

Differences

위의 두 케이스에 모두 name이라는 파라미터를 전달했는데,
결론적으로 말하면 forward된 요청은 이 값을 전달하지만, redirect된 요청은 그렇지 않다.
이유는 redirect의 경우 request 객체가 원래 객체와 다르기 때문이다. 만약 이 파라미터를 계속 사용하고 싶다면 HttpSession 객체에 저장해야한다.

 

아래 차이점 정리:

Forward:
  • request가 서버 쪽에서 추가로 처리process됨
  • 클라이언트에게 주는 영향 없음. 브라우저 URL이 동일하게 유지됨
  • Request와 response 객체가 forward 후에도 같은 객체로 유지됨. Request-scope 객체도 여전히 유효하다.
Redirect:
  • 요청이 다른리소스로 redirect됨(re-direct: 다시 direct 된다... 다시 목적지가 설정된다)
  • 클라이언트가 redirect 후 URL이 바뀌는 것을 볼 수 있음
  • 웹 개발 패턴의 Post/Redirect/Get 내에서 주로 사용됨

 

Conclusion

결론적으로 forward와 redirect는 사용자에게 다른 리소스를 보내지만, 그 체계semantic이 매우 다르다.
전의 scope가 요구되거나 유저에게 알릴 필요는 없는데 어플리케이션이 내부적으로 action하기를 원하는 경우 forwarding,
전의 scope는 버리거나 새로운 컨텐츠가 기존의 요청과 관계가 없을 때 - 로그인 페이지나 양식 제출을 완료했을 때 - redirect를 사용한다.

 

 

 

 

 

 

728x90

'WEB' 카테고리의 다른 글

[Web] REST란? REST는 21세기 미국에서부터 시작되어...  (0) 2021.11.18
[Web] Http Method(GET/POST) 그리고 REST..?  (0) 2021.11.17
[MySQL] auto_increment 관련 쿼리  (0) 2021.11.10
Entity, VO, DTO  (0) 2021.11.10
[Web] Web Server와 WAS  (0) 2021.11.03
댓글
250x250
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함