Исключение / обработка ошибок в (веб) приложениях - деликатная тема. Некоторые могут выбрать создание сложных исключений и перехватывать их в одном месте, другие могут выбрать передачу сообщений об ошибках.
Я сам предпочитаю бросать исключения. Это более четко и кратко, а также лучше использовать повторно, поддерживать и тестировать. Разработайте интерфейс Validator
с помощью метода validate()
, который создает ValidatorException
. Реализуйте желаемые валидаторы соответственно. Соберите валидаторы и запустите их один за другим в блоке try / catch и соберите там исключения. Э.Г.
Map<String, String> messages = new HashMap<String, String>();
for (Validator validator : validators) {
try {
validator.validate(value);
} catch (ValidatorException e) {
messages.add(fieldname, e.getMessage());
}
}
А затем, как правило, перенаправляют запрос обратно на ту же страницу с тем же (где вы ввели форму) и отображаете сообщение об ошибке где-то рядом с полями ввода или в верхней или нижней части формы. Это более удобно для пользователя, чем другая страница с ошибкой, которая требует от пользователя нажать еще одну кнопку / ссылку, чтобы вернуть форму, и пользователь должен запомнить / выяснить, в чем на самом деле была ошибка.
Все стандартные сообщения об ошибках, конечно, могут храниться в enum
или, более предпочтительно, во внешнем файле ресурсов, например, файл свойств. Таким образом, его проще поддерживать, а также добавить несколько языков в ваше веб-приложение.
Для неустранимых ошибок, таких как неработающая база данных или ошибка в коде (ошибки времени выполнения, внутренние ошибки сервера и т. Д.), Я бы просто позволил исключению пройти через все слои, чтобы вы могли «поймать» его с помощью общая и настраиваемая страница ошибок, которую вы можете определить как <error-page>
в web.xml
. Вы можете определить отдельную страницу ошибки для каждого типа Exception
и / или кода состояния HTTP.
Это, кстати, и то, как работает средний MVC-фреймворк.