Controller의 특징
- HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 필요한 기능 구현
- 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
- GET 방식, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
- 상속/인터페이스 방식 대신에 어노테이션만으로도 필요한 설정 가능
@RequestMapping의 변화
- 몇 가지의 속성 추가 가능
- method 속성을 가장 많이 사용(GET/POST 방식을 구분해서 사용할 때 이용)
- 스프링 4.3버전부터 @RequestMapping을 줄여서 @GetMapping, @PostMapping으로 사용
@RequestMapping(value = "/basic", method= {RequestMethod.GET, REquestMethod.POST})
public void basicGet() {
log.info("basic get");
}
// 축약형
@GetMapping("/basicOnlyGet")
public void basicOnlyGet() {
log.info("basic get only")
}
- @RequestMapping은 GET, POST 방식 모두를 지원해야 하는 경우에 배열로 처리해서 지정
- @GetMapping의 경우 오직 GET 방식만 사용할 수 있으므로, 간편하나 기능에 대한 제한이 많은 편
데이터 전달자 Model
- Model 객체는 JSP에 컨트롤러에서 생성된 데이터를 담아서 전달하는 역할을 하는 존재
- 모델2 방식에서 사용하는 request.setAttribute()와 유사한 역할을 함
// Servlet에서 모델2 방시으로 데이터를 전달하는 방식
request.setAttribute("serverTime", new java.util.Date());
RequestDispatcher = request.getRequestDispathver("url");
dispathcer.forward(request, response);
// 스프링 MVC에서 Model을 이용한 데이터 전달
public String home(Model model) {
model.addAttribute("serverTime", new java.util.Date());
return "home";
}
- 메서드의 파라미터를 Model 타입으로 선언하게 되면 자동으로 스프링 MVC에서 Model 타입의 객체를 만들어 주기 때문에 개발자의 입장에서 필요한 데이터를 담아 주는 작업만으로 모든 작업이 완료
- Model을 사용해야 하는 경우는 주로 Controller에 전달 된 데이터를 이용해서 추가적인 데이터를 가져와야 하는 상황
- ex) 리스트 페이지 번호를 파라미터로 전달받고, 실제 데이터를 View로 전달해야 하는 경우
- ex) 파라미터들에 대한 처리 후 결과를 전달해야 하는 경우
@ModelAttribute 어노테이션
- 강제로 전달받은 파라미터를 Model에 담아서 전달하도록 할 때 필요한 어노테이션
- 타입에 관계없이 무조건 Model에 담아서 전달되므로, 파라미터로 전달된 데이터를 다시 화면에서 사용해야 할 경우 유용하게 사용
public String noModelAttribute(sampleDTO dto, int page) {
log.info("dto : " + dto);
log.info("page : " + page);
return "home";
}
public String useModelAttribute(sampleDTO dto, @ModelAttribute("page") int page) {
log.info("dto : " + dto);
log.info("page : " + page);
return "home";
}
RedirectAttibutes
- model 타입과 더블어서 스프링 MVC가 자동으로 전달해 주는 타입
- 조금 특별하게 일회성으로 데이터를 전달하는 용도로 사용
- 기존 servlet에서는 response.sendRedirect()를 사용할 때와 동일한 용도로 사용
// servlet에서 redirect 방식
response.sendRedirect("/home?name=temp");
// 스프링 MVC를 이용하는 redirect 처리
rttr.addFlashAttribute("name", "temp");
return "redirect:/";
Controller의 리턴 타입
- 어노테이션을 사용하는 방식으로 변한 이후에 가장 큰 변화 중 하나 리턴 타입이 자유로워 짐
- String : jsp를 이용하는 경우에는 jsp 파일의 경로와 파일이름을 나타내기 위해서 사용
- void : 호출하는 URL과 동일한 이름의 jsp를 의미
- VO, DTO : 주로 JSON 타입의 데이터를 만들어서 변환하는 용도로 사용
- ResponseEntity : response 할 때 http 헤더 정보와 내용을 가공하는 용도로 사용
- Model, ModelAndView : Model로 데이터를 변환하거나 화면까지 같이 지정하는 경우에 사용
- HttpHeaders : 응답에 내용 없이 Http 헤더 메서지만 전달하는 용도로 사용
'프로그래밍 > 프로젝트 정리' 카테고리의 다른 글
[오라클 클라우드]DB 생성 및 프로젝트 연동 (0) | 2022.01.26 |
---|---|
[오라클 클라우드]프로젝트 호스팅 서버 만들기 (0) | 2022.01.24 |
스프링 MVC의 기본 구조 (0) | 2022.01.19 |
HikariCP 설정 및 테스트 (0) | 2022.01.18 |
JDBC 테스트 코드 (0) | 2022.01.18 |