Почему не вызывается processRequest(запрос,ответ) непосредственно в сервисе(запрос,ответ)?

Я изучаю Spring MVC, я смотрел код о FrameworkServlet. FrameworkServlet расширяет HttpServletBean. HttpServletBean расширяет HttpServlet. Метод FrameworkServlet переопределяет метод service() в HttpServlet. Меня смущает, почему метод processRequest() не вызывается непосредственно в методе service(). Потому что я видел такие, как doPost(), doGet() используется processRequest().

Я благодарен за любые ответы.

   /**
     * Override the parent class implementation in order to intercept PATCH requests.
     */
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpMethod httpMethod = 
                HttpMethod.resolve(request.getMethod());
        if (HttpMethod.PATCH == httpMethod || httpMethod == null) {
            processRequest(request, response);
        }
        else {
            super.service(request, response);
        }
    }

почему бы нет

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            processRequest(request, response);

    }

если не использовать делегат от HttpServlet для обработки запроса, используйте только processRequest() в FrameworkSevlet, что произойдет плохого?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку HttpServlet реализован с учетом HTTP 1.1, который не поддерживает HTTP PATCH, поэтому Spring реализует логику для обработки PATCH запроса в FrameworkServlet, просто расширяя HttpServlet.

Для запроса, отличного от PATCH, просто делегируйте HttpServlet для обработки. Запрос PATCH обрабатывается FrameworkServlet самостоятельно. Так что необходим блок if-then-else в FrameworkServlet для проверки, является ли запрос PATCH.

если не нужно делегировать HttpServlet, все запросы обрабатываются FrameworkServlet, используйте processRequest(), не произойдет ли что-то плохое?

top1ms 15.05.2019 08:45

Возможно, потому что вы пропускаете некоторые коды/логику, которые должны выполняться в HttpServlet. Но из того, что я вижу в текущей последней версии исходных кодов, должно быть довольно безопасно, если пропустить HttpServlet.

Ken Chan 15.05.2019 11:59

Большое спасибо за ваш ответ и разрешил мою путаницу.

top1ms 15.05.2019 12:06

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

Ken Chan 15.05.2019 12:08

Другие вопросы по теме