리다이렉트(redirect) vs 포워드(foword)
redirect
웹컨테이너는 sendRedirect() 메소드가 호출되면 브라우저에 응답을 보내는데
이 응답에는 브라우저가 웹 컨테이너의 응답을 받은 후 다시 요청을 보낼 새로운 URL이 포함되있다.
브라우저에서 완전히 새로운 요청을 하기때문에 요청속성으로 저장되있는 객체도 리다이렉트가 발생하기전에 소멸된다.
예를들어 a.jsp에서 request에 속성값을 담아 b.jsp 로 리다이렉트 시키면... 속성값이 b페이지에
전달되지않는다.(새로운요청을 하므로...)
forward
의 경우는 포워드를 사용하여 다른자원(jsp나 servlet)으로 요청을 보내어 처리하여도
클라이언트에는 이 사실을 알리지않는다(웹 컨테이너 내에서 처리된다)
리다이렉트와 달리 새로운 요청을 위한 클라이언트와의 통신이 없어서 좀더 나은 성능을 보여준다.
그리고 포워딩시에는 포워딩후에도 요청 속성에 있는 객체들을 사용할수 있다.
그러나 포워드를 클라이언트에 알리지 않으므로(웹 컨테이너에서만 사용하니까)
URL의
변화가
없다..
Redirect는
흔히 Request객체를
재
사용
할
수 없으며 Forward는 Request 객체를
재 사용
가능하다고
알고
있습니다. 그래서 Forward가
빠르며(Request를
있는
것을
그대로
쓰므로) Redirection은
느리다고
알고
있습니다.(Request를
지우고
다시
만드니
느리죠^^)
또 Forward인
경우 URL이
바뀌지
않으며 Redirect인
경우 URL창의
주소가
바뀌는
것으로
알고
있습니다.
앞부분의
내용은
서버에서
어떻게
처리하느냐를
이해하시면
위의
내용이
이해가
가실
겁니다.
Redirection 인
경우
클라이언트에서
서버로
요청을
보내면
서버는 HTTP Protocol 응답헤더인 location 에 Redirection 될곳의
주소를
넣어서
클라이언트로
응답을
쏴
버리죠… 그런
클라이언트는 Location 값을
읽어
음… 여기가면
있다네… 라고
생각
후
다시
그쪽으로
요청을
보내는
겁니다. (결국
요청이
없어지고
새로
생겨
났네요…그래서
최초
요청에
포함된
모든
객체를
리다이렉트된
자원에서는
이용
할
수
없는
거죠) 그럼
서버는
그
자원을
응답으로
만들어
다시
클라이언트로
보내는
겁니다. 브라우저
상단 URL 창의
주소가
바뀌겠죠^^;;;
반면 Forward인
경우
서버에서
이를
해석하여
즉
컨테이너
안에서
해석을
한다는
의미
입니다. 그래서 forward한
곳의
자원을
이용하여
응답을
만들어
보내게
됩니다. 클라이언트는
이
사실(포워드된
사실)을
전혀
알지
못하게
되는
겁니다. 그래서 URL 창의
주소가
처음
요청했던
주소
그대로
있게
되는
것이죠
'IT노트 > JSP/Servlet' 카테고리의 다른 글
request setAttribute getAttribute NULL (0) | 2015.04.12 |
---|---|
이미지를 스트림으로 만들어서 jsp에서 미리보기(다운로드와 거의 동일) (0) | 2015.03.14 |
request - url / jsp 주소값 (0) | 2015.03.04 |
JSP 와 Servlet, 왜 같이 쓸까? (0) | 2015.02.02 |
<Servlet 이란 무엇이며 이클립스에서 간단 작성해보자> (0) | 2015.02.02 |