jsp - response.sendRedirect와 request.getRequestDispatcher
Development/JSP & Servlet 2012. 12. 24. 01:10저 두 녀석간에 어떤 차이점이 있는것일까? sendRedirect가 안되면 getRequestDispatcher를 사용하곤 했는데 원인을 찾아봐야 할 필요성이 생겼다.
1. response.sendRedirect("/contextName/helloWorld.jsp");
전송되는 페이지의 HTTP HEADER에 리다이렉트 정보를 담아 보낸다. 브라우저가 HEADER 정보를 분석한 후 원하는 URL로 리다이렉트 시킨다. sendRedirect 이후에 세션, 쿠키, 헤더 정보를 조작하는 로직이 있다면 Cannot create a session after the response has been committed 에러를 내뱉는다. 비지니스 로직에서 sendRedirect를 하게 된다면 과감하게 return 시키자. 경로에는 컨텍스트명을 포함한 절대 경로(/로 시작하거나 http로 시작하는 풀 주소)로 적어주어야 한다.
2. request.getRequestDispatcher("/helloWorld.jsp").forward(request, response);
해당 코드가 실행되는 순간 이동할 페이지를 강제로 읽어들여 리다이렉트 한다. 브라우저에게 의사 결정권이 없다.
이후의 코드가 무시된다. sendRedirect와 같은 기능을 하지만 sendRedirect는 request/response를 잃는 반면 getRequestDispatcher의 경우 재활용 한다. 경로에는 컨텍스트명을 제외한 경로를 적는다.
참고 :
http://www.jguru.com/faq/view.jsp?EID=223732
http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=50&t=009192
출처 - http://theeye.pe.kr/entry/responsesendRedirect-VS-requestgetRequestDispatcher
'Development > JSP & Servlet' 카테고리의 다른 글
jsp - 한글 파일명 다운로드 처리 (0) | 2013.07.22 |
---|---|
jsp - 스마트폰 인식(모바일 기기 os 검출) (0) | 2013.06.01 |
jsp - 접속 URL 출력 (0) | 2012.12.06 |
Java EE version history (0) | 2012.11.26 |
jsp - The function size must be used with a prefix when a default namespace is not specified (0) | 2012.11.25 |