redirect와 forward처리과정 비교

redirect

  1. 클라이언트가 url을 요청(request)했을 때 302로 응답(response)했다
    300번대는 redirect, 자른 URL로 재요청 하라는 의미
  2. 응답에는 body가 없고 헤더만 있다
  3. 응답의 헤더에는 재요청할 URL(Location: /../)이 있다
  4. 응답을 받은 브라우저(사용자x)는 자동으로 재요청 URL로 요청을 다시 보낸다
  • 브라우저가 자동으로 재요청하는 것은 GET방식으로 진행된다(처음에 클라이언트가 보낸 요청 방식에 상관 없음)

forward

  1. 클라이언트가 url을 요청(request)했을 때 자신이 처리하는 것이 아니거나, 일부만 처리하고 넘겨야할 때 다른 jsp로 전달한다
  2. 받은 request 그대로 다른 jsp에 전달한다
  3. 전달하는 request에는 처음 jsp에서 새로운 내용을 추가할 수 있다(요청 중 일부만 처리)
  4. 마지막에 처리한 jsp가 응답을 클라이언트에게 보낸다
  • request 객체가 model 역할, 처음 요청을 받는 객체가 controller 역할, 이후 요청을 넘겨 받는 객체가 view 역할

Spring에서 처리하는 방법

RedirectView

  1. URL을 요청하면 DispatcherServlet이 받는다
  2. 이 요청을 처리할 수 있는 Controller의 메서드를 호출한다(URL과 맵핑되어 있는)
  3. 메서드의 유효성 검사를 통과하지 못했다면 controller는 return "redirect: /../"; 를 DispatcherServlet에 전달한다
  4. DispatcherServlet은 반환받은 문자열에 redirect가 포함되어 있기 때문에 RedirectView에 전달한다
  5. RedirectView는 브라우저에 redirect 정보를 담은 응답을 만들어서 응답한다
  6. 브라우저는 응답에 담긴 location으로 재요청을 보낸다

JstlView

  1. URL을 요청하면 DispatcherServlet이 받아서 해당 controller의 메서드를 호출한다
  2. 뷰 이름을 반환 받고 뷰 이름 문자열을 InternalResourceViewResolver에 보낸다
  3. InternalResourceViewResolver가 이 이름을 해석한다(실제로 어떤 파일인지)
    문자열의 앞 경로와 뒤에 확장자를 붙여준다
  4. 그 이름을 JstlView에 넘겨준다
  5. JstlView가 해당 이름에 해당하는 jsp에게 모델을 넘겨준다
  6. jsp파일은 모델을 가지고 최종 응답을 만들어 브라우저에 응답한다
  • servlet-context.xml 파일 안에 InternalResourceViewResolver로 붙일 접두사 접미사를 설정할 수 있다

InternalResourceView

  • forward방식
  1. URL을 요청하면 DispatcherServlet이 받아서 해당 controller의 메서드를 호출한다
  2. 메서드가 반환하는 문자열이 forward로 시작한다면 뒤에 있는 주소로 forward하라는 의미
  3. DispatcherServlet이 해당 문자열을 InternalResourceView에 전달한다
  4. InternalResourceView가 해당 문자열을 호출하고 DispatcherServlet에 알려준다
  5. DispatcherServlet은 다시 요청받은 url에 맵핑되어있는 메서드를 호출한다
  6. 결과로 뷰를 반환받았다면 위의 JstlView에 해당하는 과정이 진행된다

profile
안녕하세요. Chat JooPT입니다.

0개의 댓글