DispatcherServlet.class 는 spring-webmvc-5.0.7.RELEASE.jar에 포함 (버전 변동될수있음) 소스파일위치 : org/springframework/web/servlet/DispatcherServlet.java 기본전략 : org/springframework/web/servlet/DispatcherServlet.properties DispatcherServlet.properties : 기본적으로 사용하는 클래스들 ( 설정으로 변경할수도 있음 )
DispatcherServlet.properties 주요메서드 void initStarategy(ApplicationContext context) - 기본전략을 초기화 ↓ void doService(HttpServletRequest request, HttpServletResponse response) - doDispatch() 호출 ↓ void doDispatch(HttpServletRequest request, HttpServletResponse response) - 실제 요청을 처리 ↓ void processDispatchResult(HttpservletRequest request, HttpServletResponse response,HandlerExecutionChain) - 예외가 발생했는지 확인 하고, 발생하지 않으면 render()를 호출 ↓ void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response) - 응답결과를 생성해서 전송
데이터의 변환과 검증 1. WebDataBinder
① String타입으로 입력받음
② 입력받은 String타입 → int타입으로 타입변환
③ 데이터검증
④ Mydate객체에 저장
※ ③ 에서 에러발생시 BindoingResult에 에러저장
2. ResisterController에 변환기능 추가하기
String → String[] 변환은 Srping에서 지원함
String 날짜→ Date 변화은 지원x, 수동작업 필요 ( 변환기 등록 )
변환등록 우선순위
1
커스텀 PropertyEditor
2
ConversionService
3
디폴트 PropertyEditor
3. PropertyEditor
◆ PropertyEditor : 양방향타입변환 ( String → 타입, 타입 → String ) 특정 타입이나 이름의 필드에 적용 가능
ㄴ 디폴트 PropertyEditor : 스프링이 기본적으로 제공 ㄴ 커스텀 PropertyEditor : 사용자가 직접 구현. PropertyEditorSupprot를 상속하면 편리
◆ 모든 컨트롤러 내에서의 변환 : WebBindingInitializer를 구현후 등록 ◆ 특정 컨트롤러 내에서의 변환 : 컨트롤러에 @InitBinder가 붙은 메서드를작성
4. Converter와 ConversionService
Converter : 단반향타입 변환 ( 타입 A → 타입B ) PropertyEditor의 단점을 개선 ( stateful → stateless ) [ iv를 쓰냐 안쓰냐]
Converter 를 등록해야함 ConversionService : 타입 변화나 서비스를 제공. 여러 Converter를 등록해놓은 것 ※ WebDataBinder에 DefaultFormattingConversionService가 기본적으로 등록되어있음 ㄴ모든 컨트롤러 내에서의 변환 : ConfigurableWebBindingInitializer를 설정해서 사용 ㄴ특정 컨트롤러 내에서의 변환 : 컨트롤러에 @InitBinder가 붙은 메서드를 작성
5. Formatter
Formatter : 인터페이스. 양방향타입 변환 ( String → 타입, 타입 → String ) [ 바인딩할 필드에 적용 : @NumberFormat // 숫자타입 변환시 사용 @DateTimeFormat // 날짜타입 변환시 사용
사용예
디폴트 PropertyEditor
6. Validator란?
객체를 검증하기 위한 인터페이스 객체 검증기 (validator) 구현에 사용
7. Validator를 이용한 검증 - 수동
8. Validator를 이용한 검증 - 자동
9. 글로벌 Validator ( 모든컨트롤러에서 동작하는 검증기 )
하나의 Validator로 여러 객체를 검증할 때, 글로벌 Validator로 등록
10. MessageSource (사용자화면에 에러메세지 보여주기)
다양한 리소스에서 메세지를 읽기 위한 인터페이스 프로퍼티 파일을 메세지 소스로하는 ResourceBundleMessageSource를 등록 ( servlet-context.xml에 )
error_message.properties 파일을 src/main/resouces 에 저장