스프링MVC

스프링 MVC 시작하기

salmon16 2023. 8. 10. 22:11

@RequestMapping 


핸들러 RequestMappingHandlerMapping
어댑터 RequestMappingHandlerAdapter를 사용한다.

 

이전 버전을 스프링 MVC로 바꿔보자!

@Controller 애노테이션은 내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 된다.
@RequestMapping 요청 정보를 매핑하는데 해당 URL이 호출되면 메서드가 실행된다 이름은 임의로 지으면 된다.
ModelAndView 모델과 뷰 정보를 담아서 반환한다.

 

@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
    public ModelAndView save() {
        List<Member> members = memberRepository.findAll();
        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members", members);
        return mv;
    }

    @RequestMapping("/save")
    public ModelAndView members(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 mv = new ModelAndView("save-result");
        mv.addObject("member", member);
        return mv;
    }
}


클래스 단위로 requestMapping을 하면 공통된 부분을 처리할 수 있다.

메서드 단위의 RequestMapping들이 /springmvc/v2/members를 공통으로 가지므로 이를 클래스 단위로 빼서 공통된 부분을 처리해 주었다. 

@RequestMapping(/new-form) = /springmvc/v2/members/new-form
@RequestMapping() = /springmvc/v2/members
@RequestMapping(/save) = /springmvc/v2/members/save로 매핑이 된다.


위 컨트롤러 방식은 ModelAndView를 개발자가 직접 생성해서 반환하기 때문에 불편하다
그래서 아래와 같은 방식을 주로 사용한다.

@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @GetMapping("/new-form")
    public String newForm() {
        return "new-form";
    }

    @GetMapping
    public String save(Model model) {
        List<Member> members = memberRepository.findAll();

        model.addAttribute("members", members);
        return "members";
    }

    @PostMapping("/save")
    public String members(@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";
    }
}


@RequestParam을 사용
스프링은 HTTP 요청 파라미터를 @RequestParam을 사용해서 받을 수 있다.
@RequestParam("username")은 request.getParameter("username")와 거의 같은 코드라고 볼 수 있다.


Get쿼리 파라미터, POST Form 방식을 모두 지원한다.
save()와 members()를 보면 Model을 파라미터로 받는 것을 확인할 수 있다 스프링 MVC가 제공한다.


@RequestMapping을 HTTP Method가 GET인 경우에만 만족하는 패밍을 하려면 속성을 추가하면 된다.
@RequestMapping(value="/new-form", method=RequestMethod.GET)
POST도 같은 방식으로 하면 된다.
@RequestMapping(value="/new-form", method=RequestMethod.POST)

스프링 MVC는 이것을 @GetMapping, @PostMapping으로 더 편리하게 사용할 수 있게 지원한다.

 

출처 : 스프링MVC 1편 - 백엔드 웹 개발 핵심 기술 김영한

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

스프링 MVC 기본 기능  (0) 2023.08.21
로깅 간단하게 알아보기  (0) 2023.08.18
뷰 리졸버  (0) 2023.08.08
핸들러 매핑과 핸들러 어댑터  (0) 2023.08.08
스프링 MVC 구조 이해  (0) 2023.08.08