-
[JSP] RequestDispatcher.forward 메소드와 sendRedirect 메소드의 차이점Legacy/JAVA 2015. 9. 12. 18:23728x90
1. sendRedirect 메소드는 URL을 웹 브라우저로 보내서 간접적으로 웹 자원을 호출하지만, forward 메소드는 웹 서버 쪽에서 직접 호출한다.
2. sendRedirect 메소드를 이용하면 다른 웹 서버에 있는 웹 자원도 호출할 수 있지만, forward 메소드를 이용하면 같은 웹 서버, 같은 애플리케이션 디렉토리 내에 있는 웹 자원만 호출할 수 있다.
3. sendRedirect 메소드를 이용하면 텍스트 데이터만 전달할 수 있지만, forward 메소드를 이용하면 객체 형태의 모든 데이터를 전달할 수 있다.
4. sendRedirect 메소드를 통해 한글 데이터를 전달하기 위해서는 URL 인코딩을 해야하지만, forward 메소드를 이용하면 그런 작업이 필요치 않다.
출처 - 뇌를 자극하는 JSP&Servlet
HttpServletResponse의 sendRedirect와 RequestDispatcher의 차이점
JSP를 이용하여 프로그램할 경우 특정작업을 완료한 후 다음 페이지로 이동할 때 흔히 HttpServletResponse의 sendRedirect()를 이용한다. HttpServletResponse의 sendRedirect()는 두번의 Request를 통해 하나의 작업을 완료하는 방식이다. 즉, 첫번째 요청이 서버에서 처리된 다음 서버는 이동할 다음 페이지의 경로를 클라이언트에서 응답하면 클라이언트의 브라우저는 서버에게 새로운 페이지를 다시 요청하여 이동하는 방식이다. 이와 같이 할 경우 두번의 네크? Traffic이 발생하기 때문에 실행속도에 늦어질 수 밖에 없다. 또한 새로운 요청을 하기 때문에 요청하는 페이지에 객체를 전달하기 힘들다는 문제점이 있다.
이 같은 문제점을 해결하기 위하여 RequestDispatcher가 탄생하게 되었다. RequestDispatcher는 일련의 작업이 완료된 후 다음페이지로 이동할 경우 클라이언트에 응답을 한 후 다시 요청하도록 하는 방식이 아니라 서버에서 서버로 페이지를 요청하여 실행한 후 응답을 하도록 한다. 이럴 경우 네트? Traffic이 한번 발생하게 되며, 서버에서 서버로 페이지를 요청하기 때문에 String만이 아닌 객체의 전달도 가능하다.
다음 두개의 그림을 보면 두가지 방식의 차이점을 명확히 알 수 있을 것이다.
RequestDispatcher를 이용할 경우 한번의 요청으로 인해 모든 작업이 서버에서 처리되기 때문에 실행속도는 Response의 sendRedirect를 사용할 때보다 빠르다. 또한 Response의 sendRedirect을 이용할 경우에는 String밖에 전달 할 수 없다. 즉, 객체를 다른 페이지에 전달하는 것이 힘들다. 물론 세션을 이용하면 가능하지만 세션 또한 시스템의 메모리를 차지하기 때문에 매번 세션을 이용하는 것은 좋은 방법은 아니다.
이에 대한 대안으로 RequestDispatcher를 이용하면 된다. RequestDispatcher를 이용하면 서버에서 모든 작업이 처리되기 때문에 서버상에서의 객체의 전달이 가능하다. 하지만 RequestDispatcher를 이용할 경우 문제점이 있다. RequestDispatcher를 이용할 경우 응답이 이루어진 후의 URL이 처음 클라이언트가 요청한 URL로 지정되어 있기 때문에 문제가 되는 경우가 있다.
한가지 예로 사용자의 정보를 가져오거나 사용자의 정보를 볼 경우에는 문제가 되지 않는다. 하지만 사용자가 회원가입을 할 경우 똑같은 정보가 같은 페이지에 요청되기 때문에 같은 정보가 저장되는 경우가 있다.
개발자들이 게시판을 이용할 때 요청속도가 느려 Refresh를 계속해서 누를 경우 똑같은 글이 계속해서 저장되는 것을 경험한 적이 있을 것이다. RequestDispatcher를 이용할 경우에는 같은 문제가 발생하는 경우가 많다.
출처 - http://wiki.javajigi.net/pages/viewpage.action?pageId=77
'Legacy > JAVA' 카테고리의 다른 글
Connect Error: Access denied for user 'root'@'localhost' 에러 해결방법 (0) 2019.03.10 초보 개발자를 위한 스택트레이스 읽는 법 - 오키 fender님 글 (0) 2016.07.23 [정규표현식] html 태그에서 stript와 style 태그 내부에 있는 것들 제거 (0) 2015.10.25 [JSP] <dispatcher>엘리먼트를 이용하여 경우에 맞는 필터 호출하는 방법 (0) 2015.10.13 [Java] String 과 String Buffer, String Builder의 차이점 (0) 2015.10.13 [JSP] 쿠키와 세션에 사용되는 메소드 (0) 2015.09.15 [JSP] JSP 페이지는? (0) 2015.09.07 [JSP] JSP(Java Server Pages)와 자바 서블릿(Java Servlet) (0) 2015.08.26 Java 의 Vector 와 ArrayList , Linked List 의 차이점 (0) 2015.05.04 JSmooth 사용법 (0) 2014.12.09