@Controller가 있는 게 확인되면 RequestMappingHandlerMapping에서 이건 핸들러 정보구나 하고 꺼낼 수 있다는 의미다.
@Component// 컴포넌트 스캔을 통해 스프링 빈으로 등록한다.@RequestMapping// RequestMappingHandlerMapping이 이걸 보고 찾아낸다.publicclassSpringMemberFormControllerV1 { @RequestMapping("/springmvc/v1/members/new-form")publicModelAndViewprocess() {returnnewModelAndView("new-form"); }}
RequestMappingHandlerMapping은 스프링 빈 중에서 @RequestMapping 또는 @Controller가 클래스 레벨에 붙어있으면 매핑 정보로 인식한다.
ModelAndView
모델과 뷰 정보를 담아 반환한다.
@Controller@RequestMapping("/springmvc/v1/members/new-form")publicclassSpringMemberFormControllerV1 {publicModelAndViewprocess() {// 이전에는 직접 만든 ModelView를 썼지만 이제는 스프링이 제공하는 ModelAndView를 쓴다.returnnewModelAndView("new-form"); }}
@Controller@RequestMapping("/springmvc/v1/members/save")publicclassSpringMemberSaveControllerV1 {privatefinalMemberRepository memberRepository =MemberRepository.getInstance();// paramMap 대신 서블릿 request, response를 받는다.publicModelAndViewprocess(HttpServletRequest request,HttpServletResponse response) {String username =request.getParameter("username");int age =Integer.parseInt(request.getParameter("age"));Member member =newMember(username, age);memberRepository.save(member);ModelAndView modelView =newModelAndView("save-result");modelView.addObject("member", member);return modelView; }}