본문 바로가기
  • 실행력이 모든걸 결정한다
Spring 사전 준비/JSP Servlet

[JSP Servlet] FrontController - Command 패턴 / 포워딩

by 김코더 김주역 2020. 12. 14.
반응형

* Directory pattern : /name

* 확장자 pattern : /name.확장자

* 위 두 패턴은 처리하는 서블릿 파일이 다르다.

 

이미지 출처 - www.javatpoint.com/front-controller-pattern

 

1. FrontController 패턴

클라이언트의 요청들을 한곳에서 처리하여 효율성을 높이는 패턴.

컨트롤러의 앞에 두며 중복 코드를 제거하는데 좋음.

위에서 설명한 확장자 패턴을 이용하면 되는데, 서블릿 파일에서 @WebServlet 어노테이션에 "*.확장자" 를 적용하여 어떤 파일이든 해당 확장자 패턴으로 접속하면 이 서블릿 파일에서 처리를 하는 것이다.

@WebServlet("*.확장자")

 

 

2. Command 패턴

어떤 파일이든 확장자 서블릿에서 처리를 한다고 하면, 파일이 많아질 경우에는 소스코드가 상당히 길어질 것이다.

그래서 요청을 받은 이후 각 요청의 직접적인 처리에 대해서는 각각 클래스를 만들어 처리하도록 하는 패턴이다.

 

만약 모든 파일끼리 중복 코드가 많으면 많을 수록 FrontController 패턴, Command 패턴을 같이 이용했을 경우 효율이 극대화 될 것이다.

 

 

3. 포워딩(Forwarding)

정보통신계열에서 라우터끼리 패킷을 전송할 때도 포워딩이라는 용어를 사용하는데 이 Servlet 상에서는 요청을 위임하는 동작을 포워딩이라고 한다. 이처럼 JSP나 Servlet에서 요청을 받고 다른 컴포넌트로 요청을 위임하게 될 때RequestDispatcher, HttpServletResponse 클래스를 이용한다.

 

1) RequestDispatcher

requeset 객체를, 위임할 컴포넌트에 바로 전달할 수 있게 하는 클래스

RequestDispatcher dispatcher = request.getRequestDispatcher("[경로]");
dispatcher.forward(request,response);

forward 메소드에 의해서, 지정한 경로로 요청이 위임되며 url 변경 없이 해당 파일의 페이지로 이동까지 해준다.

 

 

2) HttpServletResponse

주로 Content Type, 응답코드, 응답 메시지 등의 정보를 담을 때 사용한다.

RequestDispatcher 클래스와의 차이점은 요청을 위임받은 컴포넌트에 직접 전달하지 않고 해당 요청이 담긴 새로운 요청객체를 생성한다는 점이다.

response.sendRedirect("[경로]");

sendRedirect 메소드 역시 페이지 이동 시 url 변경은 없다.

 

 

 

 

 

 

 

 

 

 

반응형

댓글