Рубрики
Без рубрики

Пользовательские страницы ошибок с Spring MVC

Узнайте, как быстро реализовать пользовательскую страницу ошибок в Spring MVC (для каждого HTTP-кода)

Автор оригинала: baeldung.

1. Обзор

Общим требованием в любом веб-приложении являются настраиваемые страницы ошибок.

Например, предположим, что вы запускаете приложение vanilla Spring MVC поверх Tomcat. Пользователь вводит недопустимый URL-адрес в своем браузере, и ему отображается не очень удобная сине – белая трассировка стека-не идеально.

В этом руководстве мы настроим настраиваемые страницы ошибок для нескольких кодов ошибок HTTP.

Рабочее предположение состоит в том, что читателю довольно комфортно работать с Spring MVC; если нет, это отличный способ начать .

Эта статья посвящена Spring MVC. В нашей статье Настройка страницы ошибок белой метки описывается, как создать пользовательскую страницу ошибок в Spring Boot.

2. Простые Шаги

Давайте начнем с простых шагов, которые мы собираемся выполнить здесь:

  1. Укажите один URL-адрес /ошибки в web.xml это сопоставляется с методом, который будет обрабатывать ошибку всякий раз, когда генерируется ошибка
  2. Создайте контроллер с именем Контроллер ошибок с отображением /ошибки
  3. Выясните код ошибки HTTP во время выполнения и отобразите сообщение в соответствии с кодом ошибки HTTP . Например, если генерируется ошибка 404, то пользователь должен увидеть сообщение типа “Ресурс не найден”, в то время как для ошибки 500 пользователь должен увидеть что-то в строках ” Извините! На нашем конце была сгенерирована внутренняя ошибка сервера’

3. web.xml

Мы начнем с добавления следующих строк в ваш web.xml :


    /errors

Обратите внимание, что эта функция доступна только в версиях сервлетов выше 3.0.

Любая ошибка, сгенерированная в приложении, связана с кодом ошибки HTTP. Например, предположим, что пользователь вводит URL-адрес /недопустимый URL-адрес в браузер, но такой RequestMapping не был определен внутри Spring. Затем HTTP-код 404, сгенерированный базовым веб – сервером. Строки, которые мы только что добавили в ваш web.xml указывает Spring выполнить логику, записанную в методе, который сопоставлен с URL-адресом /ошибки.

Краткое примечание здесь – соответствующая конфигурация сервлета Java, к сожалению, не имеет API для настройки страницы ошибок, поэтому в этом случае нам действительно нужен web.xml .

4. Контроллер

Двигаясь дальше, мы теперь создаем ваш Контроллер ошибок . Мы создаем единый объединяющий метод, который перехватывает ошибку и отображает страницу ошибки:

@Controller
public class ErrorController {

    @RequestMapping(value = "errors", method = RequestMethod.GET)
    public ModelAndView renderErrorPage(HttpServletRequest httpRequest) {
        
        ModelAndView errorPage = new ModelAndView("errorPage");
        String errorMsg = "";
        int httpErrorCode = getErrorCode(httpRequest);

        switch (httpErrorCode) {
            case 400: {
                errorMsg = "Http Error Code: 400. Bad Request";
                break;
            }
            case 401: {
                errorMsg = "Http Error Code: 401. Unauthorized";
                break;
            }
            case 404: {
                errorMsg = "Http Error Code: 404. Resource not found";
                break;
            }
            case 500: {
                errorMsg = "Http Error Code: 500. Internal Server Error";
                break;
            }
        }
        errorPage.addObject("errorMsg", errorMsg);
        return errorPage;
    }
    
    private int getErrorCode(HttpServletRequest httpRequest) {
        return (Integer) httpRequest
          .getAttribute("javax.servlet.error.status_code");
    }
}

5. Передний конец

В демонстрационных целях мы будем держать нашу страницу ошибок очень простой и компактной. Эта страница будет содержать только сообщение, отображаемое на белом экране. Создайте файл jsp с именем ErrorPage.jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>


    Home


    

${errorMsg}

6. Тестирование

Мы смоделируем две наиболее распространенные ошибки, возникающие в любом приложении: ошибку HTTP 404 и ошибку HTTP 500.

Запустите сервер и перейдите к localhost:8080/spring-mvc-xml/недопустимый URL-адрес. Поскольку этот URL-адрес не существует, мы ожидаем увидеть нашу страницу ошибки с сообщением ” Код ошибки Http: 404. Ресурс не найден”.

Давайте посмотрим, что происходит, когда один из методов обработчика вызывает исключение NullPointerException. Мы добавляем следующий метод в Контроллер ошибок:

@RequestMapping(value = "500Error", method = RequestMethod.GET)
public void throwRuntimeException() {
    throw new NullPointerException("Throwing a null pointer exception");
}

Перейдите к localhost:8080/spring-mvc-xml/500 Ошибка. Вы должны увидеть белый экран с сообщением ” Код ошибки Http: 500. Внутренняя ошибка сервера”.

7. Заключение

Мы видели, как настроить страницы ошибок для различных HTTP-кодов с помощью Spring MVC . Мы создали единственную страницу ошибок, на которой сообщение об ошибке отображается динамически в соответствии с кодом ошибки HTTP.