요청 포워딩 처리

요청에 대한 응답을 누가할지 선택할 수 있다.
웹 애플리케이션에 있는 다른 컴포넌트에게 처리를 위임하거나 요청을 완전히 다른 URL로 방향을 바꿀 수 있다.

1. RequestDispatcher 클래스를 이용한 forward 방법

웹 브라우저를 통해 사용자가 서블릿에 최초 요청하면 HttpServletRequest 객체가 자동으로 생성된다.
이 request 객체를 사용해 응답을 처리하는 웹 컴포넌트(서블릿, JSP, HTML)로 재요청하는 방식이다.
최초/재요청 동일한 HttpServletRequest 객체를 사용하기 때문에 URL 변동이 없다.
따라서 웹 브라우저 입장에서는 누가 처리한 것인지 알 수 없다.
또한, 동일한 객체를 사용하기 때문에 최초 요청시 request scope에 attribute를 설정하면 재요청시 설정된 attribute 값을 가져올 수 있다.

1
2
RequestDispatcher dispatcher = request.getRequestDispatcher(target);
dispatcher.forward(request, response);
cs

2. HttpServletResponse 클래스를 이용한 redirect 방법

forward 방식과 동일하게 다른 웹 컴포넌트에게 재요청하는 방식이다.
차이점은 최초 요청에 대한 응답시 HttpServletResponse 객체의 상태코드 헤더에 301 값과 Location 헤더에 새로운 URL 값을 포함시킨다.
웹 브라우저는 응답받은 URL로 재요청하기 때문에 동일한 HttpServletRequest가 아닌 새로운 request 객체가 생성된다.
따라서 URL이 변경되고 attribute에 설정된 값을 가져올 수 없다.

1
response.sendRedirect(target);
cs


+ Recent posts