스프링
스프링 MVC의 사용
winwin-k9
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