반응형
1. 스프링 MVC Controller 특징
- HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 기능 구현
- 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
- GET 방식, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
- 상속/인터페이스 방식 대신 어노테이션으로 간단하게 설정 가능
2. Postman(포스트맨)
- GET 방식은 주소창에 적어서 언제든지 사용 가능하지만 POST 방식은 죽어다 깨어놔도 Form을 이용해서 사용 가능하다. 그래서 사용하는 툴이 Postman이다.
https://www.postman.com/downloads
- GET 방식은 URL 뒤에 파라미터를 적어주거나 Params에 데이터를 추가해 주면 된다.
- POST 방식은 GET 방식과 다르게 데이터들을 요청 바디에다가 같이 실어서 요청을 보내게 된다.
- 그래서 Postman에서 Body에 x-www-form-urlencoded에 데이터들을 적어주면 된다.
- Preview를 보면 요청에 맞는 응답을 보여준다.
3. 스프링 MVC Controller 사용
- 요청을 보내게 되면 web.xml에서 FrontController인 DispatcherServlet가 servlet-context.xml을 참조하게 된다.
- 그때 servlet-context.xml에 밑에 처럼 controller로 스캔할 수 있는 설정을 해 놓아준다.
<context:component-scan base-package="com.koreait.controller" />
- servlet-context.xml에 설정만 해주게 되면 이 패키지 안에 어떤 클래스를 스프링이 스캔해서 사용할지 모른다.
- 그래서 클래스에 어노테이션으로 @Controller를 해줘야 한다.
- 이제 들어온 요청에 따라 어떤 컨트롤러를 찾아가야 하는지는 HandlerMapping이 찾는데, 이것을 @RequestMapping을 기준으로 찾게 된다.
- @RequestMapping(" /sample/* ")은 /sample/로 오는 모든 요청을 HandlerMapping이 이 컨트롤러로 보내주게 된다.
- @RequestMapping(" /sample/* ")은 /sample/로 오는 모든 요청을 이 컨트롤러로 오게 된다면 이제 이제 *(all) 것에 오는 것들도 분류를 해서 원하는 곳으로 가게 해줘야 한다.
- 그래서 각 메소드메서드 위에다가 @RequestMapping(), @GetMapping(), @PostMapping()으로 이 컨트롤러로 들어왔을 때 각 원하는 메소드로 분류해준다.
- @GetMapping("basic"), @PostMapping("basic")는 /sample/basic으로 요청이 들어왔을 때 각각 GET 방식, POST 방식으로 분류를 한 것이다.
- 하지만 GET방식, POST 방식 둘다 상관없이 하나의 수행을 하고 싶다면
@RequestMapping(value="요청", method = {RequestMethod.GET, RequestMethod.POST})로 해주면 요청명에 따라 GET, POST 방식 상관없이 이곳으로 오게 된다. - 그리고 void가 아닌 반환타입이 String이라면 기본적인 경로는 안 쓰고 문자만 반환을 해도 ViewResolver가 앞 뒤로 경로를 알아서 붙여서 응답 페이지를 보내준다.
- 하지만 void라면 우리가 설정한 경로에 요청명.jsp로 자동으로 응답 페이지를 보내주게 된다.
4. 스프링 MVC Controller 파라미터 수집 방법
- DTO 객체로 수집
- SampleDTO에는 name과 age를 변수로 갖는 DTO를 미리 만들어놓은 상태이다.
- 이때 요청으로 name과 age를 넣어도 자동적으로 DTO가 채워져서 넘어가지게 된다.
- 그리고 매개변수로 Model model를 선언해주고 model.addAttribute("키", 값); 을 해주면 JSP때 setAttribute 때와 같이 뷰 쪽으로 데이터를 보낼 수 있고 뷰 쪽에서도 역시 EL문을 이용해서 사용 가능하다. - 파라미터 명과 변수명이 다른 경우 수집방법
- Controller에서 받기 위한 매개변수명을 name과 age로 했지만 보내는 쪽에서 파라미터명을 data1, data2로 했을 때 값을 받는 상황이다.
- 이때는 매개변수 앞에다가 @RequestParam("파라미터명")을 붙여주게 되면 각 맞는 파라미터명을 가진 값이 각 매개변수의 값으로 들어가게 된다. - 파라미터가 같은 이름으로 여러 개 날아오는 경우(ex : checkbox) 수집 방법
- checkbox같이 여러 개의 파라미터명으로 들어오는 값들은 받는 매개변수에 배열, 리스트 등을 선언해주고 파라미터명을 @RequestParam("파라미터명")을 해주면 파라미터명을 가진 값들이 차례대로 배열, 리스트 안에 넣어지게 된다.
- JSP에서는 무조건 파라미터는 문자열로 날아왔기 때문에 캐스팅이 필요했지만 Spring에서는 알아서 자료형이 int로 넘어오기 때문에 좀 더 편리해졌다.
- 그리고 void이기 때문에 전체 @RequestMapping을 거쳐서 요청명.jsp로 응답하게 된다.
- 파라미터 수집 후 바로 Model로 보내기
- 수집한 파라미터 앞에 @ModelAttribute("파라미터명")을 써주면 바로 Model로 attribute로 넘어가게 된다.
반응형
'웹개발 > Spring' 카테고리의 다른 글
[Spring] 명명 규칙, Service, domain (0) | 2022.07.13 |
---|---|
[Spring] Exception 처리, 스프링 MVC 프로젝트의 기본 구성(3-tier) (0) | 2022.07.06 |
[Spring] 스프링 구동 순서/과정, MVC 구조, Front-Controller 패턴 (2) | 2022.07.03 |
[Spring] 스프링 프레임워크에서 MyBatis 사용 (0) | 2022.07.03 |
[Spring] 스프링 프레임워크에서 DB 연결 (0) | 2022.07.01 |