Spring/인프런_개념
[Spring]스프링 MVC 1편 - 구조 이해2
빙응이
2024. 1. 12. 17:03
📝@RequestMapping
스프링은 애노테이션을 활용한 매우 유연하고, 실용적인 컨트롤러를 만들었다. 이것이 바로 @RequestMapping이다.
@RequestMapping
- RequestMappingHandlerMapping - 핸들러 매핑
- RequestMappingHandlerAdapter - 핸들러 어댑터
@Controller
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process(){
return new ModelAndView("new-form");
}
}
- @Controller
- 스프링이 자동으로 스프링 빈으로 등록한다.
- 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다. -> 핸들러 매핑, 어댑터가 핸들러 정보로 취급
- @RequestMapping: 요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다.
참고!
스프링 MVC의 RequestMappingHandlerMapping은 스프링 빈 중에서 @RequestMapping 또는 @Controller가
붙어 있는 경우에 매핑 정보로 인식한다.
실습 코드
@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/new-form")
public ModelAndView newForm() {
return new ModelAndView("new-form");
}
@RequestMapping("/save")
public ModelAndView save(HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
ModelAndView mav = new ModelAndView("save-result");
mav.addObject("member", member);
return mav;
}
@RequestMapping
public ModelAndView members() {
List<Member> members = memberRepository.findAll();
ModelAndView mav = new ModelAndView("members");
mav.addObject("members", members);
return mav;
}
}
📝스프링 MVC 실용적인 방식
MVC도 v4 방식처럼 실용적인 개선이 가능하다.
해당 방식은 실무에서 사용
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/new-form")
public String newForm() {
return "new-form";
}
@RequestMapping("/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";
}
@RequestMapping
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members",members);
return "members";
}
}
- V4때처럼 이름만 리턴해도 매핑을 해준다.
- @RequestParam()은 파라미터 값을 가져오게 해준다.
- Model은 View에 전달할 request.addAttribute()와 같은 의미로 View에서 사용할 데이터를 저장한다.
HTTP 메소드 별로 제한하기
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("/new-form")
public String newForm() {
return "new-form";
}
@PostMapping("/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";
}
@GetMapping
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members",members);
return "members";
}
}
- 애노테이션으로 차이를 둬서 HTTP별 메소드 응답을 가져올 수 있다.