ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 MVC의 사용
    스프링 2022. 12. 26. 19:04

    @RequestMapping 스프링은 애노테이션을 활용한 매우 유연하고, 실용적인 컨트롤러를 만들었는데 이것이 바로 @RequestMapping 애노테이션을 사용하는 컨트롤러이다.

     

    • @RequestMapping
      • RequestMappingHandlerMapping
      • RequestMappingHandlerAdapter
      • 가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 RequestMappingHandlerMapping , RequestMappingHandlerAdapter 이다.
      • @RequestMapping 의 앞글자를 따서 만든 이름인데, 이것이 바로 지금 스프링에서 주로 사용하는 애노테이션 기반의 컨트롤러를 지원하는 핸들러 매핑과 어댑터이다.
        즉, @RequestMapping이 있으면, RequestMappingHandlerMapping과 RequestMappingHandlerAdapter이 사용되는 것이다.

     

    @RequestMapping("/springmvc/v1/members/save")
    public ModelAndView process(HttpServletRequest request, HttpServletResponse response) {
      String username = request.getParameter("username");
      int age = Integer.parseInt(request.getParameter("age"));
      Member member = new Member(username, age);
      System.out.println("member = " + member);
      memberRepository.save(member);
      ModelAndView mv = new ModelAndView("save-result");
      mv.addObject("member", member);
      return mv;
    }

    @Controller

    • 스프링이 자동으로 스프링 빈으로 등록한다.
      • (내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 됨, 그런데 controller안에 Component가 있다.)
    • 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다.
      • RequestMappingHandlerMapping에서 핸들러 정보로 꺼낼수 있는 대상이 되는것이다.

    @RequestMapping 

    요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.

     

    ModelAndView 

    모델과 뷰 정보를 담아서 반환하면 된다.

     

     

    mv.addObject("member", member)

    스프링이 제공하는 ModelAndView 를 통해 Model 데이터를 추가할 때는 addObject() 를 사용하면 된다. 이 데이터는 이후 뷰를 렌더링 할 때 사용된다.

     

    정리 하자면 @Controller가 되어 있으면 RequestMappingHandlerMapping이 자신이 처리할 수 있기 때문에 핸들러를 꺼내주고, 해당 어댑터를 호출하여 실행을 하는 것이다.

     

    개선

    ModelAndView를 계속 생성을 해야 하는 번거로움이 있다.

    따라서 ModelAndView를 return하지 말고, String자체만을 return시키도록 한다.

     

    @RequestMapping("/springmvc/v1/members/save") 
    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";
     }

    문자를 반환해도 이를 view이름으로 인지하고 실행이 된다.

    또한 파라미터를 직접 받을 수 있다.

    728x90

    '스프링' 카테고리의 다른 글

    도메인 설계  (0) 2023.01.06
    ModelAttribute  (0) 2023.01.01
    핸들러 매핑, 핸들러 어댑터, 뷰 리졸버  (0) 2022.12.26
    스프링 MVC  (0) 2022.12.26
    MVC 만들어보기  (0) 2022.12.25

    댓글

Designed by Tistory.