스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작해서, 매우 유연하고 실용적이다.
스프링이 제공하는, 애노테이션을 활용한 매우 유연하고 실용적인 컨트롤러가 바로 @RequestMapping을 사용하는 컨트롤러
[스프링MVC 28] 스프링 MVC 구조: 핸들러 매핑과 핸들러 어댑터 (tistory.com)
- @RequestMapping
- RequestMappingHandlerMapping
- RequestMappingHandlerAdapter
[스프링MVC 25] MVC 프레임워크 만들기: 단순하고 실용적인 컨트롤러 (tistory.com)
[스프링MVC 24] MVC 프레임워크 만들기: Model 추가 (*중요*) (tistory.com)
컨트롤러를 @RequestMapping 기반의 스프링 MVC 컨트롤러로 변경해보자.
- 회원 등록 폼
@Controller
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process(){
return new ModelAndView("new-form");
}
}
- @RequestMapping
- 요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.
- ModelAndView
- 모델과 뷰 정보를 담아서 반환
- @Controller
- 스프링이 자동으로 스프링 빈으로 등록
- 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다.
[Spring 입문4] -스프링 빈과 의존관계: 컴포넌트 스캔과 자동 의존관계 설정 (tistory.com)
RequestMappingHandlerMapping은 스프링 빈 중에서 @RequestMapping 또는 @Controller 가 클래스 레벨에 붙어 있는 경우에 매핑 정보로 인식한다. 따라서 다음 코드도 동일하게 동작한다.
@Component //컴포넌트 스캔을 통해 스프링 빈으로 등록
@RequestMapping
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process(){
return new ModelAndView("new-form");
}
}
컴포넌트 스캔 없이 다음과 같이 스프링 빈으로 직접 등록해도 동작한다.
@RequestMapping
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process(){
return new ModelAndView("new-form");
}
}
@SpringBootApplication
public class ServletApplication {
public static void main(String[] args) {
SpringApplication.run(ServletApplication.class, args);
}
//스프링 빈 직접 등록
@Bean
SpringMemberFormControllerV1 springMemberFormControllerV1() {
return new SpringMemberFormControllerV1();
}
}
/** 회원 저장*/
@Controller
public class SpringMemberSaveControllerV1 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/springmvc/v1/members/save")
public ModelAndView process(HttpServletRequest req, HttpServletResponse resp){
String username = req.getParameter("username");
int age = Integer.parseInt(req.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
ModelAndView mv = new ModelAndView("save-result");
mv.addObject("member", member); //Model 데이터 추가
return mv;
}
}
- mv.addObject("member", member)
- 스프링이 제공하는 ModelAndView를 통해 Model 데이터를 추가할 때는 addObject()를 사용하면 된다. 이 데이터는 이후 뷰를 렌더링 할 때 사용된다.
/** 회원 목록*/
@Controller
public class SpringMemberListControllerV1 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/springmvc/v1/members")
public ModelAndView process() {
List<Member> members = memberRepository.findAll();
ModelAndView mv = new ModelAndView("members");
mv.addObject("members", members);
return mv;
}
}
[스프링MVC 22] MVC 프레임워크 만들기: 프론트 컨트롤러 (FrontController) (tistory.com)
[스프링MVC 31] 스프링 MVC 컨트롤러 통합 (tistory.com)
728x90
반응형
'Spring Tutorial' 카테고리의 다른 글
[스프링MVC 32] 스프링 MVC: 실용적인 방식 (실무에서 쓰는 방식) (0) | 2023.08.10 |
---|---|
[스프링MVC 31] 스프링 MVC: 컨트롤러 통합 (0) | 2023.08.08 |
[스프링MVC 29] 스프링 MVC 구조: 뷰 리졸버 (0) | 2023.08.06 |
[스프링MVC 28] 스프링 MVC 구조: 핸들러 매핑과 핸들러 어댑터 (0) | 2023.08.05 |
[스프링MVC 27] 스프링 MVC 구조 (0) | 2023.08.03 |