코드 그라데이션

핸들러 매핑과 핸들러 어댑터 본문

Spring/MVC 1

핸들러 매핑과 핸들러 어댑터

완벽한 장면 2023. 10. 2. 22:20

1. 과거

- 지금은 전혀 사용하지 않지만, 스프링이 주로 사용했던 스프링이 제공하는 간단한 컨트롤러로 핸들러 매핑과 어댑터를 이해해보기

 

Controller 인터페이스

과거 버전 스프링 컨트롤러

@Controller 하고는 완전히 별개의 것

 

스프링도 처음에는 이런 딱딱한 형식의 컨트롤러를 제공했음.

 

OldController

@Component("/springmvc/old-controller")
public class OldController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 
    	throws Exception {
        
        System.out.println("OldController.handleRequest");
        return null;
    }
}

부연

- @Component("/springmvc/old-controller") 어노테이션은 Spring 컨테이너에 이 클래스를 빈으로 등록하며,     

  "/springmvc/old-controller"라는 이름으로 빈을 식별함. 이렇게 등록된 빈은 Spring MVC에서 컨트롤러로 사용됨.

- OldController 클래스는 Controller 인터페이스를 구현하고, handleRequest 메서드를 재정의 함.

  이 메서드는 웹 요청을 처리하는 역할을 .

- handleRequest 메서드 내에서는 "OldController.handleRequest"라는 문자열을 콘솔에 출력하고, null을 반환함.

  즉, 이 컨트롤러는 요청을 처리하고 어떤 모델이나 뷰를 반환하지 않고 종료됨.

- 이러한 형태의 컨트롤러는 구 버전의 Spring MVC에서 사용되었으며,

  현재의 Spring MVC에서는 @Controller 어노테이션과 @RequestMapping 어노테이션을 사용하여 더 간결하고 현대적인

  방식으로 컨트롤러를 정의하는 것이 일반적.

=> 즉, OldController 클래스는 예전 버전의 Spring MVC에서 사용되던 방식을 보여주는 예시이다.

    현재 Spring Framework 및 Spring MVC에서는 주로 어노테이션을 사용하여 더 간편히 컨트롤러를 정의하고 구성한다.

 

 

실행
http://localhost:8080/springmvc/old-controller
콘솔에 OldController.handleRequest 이 출력되면 성공.

 

OldController실행해보면

성공적으로 나옴.

 

 

 

이 컨트롤러는 어떻게 호출될 수 있을까?

스프링 MVC 구조

이 컨트롤러가 호출되려면 다음 2가지가 필요하다.

 

 

 

스프링은 이미 필요한 핸들러 매핑과 핸들러 어댑터를 대부분 구현해두었다. 

개발자가 직접 핸들러 매핑과 핸들러 어댑터를 만드는 일은 거의 없다.

 


스프링 부트가 자동 등록하는 핸들러 매핑과 핸들러 어댑터
(실제로는 더 많지만, 중요한 부분 위주로 설명하기 위해 일부 생략)

 

HandlerMapping 

숫자는 순위를 의미(찾는 우선순위)

HandlerAdapter

 

핸들러 매핑도, 핸들러 어댑터도 모두 순서대로 찾고 만약 없으면 다음 순서로 넘어간다.

 

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

 

2. 핸들러 어댑터 조회

 

3. 핸들러 어댑터 실행

 

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

 

 


HttpRequestHandler

public interface HttpRequestHandler {
	void handleRequest(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException;
}

 

인터페이스 구현하면

MyHttpRequestHandler

@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");
    }
}

 

실행

 

실행해보면

아무것도 없는 빈 화면

콘솔에는

이것 역시 성공적으로 나옴.

 

 

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

 

2. 핸들러 어댑터 조회

 

3. 핸들러 어댑터 실행

 

 

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

 

@RequestMapping

 

 

728x90

'Spring > MVC 1' 카테고리의 다른 글

검증 헤더와 조건부 요청 1  (0) 2023.10.04
뷰 리졸버  (0) 2023.10.03
스프링 MVC 전체 구조  (0) 2023.10.02
유연한 컨트롤러2 - v5  (0) 2023.09.27
유연한 컨트롤러(1) - v5  (0) 2023.09.27
Comments