이 튜토리얼에서는 Bean Validation API ( Bean Validation 1.0 용 JSR 303 및 Bean Validation 1.1 용 JSR 349) 를 사용하여 Spring Web MVC 애플리케이션에서 양식 필드의 유효성을 검사하는 방법을 학습 한다. 우리는 아래와 같이 Spring MVC에서 email과 password의 두 필드에 대한 유효성 확인 제약 조건을 가진 로그인 폼을 개발할 것입니다 .
애플리케이션을 구현하기위한 자세한 단계를 수행하기 전에 JavaBean 객체의 속성에 대한 유효성 검증 제약 조건을 정의하는 데 사용되는 Bean Validation API에 대해 알아 보겠습니다.
1. Bean 유효성 검사 API와 Hibernate Validator 구현
요컨대, Bean Validation API 는 프로그래머가 주석을 통해 객체 모델에 대한 유효성 검증 제약 조건을 선언하는 방법을 표준화합니다. 다음은 간단한 예입니다.
public class User {
@NotNull
@Email
private String email;
@NotNull
@Size(min = 6, max = 15)
private String password;
// getters and setters
}
JSR 303 및 JSR 349 빈이 검증 API (버전 1.0는 각각 1.1)에 대한 규격을 정의하고, 절전 검사기 참조 구현이다. 다음 링크에서 JAR 파일을 다운로드하십시오.
Spring MVC 애플리케이션에서 Bean Validation API를 사용 하려면 validation-api-1.1.0.Final.jar 및 hibernate-validator-5.0.1.Final.jar 파일이 필요합니다.
Maven을 사용하고 있다면 pom.xml 파일에 다음 의존성을 추가 하십시오 :
- 빈 검증 API 1.1 :
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency
Hibernate Validator 5.0.1. 최종 :
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.1.Final</version>
</dependency>
2. Bean Validation API를위한 Spring MVC 지원
Spring MVC는 최소한의 설정만으로 Bean Validation을 완벽하게 지원한다. 위에서 언급 한 두 개의 jar 파일을 애플리케이션의 classpath에 놓고 Spring의 애플리케이션 컨텍스트 XML 파일에 다음 항목을 추가한다.
<mvc:annotation-driven />
Spring MVC는 유효성 검사 지원을 자동으로 감지하여 활성화합니다.
이제 컨트롤러 클래스에서 @Valid 주석 ( javax.validation.Valid )을 사용 하여 양식을 백업하는 모델 객체에 주석을 추가합니다 .
@Controller
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String doLogin(@Valid User user, BindingResult result) {
// login logic here
}
}
Spring MVC 는 Spring의 form 태그를 사용하는 JSP 폼의 입력으로 속성을 바인딩 한 후에 @Valid 주석으로 주석 처리 된 모델 객체의 유효성을 검사합니다 . 제약 조건 위반은 BindingResult 객체 에서 오류로 표시 되므로 컨트롤러 메서드에서 다음과 같이 위반 사항을 확인할 수 있습니다.
if (result.hasErrors()) {
// form validation error
} else {
// form input is ok
}
일반적으로 유효성 검사 오류가 발생하면 입력 양식을 다시 사용자에게 반환합니다. 그리고 JSP 형식에서 우리는 Spring의 form errors 태그를 사용하여 유효성 검증 오류 메시지를 다음과 같이 표시 할 수 있습니다.
<form:errors path="email" />
오류 메시지는 유효성 검사 주석에 지정할 수 있습니다. 예를 들면 다음과 같습니다.
@NotEmpty(message = "Please enter your email addresss.")
private String email;
메시지를 현지화하려면 다음 규칙에 따라 특성 파일에서 키를 지정하십시오.
ConstraintName.CommandName.propertyName=validation error message
예 :
NotEmpty.userForm.email=Please enter your e-mail.
이제 위에서 언급 한 스프링 MVC 애플리케이션에서 로그인 폼의 필드를 검증하기 위해 위의 원칙을 적용 해 보자.
3. 코딩 모델 클래스
다음과 같이 모델 클래스 ( User.java )를 코딩하십시오 .
package net.codejava.spring;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
/**
*
* @author www.codejava.net
*
*/
public class User {
@NotEmpty
@Email
private String email;
@NotEmpty(message = "Please enter your password.")
@Size(min = 6, max = 15, message = "Your password must between 6 and 15 characters")
private String password;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
보시다시피 여기에 사용 된 유효성 검사 제한 주석은 @NotEmpty , @Email 및 @Size 입니다.
이메일 입력란에 오류 메시지를 지정하지 않았습니다. 대신 유효성 검사 오류 메시지의 현지화를 보여주기 위해 이메일 필드에 대한 오류 메시지가 등록 정보 파일에 지정됩니다.
4. JSP 입력 폼 코딩하기
다음 내용으로 LoginForm.jsp 파일을 작성 하십시오.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<style>
.error {
color: red; font-weight: bold;
}
</style>
</head>
<body>
<div align="center">
<h2>Spring MVC Form Validation Demo - Login Form</h2>
<table border="0" width="90%">
<form:form action="login" commandName="userForm">
<tr>
<td align="left" width="20%">Email: </td>
<td align="left" width="40%"><form:input path="email" size="30"/></td>
<td align="left"><form:errors path="email" cssClass="error"/></td>
</tr>
<tr>
<td>Password: </td>
<td><form:password path="password" size="30"/></td>
<td><form:errors path="password" cssClass="error"/></td>
</tr>
<tr>
<td></td>
<td align="center"><input type="submit" value="Login"/></td>
<td></td>
</tr>
</form:form>
</table>
</div>
</body>
</html>
5. 코딩 컨트롤러 클래스
다음과 같이 컨트롤러 클래스 ( LoginController.java )를 코딩하십시오 .
package net.codejava.spring;
import java.util.Map;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
*
* @author www.codejava.net
*
*/
@Controller
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String viewLogin(Map<String, Object> model) {
User user = new User();
model.put("userForm", user);
return "LoginForm";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String doLogin(@Valid @ModelAttribute("userForm") User userForm,
BindingResult result, Map<String, Object> model) {
if (result.hasErrors()) {
return "LoginForm";
}
return "LoginSuccess";
}
}
6. JSP 결과 페이지 코딩
LoginSuccess.jsp의 페이지는 사용자가 유효한 이메일과 올바른 암호를 입력하는 경우에 표시됩니다. 코드는 다음과 같습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome</title>
</head>
<body>
<div align="center">
<h2>Welcome ${userForm.email}! You have logged in successfully.</h2>
</div>
</body>
</html>
7. Spring MVC 애플리케이션 컨텍스트 설정하기
응용 프로그램 컨텍스트 파일 ( spring-mvc.xml ) 에서 Spring MVC를 다음과 같이 설정한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="net.codejava.spring" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/messages" />
</bean>
</beans>
8. 메시지 작성 .propreties 파일
전자 메일 필드에 대한 유효성 검사 오류 메시지를 현지화하므로 messages.properties 파일 에 다음 key = value 쌍을 입력 하십시오.
NotEmpty.userForm.email=Please enter your e-mail.
Email.userForm.email=Your e-mail is incorrect.
9. web.xml에서 Spring 프레임웍 설정하기
웹 전개 디스크립터 파일에서 Spring 디스패처 서블릿을 사용 가능하게 설정하십시오.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>SpringMvcFormValidationExample</display-name>
<servlet>
<servlet-name>SpringController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringController</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
10. 프로젝트 구조 및 필수 JAR 파일 검토
위의 모든 소스 파일을 Eclipse IDE에서 구성하십시오.
WEB-INF \ lib 디렉토리 아래에 필요한 JAR 파일 은 다음과 같습니다.
-
- 동급생 -0.5.4.jar
- commons-logging-1.1.1.jar
- hibernate-validator-5.0.1.Final.jar
- jboss-logging-3.1.0.GA.jar
- spring-beans-3.2.4.RELEASE.jar
- spring-context-3.2.4.RELEASE.jar
- spring-core-3.2.4.RELEASE.jar
- spring-expression-3.2.4.RELEASE.jar
- spring-web-3.2.4.RELEASE.jar
- spring-webmvc-3.2.4.RELEASE.jar
- validation-api-1.1.0.Final.jar
Hibernate Validator JAR 파일은 Classmate와 JBoss logging JAR 파일에 의존하므로 여기 와 여기에서 다운로드 하십시오 .
11. 응용 프로그램 테스트
브라우저의 주소창에 다음 URL을 입력하십시오.
http : // localhost : 8080 / SpringMvcFormValidationExample / login
로그인 양식이 나타납니다.
유효하지 않은 이메일과 짧은 암호 (예 : 4 자)를 입력 한 다음 로그인을 클릭하십시오. 아래에 표시된 것처럼 폼의 오른쪽에 빨간색으로 표시된 유효성 검사 오류 메시지가 표시됩니다.
이제 유효한 이메일과 유효한 비밀번호 (6 ~ 15 자)를 입력하고 Enter 키를 누르십시오. 로그인 성공 페이지가 나타납니다.
관심이있을 수도 있습니다 :
- Spring MVC 이해하기
- Spring Tool Suite IDE를 사용한 봄 MVC 초보 자습서
- 스프링 MVC 폼 처리 자습서와 예제
- Spring MVC 컨트롤러 작성을위한 14 가지 팁
- Spring 프레임 워크의 핵심 이해하기
SpringMvcFormValidationExample.war | [배치 가능한 WAR 파일] | 3994 kB |
SpringMvcFormValidationExample.zip | [이클립스 프로젝트] | 3998 kB |
댓글 ( 4)
댓글 남기기