redirect와 forward

뫄뫄(ahk)·2022년 9월 20일
0

Spring

목록 보기
10/18
post-thumbnail

이 게시글은 남궁성 강사님의 스프링의 정석 강의를 요약,정리한 글입니다.

redirect와 forward의 처리 과정 비교(JSP)

redirect

  • 서버의 URL 재요청
  • 요청에 대한 응답(300번대)으로 body는 없다
  • 브라우저는 location 응답헤더의 URL로 자동으로 새로운 요청을 보낸다
  • 브라우저의 URL창의 URL이 새로운 주소로 변한다.
  • GET 방식만 사용
  • 요청도 두 번, 응답도 두 번
  • redirect시 model에 값을 저장하면 Spring이 queryString으로 자동변환해준다.

forward

  • 요청 처리 불가 시 또는 일부 요청 처리 후 다른 URL로 요청을 넘기는 것이 forward
  • forward할 때 request객체에 data를 담아 forward할 수 있다
  • forward되어도 기존 request를 사용하기 때문에 브라우저의 URL은 변하지 않는다.
  • forward시 model에 값을 저장해도 Spring이 queryString으로 자동 변환해주지 않고 값은 사라진다.
  • MVC패턴의구현
    • request는 model
    • login.jsp는 view
    • write.jsp는 Controller
    • spring이 forward방식을 통해 MVC패턴을 구현한 것

RedirectView

  1. Controller에서 “redirect:/register/add” 문자열 반환
  2. DispatcherServlet에서 반환 받은 문자열의 “redirect”를 보고 RedirectView로 전달
  3. RedirectView에서 응답 헤더를 생성하여 응답
  4. 브라우저에서 응답을 보고 응답 헤더의 location의 url로 자동 요청

JstlView

  1. Controller에서 view이름(”registerForm”)을 반환
  2. DispatcherServlet(DS) 에서 InternalResourceViewResolver에 view이름을 넘겨줌
  3. InternalResourceViewResolver에서 view의 전체 경로를 DS에 반환(해석한다. 접두사 접미사, servlet-context.xml)
  4. jstlView은 전체 경로를 받아 해당 view에 model을 넘겨준다.
  5. registerForm.jsp는 최종 응답을 브라우저에 넘겨준다.
  • jstlView는 jsp뷰를 처리(JSTL, JS Tag Library와 다름)
  • spring에는 다양한 view가 있다. jsp니까 jstlView임.

InternalResourceView

  • forwarding할 때 사용되는 view
  • forward하여 request를 넘겨줄 path를 DispatcherServelet에 전달
    = 내부 요청
  • 브라우저가 요청을 1번만 해서 forward 되어 다른 곳에서 요청이 처리되어도 브라우저의 요청 URL은 달라지지 않는다.
  • 실 사용 예
    한 요청에 뷰 옵션이 여러 개가 있는 경우(은행 1년치 입출력 내역을 pdf, excel, csv로 할 것인지를 선택)(사용자가 몰라도 되는 처리 경로를 숨길 수 있다)
profile
NONONONONONOYes!

0개의 댓글