스프링 MVC - 시작하기

이성준·2022년 3월 1일
0

스프링 MVC

목록 보기
6/10

스프링 MVC 구조


1. 핸들러 매핑으로 핸들러 조회
2. 핸들러 어댑터 조회
3. 핸들러 어댑터 실행
뷰 리졸버
1. 핸들러 어댑터를 통해 논리뷰 이름을 획득
2. ViewResolver를 호출
3. InternalResourceViewResolver 반환
4. InternalResourceView는 foward()를 호출해서 처리 할수 있을때만 사용
5. view.render() 호출

@RequestMapping

SpringMemberFormControllerV1 - 회원 등록 폼

@Controller
public class SpringMemberFormControllerV1 {
    @RequestMapping("/springmvc/v1/members/new-form")
    public ModelAndView process(){
        return new ModelAndView("new-form");
    }
}

해당 url로 이 메서드가 호출, 모델과 뷰 정보를 담아서 반환

SpringMemberSaveControllerV1 - 회원 저장

@Controller
public class SpringMemberSaveControllerV1 {
    private MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("/springmvc/v1/members/save")
    public ModelAndView process(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.getModel().put("member",member);
        mv.addObject("member",member);
        return mv;
    }
}

repository에 member 저장, 그후 모델에 mv.addObject로 member객체 넘긴다

SpringMemberListControllerV1 - 회원 목록

@Controller
public class SpringMemberListControllerV1 {
    private MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("/springmvc/v1/members")
    public ModelAndView process(HttpServletRequest request, HttpServletResponse response) {
        List<Member> members = memberRepository.findAll();
        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members",members);
        return mv;
    }
}

세개로 나눴지만 사실 requestmapping은 메서드 단위로도 적용할수 있기 때문에 통합이 가능하다

SpringMemberControllerV2

@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {
    @RequestMapping("/new-form")
    public ModelAndView newForm(){
        return new ModelAndView("new-form");
    }
    private MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping
    public ModelAndView members(HttpServletRequest request, HttpServletResponse response) {
        List<Member> members = memberRepository.findAll();
        ModelAndView mv = new ModelAndView("members");
        mv.getModel().put("members", members);
        return mv;
    }

    @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.getModel().put("member",member);
        mv.addObject("member",member);
        return mv;
    }
}

클래스 레벨에 @RequestMapping을 두면 메서드 레벨과 url이 조합된다.

SpringMemberControllerV3

@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
    @GetMapping("/new-form")
   public String newForm(){
        return "new-form";

    }
    private MemberRepository memberRepository = MemberRepository.getInstance();
    @GetMapping
    public String members(Model model) {
        List<Member> members = memberRepository.findAll();
        model.addAttribute("members",members);
        return "members";
    }

    @PostMapping("/save")
    public String save(@RequestParam("username") String username,
                       @RequestParam("age") int age,
                       Model model) {
//        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.getModel().put("member",member);
//        mv.addObject("member",member);
        model.addAttribute("member", member);
        return "save-result";
    }
}

@RequestParam 요청 파라미터를 쉽게 받을수 있다.
modelandview를 생성할 필요없이 .addAttribute로 넣고 반환은 view의 논리이름을 해주면 된다.

0개의 댓글