입력값 검증을 위한 Validation 기능은 Valang, Jakarta Commons, Spring 등에서 제공한다. 여기서는 Jakarta Commons Validator를 Spring Framework과 연동하여 사용하는 방법에 대해서 설명하고자 한다.
Jakarta Commons Validator는 필수값, 각종 primitive type(int,long,float…), 최대-최소길이, 이메일, 신용카드번호등의 값 체크등을 할 수 있도록 Template이 제공된다. 이 Template은 Java 뿐 아니라 xxxxJavascript로도 제공되어 client-side, server-side의 검증을 함께 할 수 있으며, Configuration과 에러메시지를 client-side, server-side 별로 따로 하지 않고 한곳에 같이 쓰는 관리상의 장점이 있다.
Struts에서는 Commons Validator를 사용하기 위한 org.apache.struts.validator.ValidatorPlugIn 같은 플러그인 클래스를 제공하는데, Spring에서는 Spring Modules 프로젝트에서 연계 모듈을 제공한다.
여기서는 server-side, client-side validation을 위해, 설치방법, Spring Module에서 제공하는 핵심 클래스인 DefaultValidatorFactory, DefaultValidator와 설정파일인 validator-rules.xml, validator.xml 에 대한 간략한 설명과 예제 프로젝트인 easycompany에 적용하는 과정을 설명한다.
1. 필요 라이브러리
commons-validator : Ver 1.3.1 아래 4개의 파일에 대한 dependency가 있다.
- commons-beanutils : Ver 1.7.0
- commons-digester : Ver 1.8
- commons-logging : Ver 1.0.4
- oro : Ver 2.0.8 (따로 추가함)
2. DefaultValidatorFactory, DefaultBeanValidator 설정
Spring Validator와 Commons Validator의 연계를 위해 중요한 역활을 하는 클래스인 DefaultValidatorFactory, DefaultBeanValidator에 대해 간략하게 설명하자면 아래 표와 같다.
DefaultValidatorFactory | DefaultBeanValidator |
---|
프로퍼티 'validationConfigLocationsApache'에 정의된 Validation rule을 기반으로 Commons Validator들의 인스턴스를 얻는다. | DefaultBeanValidator는 org.springframework.validation.Validator를 implements하고 있지만,DefaultValidatorFactory가 가져온 Commons Validator의 인스턴스를 이용해 validation을 수행한다. Controller에 validation 수행할때 이 DefaultBeanValidator를 참조하면 된다. |
아래 코드를 참조해 빈 정의 파일(예제에는 easycompany-servlet.xml)에 다음과 같이 ValidatorFactory,Validator,validator-rules.xml,validation.xml 파일을 등록한다.
...
<!-- Integration Apache Commons Validator by Spring Modules -->
<bean id="beanValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">
<property name="validatorFactory" ref="validatorFactory"/>
</bean>
<bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
<property name="validationConfigLocations">
<list>
<!-- validator-rules.xml, validator.xml의 위치-->
<value>/WEB-INF/conf/validator-rules.xml</value>
<value>/WEB-INF/conf/validator.xml</value>
</list>
</property>
</bean>
...