리다이렉트는 HTTP프로토콜로 정해진 규칙이다.
서버는 클라이언트의 요청에 대해 특정 URL로 이동을 요청할 수 있다. 이를 리다이렉트라고 한다.
서버는 클라이언트에게 HTTP 상태코드 302로 응답하는데 이때 헤더 내 Location 값에 이동할 URL 을 추가한다.
클라이언트는 리다이렉션 응답을 받게 되면 헤더(Location)에 포함된 URL로 재요청을 보내게 된다. 이때 브라우저의 주소창은 새 URL로 바뀌게 된다.
서블릿이나 JSP는 리다이렉트하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.
첫번째 요청과 리다이렉트에 의한 두번째 요청은 각각 다른 요청이다.
따라서 생성되는 request,response 객체도 다른 객체라는 점을 알아야 한다.
웹 브라우저에서 Servlet1에게 요청을 보내면, Servlet1은 요청을 처리한 후, 그 결과를 Request에 저장하여 같은 웹 어플리케이션 안에 있는 Servlet2에게 전송한다.
Servlet2는 Servlet1으로 부터 받은 Request와 Response를 이용하여 요청을 처리한 후 웹 브라우저에게 결과를 전송한다.
포워딩은 클라이언트와 통신없이 서버에서만 처리되는 것이기 때문에 리다이렉트보다 나은 성능을 보여준다.
redirect와 forward 모두 현재 페이지에서 다른 페이지로 전환하는 기능을 수행한다.
redirect는 클라이언트가 요청을 2번 보내는 방식이므로 url자체가 바뀐다.
forward는 서버 내부에서 자체적으로 url을 변경함으로, 클라이언트 측에서는 url이 변경되지 않는다.
Redirect 방식은 시스템에 변화가 생기는 로그인, 회원가입, 글쓰기 등에 이용한다.
Forward 방식은 시스템에 변화가 생기지 않는 단순조회나 검색의 경우 이용한다.
Page : 페이지 내에서 지역변수처럼 사용
- 마치 지역변수처럼 사용된다는 것이 다른 Scope들과 다릅니다.
- 지역 변수처럼 해당 jsp나 서블릿이 실행되는 동안에만 정보를 유지하고자 할 때 사용됩니다.
Request : http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용
- http 요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지하고자 할 경우 사용한다. ex) forward할 때 request.setAttribute 로 값을 request에 저장해둔다.
- HttpServletRequest 객체를 사용한다.
Session : 웹 브라우저 별로 변수가 관리되는 경우 사용
- HttpSession 인터페이스를 구현한 객체를 사용한다.
- 웹 브라우저별로 변수를 관리하고자 할 경우 사용한다.
웹 브라우저간의 탭 간에는 세션정보가 공유되기 때문에, 각각의 탭에서는 같은 세션정보를 사용할 수 있다.
- 장바구니처럼 사용자별로 유지가 되어야 할 정보가 있을 때 사용한다.
Application : 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용
- 웹 어플리케이션이 시작되고 종료될 때까지 변수를 사용할 수 있다.
- ServletContext 인터페이스를 구현한 객체를 사용한다.