Spring MVC

v1

@Controller
public class SpringMemberFormController {

    @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 mv = new ModelAndView("save-result");
        mv.addObject("member", member);

        return mv;
    }
}

@Controller

  • Spring MVC에서 Annotation 기반의 컨트롤러로 인식
    • RequestMappingHandlerMapping이 매핑 정보로 인식함 (클래스 레벨에 붙어 있는 경우)
    • 내부에 isHandler 메소드에서 확인 가능
  • 내부에 @Component가 포함되어 있어서 자동으로 스프링 빈으로 등록됨

@RequestMapping

  • 요청 정보를 매핑
  • RequestMappingHandlerMapping이 매핑 정보로 인식함 (클래스 레벨에 붙어 있는 경우)
    • 내부에 isHandler 메소드에서 확인 가능
  • 해당 URL이 호출되면, Annotation 기반으로 동작 => 메소드 이름은 임의로 지으면 됨

ModelAndView

  • 모델과 뷰 정보를 담아서 반환

v3

@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberController {
    @RequestMapping(value = "/save", method = RequestMethod.POST)
        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

  • method = RequestMethod.POST
    • 해당 요청이 들어올 때, 요청 방식을 POST로 고정
    • 다른 HTTP 메소드로 들어올 수 없게 막고 하나의 요청 방식만 처리할 수 있게 만듬
    • 다른 메소드로 접근하면 405 에러 발생
  • @PostMapping과 같이 메소드 이름에 Mapping을 붙여서 구현 가능

@RequestParam

  • 파라미터로 전달된 값을 바로 받아와 변수에 담아줌
  • request.getParameter()와 거의 같은 코드

ModelAndView 사용 X => Model 파라미터 사용

  • Model을 파라미터로 받아서 사용 => 스프링이 제공하는 Model을 그대로 사용 가능
  • Model 객체에 @RequestParam으로 받아온 파라미터값을 addAttribute로 등록
  • View는 문자열 (String)으로 그대로 직접 반환해줌

인프런 - 김영한님의 Spring MVC 강의를 정리한 내용입니다.


김영한님 인프런 강의

댓글남기기