스프링 MVC의 구조 이해(2) - 실무에서 사용하는 방식 @RequestMapping, 스프링 MVC 컨트롤러

2022. 6. 15. 11:31·Back-End/Spring MVC

@RequestMapping

  • 어노테이션 기반의 컨트롤러를 지원하는 핸들러 매핑과 어탭터
    →
    핸들러 매핑 / 핸들러 어댑터를 통해 실제 핸들러가 호출
  • 실무에서는 99.9% 이 방식의 컨트롤러를 사용
  • RequestMapping의 인터페이스
    • RequestMappingHandlerMapping : RequestMapping의 핸들러 매핑
    • RequestMappingHandlerAdapter : RequestMapping의 핸들러 어댑터

동작 방식

  1. HTTP Request를 통해 요청
  2. 핸들러 매핑 탐색 : HandlerMapping을 순회하며 해당하는 RequestMappingHandlerMapping 반환
  3. 핸들러 어댑터 조회 : HandlerAdapter.supports()를 순서대로 호출하며 처리할 수 있는 핸들러 어댑터를 탐색 → 예시에서는 RequestMappingHandlerAdapter를 찾음
  4. 핸들러 어댑터 실행 : RequestMappingHandlerAdapter로 실제 핸들러 호출 → ModelAndView를 반환(실무에서는 ViewName 반환)
  5. 뷰 리졸버 실행 : 논리주소를 실제 물리 주소로 변환
  6. view : view 렌더링

스프링 MVC의 시작

컨트롤러

@Controller
@RequestMapping("/springmvc/v3/members")  //공통path를 지정해줌
public class SpringMemberControllerV3 {

    private final MemberRepository memberRepository = MemberRepository.getInstance();

    @GetMapping("/new-form")  //공통 path + "/new-form" 및 Get요청만 Mapping
                              //@RequestMapping(value = "/new-form", method = RequestMethod.GET)
    public String newForm() {
        return "new-form";
    }  //문자를 반환해도 스프링 내부에서 뷰 이름으로 인식해서 찾아준다.

    @PostMapping("/save")    //Post요청 Mapping
    //@RequestParam을 이용해서 요청 파라미터를 바로 받는다.
    public String save(@RequestParam("username") String username, @RequestParam("age") int age, Model model ) {

        Member member = new Member(username, age);
        memberRepository.save(member);

        model.addAttribute("member", member);
        return "save-result";
    }

    @GetMapping
    public String members(Model model) {
        List<Member> members = memberRepository.findALl();

        model.addAttribute("members", members);
        return "members";
    }
}
  • 클래스에 @RequestMapping을 이용해서 공통path를 지정 할 수 있다.
  • @RequestParam을 이용해서 요청 파라미터를 바로 받을수 있다.
  • ModelAndView를 반환하지 않고 viewName을 반환하므로 편리하다.
  • @RequestMapping → @GetMapping, @PostMapping
반응형
'Back-End/Spring MVC' 카테고리의 다른 글
  • Spring MVC - 로깅, 로그 사용
  • 스프링 MVC의 구조 이해(1) - DispatcherServlet, 핸들러 매핑과 핸들러 어댑터, 뷰 리졸버
  • 자바 백엔드 웹 기술의 진화과정(3) - 웹 프론트 컨트롤러 v4, v5
  • 자바 백엔드 웹 기술의 진화과정(2) - 웹 프론트 컨트롤러 v1, v2, v3
LightSource
LightSource
어제보단 발전한 오늘의 나를 위한 블로그
    반응형
  • LightSource
    LightSourceCoder
    LightSource
  • 전체
    오늘
    어제
    • 분류 전체보기 (152)
      • Git (4)
      • Language (6)
        • Java (6)
      • Back-End (63)
        • Spring Boot (4)
        • MyBatis (1)
        • Oracle (1)
        • PL SQL (3)
        • JPA (26)
        • Spring Data JPA (5)
        • Spring MVC (8)
        • Spring (12)
        • Spring Security (2)
        • Redis (1)
      • Front-End (38)
        • 아이오닉 (2)
        • JSP (7)
        • JavaScript (4)
        • React (16)
        • TypeScript (3)
        • Angular (6)
      • AWS (1)
      • CI & CD (1)
      • 개발지식 (13)
        • 네트워크 (9)
        • CS 지식 (4)
      • 데이터모델링 (2)
      • Tool (1)
      • 프로젝트 (5)
      • 독후감 (2)
      • 잡생각 (0)
      • 면접 준비 (1)
      • 알고리즘 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react
    배열요소삭제
    배요소열추가
    배열요소수정
    리액트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
LightSource
스프링 MVC의 구조 이해(2) - 실무에서 사용하는 방식 @RequestMapping, 스프링 MVC 컨트롤러
상단으로

티스토리툴바