redirect, forward, scope

bin1225·2021년 12월 31일
0

리다이렉트 (redirect)

  • 리다이렉트는 HTTP프로토콜로 정해진 규칙이다.
    서버는 클라이언트의 요청에 대해 특정 URL로 이동을 요청할 수 있다. 이를 리다이렉트라고 한다.

  • 서버는 클라이언트에게 HTTP 상태코드 302로 응답하는데 이때 헤더 내 Location 값에 이동할 URL 을 추가한다.
    클라이언트는 리다이렉션 응답을 받게 되면 헤더(Location)에 포함된 URL로 재요청을 보내게 된다. 이때 브라우저의 주소창은 새 URL로 바뀌게 된다.

  • 서블릿이나 JSP는 리다이렉트하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.

첫번째 요청과 리다이렉트에 의한 두번째 요청은 각각 다른 요청이다.
따라서 생성되는 request,response 객체도 다른 객체라는 점을 알아야 한다.

forward란?

  • 웹 브라우저에서 Servlet1에게 요청을 보내면, Servlet1은 요청을 처리한 후, 그 결과를 Request에 저장하여 같은 웹 어플리케이션 안에 있는 Servlet2에게 전송한다.
    Servlet2는 Servlet1으로 부터 받은 Request와 Response를 이용하여 요청을 처리한 후 웹 브라우저에게 결과를 전송한다.

  • 포워딩은 클라이언트와 통신없이 서버에서만 처리되는 것이기 때문에 리다이렉트보다 나은 성능을 보여준다.

redirect와 forward 모두 현재 페이지에서 다른 페이지로 전환하는 기능을 수행한다.

차이점

  • url

    redirect는 클라이언트가 요청을 2번 보내는 방식이므로 url자체가 바뀐다.
    forward는 서버 내부에서 자체적으로 url을 변경함으로, 클라이언트 측에서는 url이 변경되지 않는다.

  • 이용

    Redirect 방식은 시스템에 변화가 생기는 로그인, 회원가입, 글쓰기 등에 이용한다.
    Forward 방식은 시스템에 변화가 생기지 않는 단순조회나 검색의 경우 이용한다.

Scope

4가지 Scope

  • Page : 페이지 내에서 지역변수처럼 사용
    - 마치 지역변수처럼 사용된다는 것이 다른 Scope들과 다릅니다.
    - 지역 변수처럼 해당 jsp나 서블릿이 실행되는 동안에만 정보를 유지하고자 할 때 사용됩니다.

  • Request : http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용
    - http 요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지하고자 할 경우 사용한다. ex) forward할 때 request.setAttribute 로 값을 request에 저장해둔다.
    - HttpServletRequest 객체를 사용한다.

  • Session : 웹 브라우저 별로 변수가 관리되는 경우 사용
    - HttpSession 인터페이스를 구현한 객체를 사용한다.
    - 웹 브라우저별로 변수를 관리하고자 할 경우 사용한다.
    웹 브라우저간의 탭 간에는 세션정보가 공유되기 때문에, 각각의 탭에서는 같은 세션정보를 사용할 수 있다.
    - 장바구니처럼 사용자별로 유지가 되어야 할 정보가 있을 때 사용한다.

  • Application : 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용
    - 웹 어플리케이션이 시작되고 종료될 때까지 변수를 사용할 수 있다.
    - ServletContext 인터페이스를 구현한 객체를 사용한다.

0개의 댓글