[Thực hành] Ứng dụng kiểm tra email hợp lệ sử dụng Gradle

2. Spring MVC

Mục tiêu

Luyện tập sử dụng Controller trong Spring MVC.

Điều kiện

Biết cách sử dụng Controller trong Spring MVC.

Mô tả

Trong phần này, chúng ta sẽ xây dựng một ứng dụng cho phép kiểm tra tính hợp lệ của một email.

Ứng dụng cho phép người dùng nhập vào một email, nhấn nút kiểm tra và sẽ hiển thị thông báo kết quả.

Một email hợp lệ phải đạt những yêu cầu sau:

  • Bắt đầu bằng một ký tự
  • Không chứa các ký tự đặc biệt
  • Có một ký tự @ ngăn cách tên email và domain
  • Domain phải hợp lệ

Hướng dẫn

Bước 1: Cài đặt Gradle

Cài đặt gradle trên máy theo hướng dẫn tại đây:

https://gradle.org/install/

Bước 2: Tạo project tên spring-email-validation sử dụng Gradle

Chọn next

Nhập các giá trị cho các ô GroupID, ArtifactId, Version và chọn Next

Chọn tiếp Next

Sau khi chọn Finish, cấu trúc project hiển thị như sau:

Cấu hình tomcat để thực thi ứng dụng

Chọn Edit Configurations

Chọn tab Deployment

Chọn thêm Artifact

Click OK 

Cấu hình cấu trúc ứng dụng. Chọn Project Structure

Hộp thoại xuất hiện

Chọn +

Chọn Spring và Click vào OK.

Sửa file index.jsp

Chạy ứng dụng khi click vào 

Vào trình duyệt gõ url: http://localhost:8080/index.jsp. Quan sát kết quả trả về 

Bước 3: Vào file build.gradle sửa lại thông tin trong dependencies

Vào trình duyệt gõ link: https://mvnrepository.com/artifact/org.springframework/spring-webmvc

Chọn phiên bản 4.3.17

Copy đoạn mã trong tab Gradle vào file build.gradle

Sau đó IDE tự động import springframework vào project.

Bước 4: Tạo cấu trúc thư mục views, WEB-INF, java.controller

Các file applicationContext.xml, dispatcher-servlet.xml, web.xml cài đặt giống trong bài tập trước.

Bước 5: Tạo EmailController trong thư mục controller

EmailController xử lý validate email

Trước hết chúng ta có Email Regular Expression Pattern như sau:

^[A-Za-z0-9]+[A-Za-z0-9]*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)$;

Mô tả

Ký hiệuMô tả
^Bắt đầu chuỗi String hoặc một dòng
[A-Za-z0-9]+Email address phải bắt đầu với “[A-Za-z0-9]+” và có ít nhất một ký tự
[A-Za-z0-9]*@tùy chọn theo “[A-Za-z0-9]”, và kết thúc bằng một ký hiệu “@”
[A-Za-z0-9]Domain phải sau @ và ký tự phải nằm trong [A-Za-z0-9]
\\.[A-Za-z0-9]Sau domain là phần mở rộng của domain sau dấu chấm, ví dụ: (.com, .net, .org)
$Kết thúc chuỗi String hoặc kết thúc dòng

Ở đây ta tạo một biến static String EMAIL_REGEX chứa định dạng regular expression của email. Sau đó tạo một phương thức validate để kiểm tra email cần kiểm tra có hợp lệ với EMAIL_REGEX đã định nghĩa hay không.

package controller;

@Controller
public class EmailController {

private static Pattern pattern;
private Matcher matcher;

/* Khai báo Regex */
private static final String EMAIL_REGEX = "^[A-Za-z0-9]+[A-Za-z0-9]*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)$";

public EmailController() {
pattern = Pattern.compile(EMAIL_REGEX);
}


@GetMapping("/")
String getIndex() {
return "index";
}

@PostMapping("/validate")
String validateEmail(@RequestParam("email") String email, Model model) {
boolean isvalid = this.validate(email);
if (!isvalid) {
model.addAttribute("message", "Email is invalid");
return "index";
}

model.addAttribute("email", email);
return "success";
}

private boolean validate(String regex) {
matcher = pattern.matcher(regex);
return matcher.matches();
}

}

Bước 6: Sửa file index.js

<%@page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Email Validation</title>
</head>
<body>

<h1>Email Validate</h1>
<h3 style="color:red">${message}</h3>

<form action="validate" method="post">
<input type="text" name="email"><br>
<input type="submit" value="Validate">
</form>

</body>
</html>

Bước 7: Sửa file success.jsp 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Success</title>
</head>
<body>
<h3>Hi ${email}</h3>
</body>
</html>

Bước 8: Chạy chương trình và quan sát

Nhập email hợp lệ: [email protected]

Nhập email không hợp lệ: [email protected] 

Mã nguồn tham khảo tại: https://github.com/codegym-vn/spring-email-validation

Leave a Reply

Your email address will not be published.