업데이트 :: 2018.08.10
컨트롤러
컨트롤러 구현
- 컨트롤러 클래스
- 폼 클래스
- JSP와 같은 템플릿 파일 (뷰)
컨트롤러에서 처리할 내용
- 선언형 처리 : 메서드 시그니처를 참조해서 프론트 컨트롤러가 하는일
- 요청 매핑
- 요청 데이터 취득
- 입력값 검사 수행
- 프로그래밍형 처리 : 컨트롤러 클래스의 메서드 안에서 하는 일
- 입력값 검사 결과 확인
- 비즈니스 로직 호출
- 이동대상 확인 및 데이터 연계
- 이동대상 지정
// == 선언형처리 == @RequestMapping(path="/message", method=RequestMethod.GET) // 요청매핑 public String search(@Valid MessageSearchForm form/*요청데이터취득*/, BindingResult result) { // 입력검사수행 // == 프로그래밍형처리 == if(result.hasErrors()) { // 입력값검사 결과처리 return 'message/searchForm'; } List<Message> messages = service.search(form.getKeyword()); // 비즈니스 로직 model.addAttribute("messages", messages); // 이동대상과 데이터 연계 return "message/searchResult"; // 이동대상 지정 }
DI 컨테이너 등록
@Configuration @EnableWebMvc @ComponentScan("example.app") public class WebMvcConfig extends WebMvcConfigurerAdapter { }
컨트롤러 클래스
@Controller public class WelcomeController { }
- 컴포넌트 스캔기능을 사용해 DI컨테이너에 빈으로 등록
- 요청을 처리하는 메서드(이후 핸들러 메서드로 표기)가 정의돼 있는 클래스로 인식
핸들러 메서드
@Controller public class WelcomeController { @RequestMethod("/") public String home(Model model) { model.addAttribute("now", new Date()); return "home"; } }
핸들러 메서드의 Param값
주요타입
- Model
- 이동대상에 전달할 데이터를 가지고 있는 인터페이스
- RedirectAttributes
- 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스
- 폼클래스 등의 자바빈즈
- 요청 파라미터를 가지고 있는 자바빈즈 클래스
- BindingResult
- 폼 클래스의 입력값 검사 결과를 가지고 있는 인터페이스
- MultipartFile
- 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스
- HttpEntity<?>
- 요청해더와 응답본문을 가지고 있는 인터페이스
- 요청본문은 HttpMessageConverter의 메커니즘을 사용해 임의의 타입으로 변환
- java.util.Locale
- 클라이언트 로캘
- java.util.TimeZone / java.util.ZoneId (Java SE 8 이상)
- 클라이언트 시간대
- java.security.Principal
- 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스
- UriComponentsBuilder
- URL를 조립하기 위한 인터페이스
- 커넥스트 경로로 기본 URL을 가지고 있는 객체가 전달
- SessionStatus
- @SessionAttributes 사용 세션 스코트에 저장한 객체의 라이프사이클을 관리하는 인터페이스
- 실제 세션값 설정과 설정완료여부만 확인
주요 애너테이션
- @PathVariable
- URL에서 경로 변수 값을 가져오기 위한 애너테이션
- @MatrixVariable
- URL에서 매트릭스 변수값을 가져오기 위한 애너테이션
- 기본 설정에서는 사용불가
- @RequestParam
- 요청 파라미터 값을 가져오기 위한 애너테이션
- @RequestHader
- 요청 해더값을 가져오기 위한 애너테이션
- @RequestBody
- 요청 바디값을 가져오기 위한 애너테이션
- HttpMessageConverter구조를 사용해 지정한 타입으로 변환
- @CookieValue
- 쿠기값을 가져오기 위한 애너테이션
정보 애너테이션
- @ModelAttribute
- 모델에 저장된 객체를 인수로 받음
- 인수가 자바빈즈형태라면 생략
- @Value
- '${...}'와 같은 플레이스홀더로 대체된 값이나 '#{...}'과 같은 SpEL식의 실행결과를 인수로 받음
추가사항
- 인수타입이 String이나 Integer같은 간단한 타입인 경우 인수의 이름과 일치하는 요청 파라미터에서 값을 가져올수 있음
- 인수타입이 자바빈즈인 경우 자바빈즈의 기본 속성명과 일치하는 객체를 Model에서 가져올 수 있음
- 만약 해당하는 객체가 Model에 없다면 기본 생성자를 호출해서 새로운 객체를 생성
핸들러 메서드의 Return값
주요타입
- String
- 이동대상의 뷰 이름 반환
- Model
- 이동대상에 전달할 데이터 반환
- ModelAndView
- 이동대상에 뷰이름과 이동대상에 전달할 데이터를 반환
- void
- HttpServletResponse에 직접 응답데이터를 쓰거나
- RequestToViewNameTranslator 매커니즘을 이용해 뷰 이름결정할때 사용
- ResponseEntity<?>
- 응답해더와 응답본문에 직렬화된 객체를 반환
- 반환한 객체를 HttpMessageConverter 메커니즘을 이용해 임의의 형식을 직렬화
- HttpHeaders
- 응답해더만 반환
주요 애너테이션
- @ModelAttribute
- Model에 저장하는 객체를 반환
- 반환값의 형이 자바빈즈인 경우 생략가능
- @ResponseBody
- 응답본문에 직렬화하는 객체를 반환
- 객체는 HttpMessageConverter의 매커니즘을 이용해 임의의 형식으로 직렬화ㄴ
뷰 컨트롤러 이용
- 뷰만 호출하는 경우에 뷰 컨트롤러를 이용가능
public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("home"); } }
- addViewControllers 오버라이드
- addViewController에 경로 지정
- setViewName에 뷰 이름을 인수로 지정
<mvc:view-controller path="/" view-name="home" />
Created by MoonsCoding
e-mail :: jm921106@gmail.com
반응형
'Spring > WEB' 카테고리의 다른 글
학습 // Spring // WEB // 화면이동 (0) | 2018.08.20 |
---|---|
학습 // Spring // WEB // Validation (0) | 2018.08.20 |
학습 // Spring // WEB // Form DataBinding Class (0) | 2018.08.20 |
학습 // Spring // WEB // Request Data 처리 (0) | 2018.08.20 |
학습 // Spring // WEB // RequestMapping (0) | 2018.08.20 |