스프링/3. 스프링 MVC

34. 스프링 MVC

sdafdq 2023. 8. 9. 23:58

@RequestMapping

이거 쓰면 

이거 관련 핸들러맵핑(맵핑은 컨트롤러의 종류의 정보를 담고있는 컨트롤러 종류 정보의 집합)이랑 이거관련 핸들러 어댑터 씀.

 

거의 실무에서는 저거 씀.

 

@Controller
public class SpringMemberFormControllerV1 {

    @RequestMapping("/springmvc/v1/members/new-form")
    public ModelAndView process(){
        System.out.println("SpringMemberFormControllerV1.process");
        return new ModelAndView("new-form");
    }
}

@Controller가 뭐냐면, 

@Component + @RequestMapping이다.

그러면 스프링빈에 등록되고, Mapping으로 조회가 된다.

++ 지금은 이렇게 이해하면 안될 듯 하다. 그냥 @RequestMapping 좀.. 따로 보는 게 편할 듯? 어.. 그러니까 Mapping에 등록만 되고 @RequestMapping에 필요한 기능이라던지 쓰려면 따로 @RequestMapping()해서 값 넣어줘야 함.

 

지금은 발전되면서 코드가 약간 바뀌었는데,

@Controller에 잘 찾아보면 isHandler라는게 있다.

지금은 hasAnnotation(Controller.class) 로 비교하는데,

옛날엔 or로 RequestMapping.class도 추가시켜놨다.

 

아마 handler는 @Controller로 쓰라고 통일시켜놓은건가?

 

그리고, 

@Component + @RequestMapping 이제 이것도 안된다.

그냥 3.0 오면서 수정된 듯 하다. 아예 제대로 컨트롤러 쓸거면 @Controller로 하라고.

 

 

메서드에 

@RequestMapping이 있어야 한다. 이래야 애노테이션으로 맵핑한다. 

 

 

@Controller
public class SpringMemberListControllerV1 {
    MemberRepository memberRepository = MemberRepository.getInstance();
    @RequestMapping("/springmvc/v1/members")
    public ModelAndView findAll(){
        List<Member> members = memberRepository.findAll();
        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members", members);
        return mv;
    }
}

그리고 이제, 애노테이션기반이기 때문에 함수명을 마음대로 할 수 있다.

ModelAndView에서 addObject가 mv.getModel().put()이랑 같다.

 

 

@Controller
public class SpringMemberSaveControllerV1 {
    MemberRepository memberRepository = MemberRepository.getInstance();
    @RequestMapping("springmvc/v1/members/save")
    public ModelAndView save( HttpServletRequest request ){
        ModelAndView mv = new ModelAndView("save-result");
        Member member = new Member(request.getParameter("username"), Integer.parseInt(request.getParameter("age")));

        Member savedMember = memberRepository.save(member);
        mv.getModel().put("member",savedMember);
        return mv;
    }
}

또, 만약 request나 response를 이용하고 싶다면 HttpServletRequest 와 HttpServletResponse를 인자로 받도록 하면 된다.

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

36. 실용적인 형식  (0) 2023.08.11
35. 통합  (0) 2023.08.10
33. 뷰 리졸버  (0) 2023.08.09
32. 핸들러매핑, 핸들러어댑터  (0) 2023.08.09
31. 스프링 MVC 구조  (0) 2023.08.09