🎨
스프링 MVC
  • Initial page
  • 웹 애플리케이션 이해
    • 웹 서버, 웹 애플리케이션 서버
    • 서블릿
    • 동시 요청 - 멀티 쓰레드
    • HTML, HTTP API, CSR, SSR
    • 자바 백엔드 웹 기술 역사
  • 2. 서블릿
    • 프로젝트 생성
    • Hello 서블릿
    • HttpServletRequest - 개요
    • HttpServletRequest - 기본 사용법
    • HTTP 요청 데이터 - 개요
    • HTTP 요청 데이터 - GET 쿼리 파라미터
    • HTTP 요청 데이터 - POST HTML Form
    • HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트
    • HTTP 요청 데이터 - API 메시지 바디 - JSON
    • HttpServletResponse - 기본 사용법
    • HTTP 응답 데이터 - 단순 텍스트, HTML
    • HTTP 응답 데이터 - API JSON
    • Summary
  • 3. 서블릿, JSP, MVC 패턴
    • 회원관리 웹 애플리케이션 요구사항
    • 서블릿으로 회원 관리 웹 애플리케이션 만들기
    • NoClassDefFoundError(WebServlet) TroubleShooting
    • NumberFormatException TroubleShooting
    • HTML에서 한글이 보이지 않는 이슈 TroubleShooting
    • JSP로 회원 관리 웹 애플리케이션 만들기
    • MVC 패턴 - 개요
    • MVC 패턴 - 적용
    • MVC 패턴 - 한계
    • Summary
  • 4. MVC 프레임워크 만들기
    • 프론트 컨트롤러 패턴 소개
    • 프론트 컨트롤러 도입 - v1
    • View 분리 - v2
    • Model 분리 - v3
    • 단순하고 실용적인 컨트롤러 - v4
    • ⭐️유연한 컨트롤러1 - v5(어댑터 도입, 인터페이스3 처리)
    • ⭐️유연한 컨트롤러2 - v5(어댑터 도입, 인터페이스3,4 처리)
    • Summary
  • 5. 스프링 MVC - 구조 이해
    • ⭐️스프링 MVC 전체 구조
    • 핸들러 매핑과 핸들러 어댑터
    • 뷰 리졸버
    • 스프링 MVC - 시작하기
    • @Controller 등장!⭐️
    • 스프링 MVC - 컨트롤러 통합
    • 스프링 MVC - 실용적인 방식
    • Summary
  • 6. 스프링 MVC - 기본 기능
    • 프로젝트 생성
    • 로딩 간단히 알아보기
    • 요청 매핑
    • 요청 매핑 - API 예시
    • HTTP 요청 - 기본, 헤더 조회
    • HTTP 요청 파라미터 - 쿼리 파라미터, HTML, Form
    • HTTP 요청 파라미터 - @RequestParam
    • HTTP 요청 파라미터 - @ModelAttribute
    • HTTP 요청 메시지 - 단순 텍스트
    • HTTP 요청 메시지 - JSON
    • 응답 - 정적 리소스, 뷰 템플릿
    • HTTP 응답 - HTTP API, 메시지 바디에 직접 입력
    • HTTP 메시지 컨버터
    • 요청 매핑 핸들러 어댑터 구조
    • Summary
  • 7. 스프링 MVC - 웹 페이지 만들기
    • 프로젝트 생성
    • 요구사항 분석
    • 상품 도메인 개발
    • 상품 서비스 HTML
    • 상품 목록 - 타임리프
    • 상품 상세
    • 상품 등록 폼
    • 상품 등록 처리 - @ModelAttribute
    • 상품 수정
    • PRG Post/Redirect/Get
    • RedirectAttributes
    • Summary
  • What's Next?
Powered by GitBook
On this page

Was this helpful?

  1. 5. 스프링 MVC - 구조 이해

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

  1. 핸들러 맵핑으로 핸들러(컨트롤러) 조회 핸들러 매핑에서 이 컨트롤러를 찾을 수 있어야 한다. 어떤 요청(url)이 들어왔을 때 이를 처리할 수 있는 컨트롤러를 찾아야한다. 그렇기 때문에 해당 url 요청이 들어왔을 때 실행할 메서드를 구현하고, 그 상위 클래스에 @Controller 애노테이션을 붙여준다.

  2. 핸들러 어댑터 조회 핸들러 매핑을 통해서 찾은 핸들러를 실행할 수 있는 핸들러 어댑터가 필요하다.

  3. 핸들러 어댑터 실행

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");
    }
}
  1. 핸들러 맵핑으로 핸들러 조회 HandlerMapping 0 = RequestMappingHandlerMapping : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용 1 = BeanNameUrlHandlerMapping : 스프링 빈의 이름으로 핸들러를 찾는다. MyHttpRequestHandler 를 반환한다.

  2. 핸들러 어댑터 조회 HandlerAdapter 0 = RequestMappingHandlerAdapter : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용 1 = HttpRequestHandlerAdapter : HttpRequestHandler 처리 HttpRequestHandler를 상속받아 구현했기 때문에 해당된다! 2 = SimpleControllerHandlerAdapter : Controller 인터페이스(애노테이션X, 과거에 사용) 처리

  3. 핸들러 어댑터 실행 디스패처 서블릿이 조회한 HttpRequestHandlerAdapter 를 실행하면서 핸들러 정보도 함께 넘겨준다. supports-handle 구조를 확인하자! handle함수 내에 handleRequest를 실행한다! => MyHttpRequestHandler 상속받으면서 오버라이딩한 handleRequest가 실행된다!

public class HttpRequestHandlerAdapter implements HandlerAdapter {

	@Override
	public boolean supports(Object handler) {
		return (handler instanceof HttpRequestHandler);
	}

	@Override
	@Nullable
	public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {

		((HttpRequestHandler) handler).handleRequest(request, response);
		return null;
	}

@RequestMapping

조금 뒤에서 설명하겠지만, 가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 RequestMappingHandlerMapping , RequestMappingHandlerAdapter 이다. @RequestMapping 의 앞글자를 따서 만든 이름인데, 이것이 바로 지금 스프링에서 주로 사용하는 애노테이션 기반의 컨트롤러를 지원하는 매핑과 어댑터이다. 실무에서는 99.9% 이 방식의 컨트롤러를 사용한다.

Previous⭐️스프링 MVC 전체 구조Next뷰 리졸버

Last updated 3 years ago

Was this helpful?