[Bài đọc] – Xử lý ngoại lệ cho Spring MVC Application

9.AOP

Hình dưới đây mô tả các biên xử lý ngoại lệ trong Spring MVC Application. Tất cả các ngoại lệ phải được xử lý trong phạm vi đường kẻ màu vàng. Không được có ngoại lệ vượt ra khỏi biên.

1. Phân loại các ngoại lệ

Ngoại lệ có thể là một trong các loại sau:

  • Ngoại lệ nghiệp vụ: mô tả một vi phạm về luật nghiệp vụ. Chẳng hạn chuyển một số tiền vượt quá hạn mức. Hay đặt một phòng khách sạn vào một ngày ở quá khứ.
  • Ngoại lệ từ thư viện, sinh ra trong khi chương trình đang hoạt động bình thường. Chẳng hạn ngoại lệ thời gian chờ quá lâu, hay quá nhiều request cùng lúc.
  • Ngoại lệ từ hệ thống. Những ngoại lệ không bao giờ xảy ra nếu hệ thống đang hoạt động bình thường. Ví dụ IOException.
  • Ngoại lệ bất thường từ hệ thống. Ví dụ không có quyền ghi đọc file, hay hết dung lượng ổ cứng, hay database server bị down.
  • Lỗi fatal. Những lỗi ảnh hưởng tới toàn bộ hệ thống. Ví dụ hết bộ nhớ cấp phát.

Các ngoại lệ có thể được phân làm ba lớp:

1.1. Ngoại lệ có thể được xử lý nếu người dùng thực hiện lại thao tác. Ví dụ như thay đổi giá trị nhập vào form và submit lại. Những ngoại lệ này là ngoại lệ về mặt nghiệp vụ, hoặc những ngoại lệ ngẫu nhiên gặp khi hệ thống đang hoạt động bình thường. Chẳng hạn người dùng submit vào lúc có quá nhiều requent, hệ thống không xử lý được, nếu thử lại thì khả năng sẽ hết. Những ngoại lệ này được điều khiển bởi mã của chương trình.

1.2. Ngoại lệ không thể được xử lý đơn giản bằng cách thực hiện lại thao tác. Những ngoại lệ này có thể là lỗi hệ thống hoặc những lỗi fatal. Những ngoại lệ này do framework điều khiển.

1.3. Những ngoại lệ sinh ra do request không hợp lệ. Chẳng hạn request tới uri không có controller mapping nào. Những ngoại lệ này do framework điều khiển.

Nhà phát triển phải để tâm đến các ngoại lệ trong phân lớp 1.1. Trong khi đó, người có vai trò kiến trúc sư phải để ý đến phân lớp số 1.2 và 1.3.

2. Các phương thức xử lý ngoại lệ

Có bốn phương thức để xử lý ngoại lệ:

2.1. Sử dụng try-catch. Phương pháp này thường để xử lý các ngoại lệ tại request (Controller).

2.2. Sử dụng @ExceptionHandler để ủy quyền cho front controller xử lý ngoại lệ.

2.3. Sử dụng HandlerExceptionResolver. Phương pháp này được dùng để xử lý ngoại lệ tại servlet.

2.4. Sử dụng trang báo lỗi. Phương pháp này được dùng để bắt các fatal error hay các ngoại lệ sinh ra ngoài phạm vi của Spring.

Tham khảo hình dưới đây.

Nhà phát triển cần thiết kế và triển khai loại 2.1 và 2.2, trong khi đó người đóng vai kỹ sư thiết kế cần thiết kế và triển khai loại 2.3 và 2.4.

Luồng làm việc khi sử dụng try-catch

Luồng xử lý ngoại lệ khi sử dụng @ExceptionHandler

Luồng làm việc khi hệ thống không ở trạng thái bình thường để Application có thể hoạt động

Application vấn đang có khả năng điều khiển chương trình. Do đó việc xử lý vẫn đặt tại đây.

Xử lý ngoại lệ khi request không hợp lệ

Request không hợp lệ có thể được chặn và xử lý trước mà không cần đưa tới cho Controller.

Xử lý ngoại lệ khi gặp lỗi fatal

Application mất khả năng xử lý lỗi này. Việc xử lý được cấu hình tại web server. Xử lý bằng cách cấu hình trang thông báo lỗi.

Leave a Reply

Your email address will not be published. Required fields are marked *