[Servlet] forwarding, redirection

Redirection

클라이언트의 요청을 처리 한 후, 컨테이너는 sendRedirect()가 호출되면 브라우저에 응답을 보낸다. 이 응답에는 브라우저가 웹 컨테이너의 응답을 받은 후 다시 요청을 보낼 새로운 URL을 포함한다. 여기서 새로 부여받은 URL로 브라우저에서 완전히 새롭게 요청하기 때문에 이전 request에 저장되어 있는 객체는 소멸된다.

JSP에서

<%
    String cp=response.getContextPath();
    response.sendRedirect(cp+"/bbs/list.do");
%>

servlet에서

String cp=response.getContextPath();
response.sendRedirect(cp+"/bbs/list.do");

Forwarding

요청을 포워딩 할 때 해당 요청은 서버의 다른 자원(서블릿 또는 JSP)에 전달된다. 이때 클라이언트에 알리지 않는다. 이런 방식의 처리는 웹 컨테이너 내부에서 발생하고 클라이언트는 알 수 없다. 포워딩은 리다이렉션과 다르게 객체를 요청에 담고 해당 요청을 사용할 다음 자원에 전송한다.

JSP에서

<jsp:forward page="/WEB-INF/jsp/bbs/list.jsp"/>

servlet에서

RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/jsp/bbs/list.jsp");
rd.forward(request, response);

포워드 사용 시 루트 경로는 웹루트와 동일하다.