본문 바로가기
Spring

핸들러 매핑 , 핸들러 어뎁터 정리

by 리승우 2022. 12. 9.

[핵심내용]

@RequestMapping

가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 RequestMappingHandlerMapping , RequestMappingHandlerAdapter 이다.

 

@RequestMapping 의 앞글자를 따서 만든 이름인데, 이것이 바로 지금 스프링에서 주로 사용하는 애노테이션 기반의 컨트롤러를 지원하는 매핑과 어댑터이다. 실무에서는 99.9% 이 방식의 컨트롤러를 사용한다

 

[핸들러 매핑, 핸들러 어뎁터 종류]

HandlerMapping

 

HandlerAdapter

 

[핸들러 매핑, 핸들러 어뎁터 작동방식]

 

이해를 쉽게 하기 위해, Controller 인터페이스가 아닌 "HTTPRequestHandler" 핸들러(컨트롤러)를 사용하여 예시를 들고자 한다.

 

HttpRequestHandler

 

이를 이용해 간단하게 아래에 구현해보자

 

MyHttpRequestHandler

package hello.servlet.web.springmvc.old;

import org.springframework.stereotype.Component;
import org.springframework.web.HttpRequestHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component("/springmvc/request-handler")
public class MyHttpRequestHandler implements HttpRequestHandler {

     @Override
     public void handleRequest(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
       System.out.println("MyHttpRequestHandler.handleRequest");
 }
}

 

실행

> http://localhost:8080/springmvc/request-handler

> 웹 브라우저에 빈 화면이 나오고, 콘솔에 MyHttpRequestHandler.handleRequest 가 출력되면 성공이다.

 

1. 핸들러 매핑으로 핸들러 조회

1. HandlerMapping 을 순서대로 실행해서, 핸들러를 찾는다.

2. 이 경우 빈 이름으로 핸들러를 찾아야 하기 때문에 이름 그대로 빈 이름으로 핸들러를 찾아주는 BeanNameUrlHandlerMapping 가 실행에 성공하고 핸들러인 MyHttpRequestHandler 를 반환한다.

 

2. 핸들러 어댑터 조회

1. HandlerAdapter 의 supports() 를 순서대로 호출한다.

2. HttpRequestHandlerAdapter 가 HttpRequestHandler 인터페이스를 지원하므로 대상이 된다.

 

3. 핸들러 어댑터 실행

1. 디스패처 서블릿이 조회한 HttpRequestHandlerAdapter 를 실행하면서 핸들러 정보도 함께 넘겨준다.

2. HttpRequestHandlerAdapter 는 핸들러인 MyHttpRequestHandler 를 내부에서 실행하고, 그 결과를 반환한다.

 

정리 - MyHttpRequestHandler 핸들러매핑, 어댑터

MyHttpRequestHandler 를 실행하면서 사용된 객체는 다음과 같다.

> HandlerMapping = BeanNameUrlHandlerMapping

> HandlerAdapter = HttpRequestHandlerAdapter

 

[핵심내용 다시 복습!]

@RequestMapping

가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 RequestMappingHandlerMapping , RequestMappingHandlerAdapter 이다.

 

@RequestMapping 의 앞글자를 따서 만든 이름인데, 이것이 바로 지금 스프링에서 주로 사용하는 애노테이션 기반의 컨트롤러를 지원하는 매핑과 어댑터이다. 실무에서는 99.9% 이 방식의 컨트롤러를 사용한다

댓글