상세 컨텐츠

본문 제목

Servlet forward와 include의 차이점

Spring Framework

by Wanderer Kim 2025. 5. 1. 22:10

본문

반응형

Spring MVC를 공부하닥 Servlet의 forward(), include() 메소드를 사용하게 되었다.

도 메서드의 동작 방식이 궁금해서 공부 후 궁부한 내용을 정리해 보았다.

우선 두 메서드는 RequestDispatcher 인터페이스의 일부로 servlet 애플리케이션에서 요청 흐름을 재지어하거나 여러 리소스의 결과를 통합하는 데 중요한 역할을 한다.

 

Forward 메서드

동작 원리

forward() 메서드는 클라이언트의 요청으로 생성된 request와 response 객체를 다른 자원에 전달하고, 수행 제어를 완전히 넘겨서 다른 자원의 수행 결과를 클라이언트로 응답하도록 한다. 이 과정에서 원래 페이지의 출력은 무시되고, 포워딩된 대상 페이지의 출력만이 클라이언트에게 전달된다.

사용 방법

forward() 메서드를 사용하기 위해서는 먼저 RequestDispatcher 객체를 획득해야 한다. 아래는 기본적인 사용 예시 코드이다.

RequestDispatcher dispatcher = request.getRequestDispatcher("target.jsp");
dispatcher.forward(request, response);

위 코드는 현재 요청을 처리를 "target.jsp"로 전달하고, 해당 JSP가 최종 응답을 생성한다.

특징

  1. 서버 측에서 실행되므로 클라이언트는 페이지 전환을 인식하지 못한다.
  2. URL이 변경되지 않으며, 브라우저의 주소창에는 원래 요청한 URL이 표시된다.
  3. sendRedirect() 방식보다 효율적이고 빠르다.
  4. MVC 패턴에서 컨트롤러가 모델을 처리한 후 view로 요청을 전달할 때 유용하다.
  5. /WEB-INF 폴더 내의 JSP 파일과 같이 직접 접근할 수 없는 리소스에 접근할 수 있게 한다.

Include 메서드

동작 원리

include() 메서드는 처리 흐름 제어를 특정 대상에게 넘기고, 대상이 처리한 결과를 현재 페이지에 포함시키는 기능을 제공한다. forward() 메서드와 달리 include() 메서드는 제어를 넘긴 대상 페이지의 처리가 완료되면 처리 결과와 함께 원래 페이지로 제어가 돌아오고, 이후 나머지 처리를 계속하게 된다.

사용 방법

include() 메서드도 RequestDispatcher 객체를 통해 사용됩니다.

RequestDispatcher dispatcher = request.getRequestDispatcher("include.jsp");
dispatcher.include(request, response);

위 예제 코드는 "include.jsp"의 처리 결과를 현재 페이지에 포함시킵니다.

특징

  1. 페이지 이동 없이 다른 자원의 결과를 현재 페이지에 포함시킬 수 있다.
  2. 여러 모둘화된 컴포넌트의 출력을 하나의 응답으로 통함할 수 있다.
  3. header, footer, menu와 같은 공통 요소를 여러 페이지에 포함시킬 때 유용하다.
  4. 최정적으로 응답을 생성하는 것은 최초 요청이 시작된 페이지이다.

Forward와 Include 비교

  • 결과 출력: forward()는 포워딩된 대상 페이지가 최종 결과를 출력하는 반면, include()는 최초 흐름이 시작된 페이지가 최종 결과를 출력합니다.
  • 페이지 이동: forward()는 페이지 이동을 통해 결과값을 보여주지만, include(0는 페이지 이동 없이 결과값을 요청한 페이지 내에서 보여줍니다.
  • 제어 흐름: forward()는 제어를 완전히 대상 페이지로 넘기는 반면, include()는 대상 페이지 처리 후 원래 페이지로 제어가 돌아옵니다.
  • 사용 목적: forward()는 주로 페이지 전환이나 MVC 패턴에서 view 전환에 사용되며, include()는 페이지 내 컴포넌트 통합에 주로 사용됩니다.
728x90

관련글 더보기

댓글 영역