1. DispatcherServlet이란?

여러 입력의 부분의 공통부분을 전처리 (앞에서처리)

2. Spring MVC의 요청 처리 과정


3. DispatcherServlet의 소스분석

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 에 저장
required= 필수 항목입니다.
required.user.pwd=사용자 비밀번호는 필수 항목입니다.
invlaidLength.id=아이디 길이는 {1}~{2}사이어야 합니다.​



servlet-context 에 등록

	<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<beans:property name="basenames">
			<beans:list>
				<beans:value>error_message</beans:value> <!-- /src/main/resources/error_message.properties -->
			</beans:list>
		</beans:property>
		<beans:property name="defaultEncoding" value="UTF-8"/>
	</beans:bean>​

11. 검증 메세지의 출력

스프링이 제공하는 커스텀 태그 라이브러리를 사용필요

<from>대신 <form:form>사용   ( user부분은 검증할 객체 를 넣어줌 )

 <form:errors>로 에러를 출력. path에 에러 발생 필드를 지정. (*은 모든 필드의 에러)




 

 

 

 


참고 :

남궁성, 스프링의 정석

+ Recent posts