목차
1. @RequestParam과 @ModelAttribute
2. DTO 객체와 List 객체를 JSON으로 변환
1. @RequestParam과 @ModelAttribute (p) hello > person.jsp
- @Controller 어노테이션이 붙은 컨트롤러 클래스에서 값을 받을 때, 개별 프로퍼티의 값을 받을 수도 있고 DTO 객체에 값을 저장해서 객체로 받을 수도 있다.
- 이때 @RequestParam과 @ModelAttribute 어노테이션이 사용된다.
- form에서 사용자가 입력한 값(파라미터)의 key 값인 name 값과 매개변수의 이름이 같으면 어노테이션은 생략 가능하다.
• @RequestParam
- @RequestParam 어노테이션은 name으로 값을 받을 때 사용하는 어노테이션이다.
- 요청 파라미터를 메소드에서 일대일로 받기 위해 사용한다.
- HttpServletRequest에서 제공하는 getParameter() 메소드와 같은 기능을 한다.
- @RequestParam(“name”) 어노테이션은 request.getParameter(“name”)와 같은 역할을 한다.
- ex)
• @ModelAttribute
- @ModelAttribute 어노테이션은 DTO클래스로 값을 받을 때 사용하는 어노테이션이다.
- DTO 같은 객체에 클라이언트가 전송하는 여러개의 파라미터들을 한 번에 바인딩 할 수 있다.
- ex)
2. DTO 객체와 List 객체를 JSON으로 변환 (p) hello > sample.jsp
- 일반적으로 컨트롤러의 메소드 앞의 자료형은 String을 쓰지만, 경우에 따라 DTO 객체 또는 List 객체로 돌려주기도 한다.
- 이때 @RestController 어노테이션을 사용하면 DTO 객체와 List 객체로 돌려줄 때 {key : value} 값 형태의 JSON 형식으로 변환해서 돌려주게 된다.
- ex) {"mno":23,"firstName":"홍","lastName":"길동"}
• DTO 객체, List 객체를 JSON으로 변환하기 위한 조건
1) jackson 라이브러리가 pom.xml에 등록되어 있어야 한다.
2) @RestController 어노테이션을 사용해야 한다.
• @RestController
- 스프링 버전 4점대부터 지원하는 어노테이션으로, @Controller + @ResponseBody의 역할을 한다.
- @RestController 대신 @Controller를 쓰게 되면, 메소드 위에 @ResponseBody를 써야한다.
- 컨트롤러의 메소드에서는 JSON으로 변환된 객체는 요청한 페이지로 return 되어 출력된다.
3. 인터셉터(Interceptor) 로그인
1) 인터셉터(Interceptor)의 개념
- 클라이언트에서 특정 URL 요청시 DispatcherServlet이 Controller를 호출하기 이전에 해당 요청을 가로채는 역할을 수행한다.
- ex) index.jsp에서 upload.do로 요청하면, 스프링의 환경설정 파일인 servlet-context.xml에서 인터셉터로 설정된 LoginCheck.java 파일로 이동
2) 인터셉터 환경 설정 : servlet-context.xml
- 스프링의 환경설정 파일인 servlet-context.xml에서 <bean> 태그로 interceptor를 설정해준다.
3) 인터셉터 구현 방법
① 추상 클래스(abstract class)인 HandlerInterceptorAdapter 클래스를 상속받아서 구현
② 인터페이스(interface)인 HandlerInterceptor 인터페이스를 상속받아서 구현
- 인터페이스는 아래 3개의 메소드를 모두 오버라이딩 하고, 추상 클래스를 상속받는 경우 선택적으로 메소드 오버라이딩 해서 인터셉터 기능을 구현한다.
• boolean preHandle()
• void postHandle()
• void afterCompletion()
4) 인터셉터 처리 메소드 호출 시점
• boolean preHandle()
- DispatcherServlet 은 모든 웹 요청의 진입점이다. 클라이언트로부터 요청이 들어오는 경우, 컨트롤러에 요청을 보내주기 전 중간에 요청을 가로챈다.
• void postHandle()
- 컨트롤러의 메소드의 처리가 끝나 return 되고 화면을 띄워주는 처리가 되기 직전에 이 메소드가 수행된다.
• void afterCompletion()
- 컨트롤러가 수행되고 화면처리까지 끝난 뒤 호출된다.
4. Mybatis와 연동한 Model 1 프로젝트
1) 웹 애플리케이션에서의 흐름
- 웹 애플리케이션의 경우, Controller 클래스 → Service 클래스 → DAO 클래스 순서로 값이 전달된다.
'Spring' 카테고리의 다른 글
94일차: Spring 게시판 환경 설정 / 글 작성 / 글 목록 / 상세 페이지_2021.11.01 (0) | 2021.11.01 |
---|---|
93일차: Spring DB 연동 / Spring 게시판 환경 설정_2021.10.29 (0) | 2021.10.29 |
92일차: Mybatis와 Spring으로 DB 연동_2021.10.28 (0) | 2021.10.28 |
90일차: Spring Framework Anotation DI / Spring MVC_2021.10.26 (0) | 2021.10.26 |
89일차: Spring Framework 개념 / 환경 구축 / 기초_2021.10.25 (0) | 2021.10.25 |