♪ 학습 내용
스프링 MVC 시작
* 스프링 MVC 시작하기
전에는 Controller 인터페이스를 구현한 컨트롤러로 개발했지만
스프링이 제공하는 컨트롤러는 애노테이션을 기반으로 훨씬 더 편리하게 개발 가능하다.
@Controller
1. 스프링 빈으로 등록 ( 내부에 @Component가 포함되어 있다)
2. 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식
@RequestMapping
요청 정보를 매핑한다. 해당하는 URL이 호출되면 이 메서드 호출!
이 애노테이션이 있으면
RequestMappingHandlerMapping / RequestMappingHandlerAdapter 이 두 객체가 사용된다.
(우선순위 제일 높음)
현재 실무에서는 이 방식의 컨트롤러를 사용
RequestMappingHandlerMapping은 스프링 빈 중 @RequestMapping 이나 @Controller가 클래스 레벨에 붙어있는 경우
매핑 정보로 인식, 인식 한 뒤에는 @RequestMapping의 URL이 일치하면 해당 메서드 실행한다.
@Controller 애노테이션 하나로도 스프링 빈 등록되고, 매핑정보로 인식되므로 편리
mv.addObject("member",member);
//ModelAndView를 통해 Model 데이터 추가
근데 위에서는 @RequestMapping이 메서드 레벨에 붙어있는 것을 확인.
---> 컨트롤러 클래스 통합
* 컨트롤러 통합
@RequestMapping이 메서드 단위에 적용되어있는 것을 확인했기 때문에
하나의 컨트롤러에 각 메서드를 통합하는 방식으로 개선하였다.
추가적으로 중복을 줄이기 위해 클래스 레벨에도 @RequestMapping을 두었다는 것을 확인 !
이렇게 하면 @RequestMapping의 클래스 레벨 URL 과 메서드 레벨 URL을 조합해 매핑한다.
//이런식으로 조합됨
"/springmvc/v2/members/new-form"
"/springmvc/v2/members/members"
"/springmvc/v2/members/save"
확실히 중복이 줄었구나.
* 더 실용적으로 개선
public String newForm(){
return "new-form";
}
ModelAndView를 직접 생성하고 반환하는 것이 불편해 그냥 논리 이름만을 반환해 알아서 처리하도록 했다.
스프링MVC 는 이걸 가능하게 해준다.
model.addAttribute("member",member);
따라서 Model을 파라미터로 받아 넘겨야할 데이터를 담는 것도 확인할 수 있다.
@RequestParam
public String save( @RequestParam("age") int age, ...
기존에는 request를 넘겨 받아 getPrameter를 이용해 쿼리 파라미터 정보를 꺼냈지만,
@RequestParam 애노테이션으 이용하면 요청 쿼리 파라미터를 바로 받아볼 수 있다.
심지어 필요한 경우 자동 캐스팅 해준다는 것까지 확인 ..!
여기까지 개발하면서 HTTP 요청의 메서드를 구분하지 않았지만, 이제는 구분할 수 있도록 개선했다.
@RequestMapping(value = "/new-form", method = RequestMethod.GET)
이 경우 HTTP Method가 GET인 경우에만 매핑된다.
Post, Put, ....등 모두 사용 가능하다.
@GetMapping / @PostMapping
더 편리하게 사용!
마찬가지로 Post, Put, ....등 모두 사용 가능하다.
실제 실무에서도 위 방식보다는 이 애노테이션을 사용.
♪ 다음 학습 내용
스프링 MVC의 기본 기능
'Dev > Spring' 카테고리의 다른 글
[Spring MVC 1] 스프링 MVC-기능 (2) (0) | 2023.02.02 |
---|---|
[Spring MVC 1] 스프링 MVC-기능 (1) (0) | 2023.02.01 |
[Spring MVC 1] 스프링 MVC-구조 (1) (0) | 2023.01.30 |
[Spring MVC 1] MVC 프레임워크 만들기 (3) (0) | 2023.01.28 |
[Spring MVC 1] MVC 프레임워크 만들기 (2) (0) | 2023.01.27 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!