Я изучаю 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, что произойдет плохого?




Поскольку HttpServlet реализован с учетом HTTP 1.1, который не поддерживает HTTP PATCH, поэтому Spring реализует логику для обработки PATCH запроса в FrameworkServlet, просто расширяя HttpServlet.
Для запроса, отличного от PATCH, просто делегируйте HttpServlet для обработки. Запрос PATCH обрабатывается FrameworkServlet самостоятельно. Так что необходим блок if-then-else в FrameworkServlet для проверки, является ли запрос PATCH.
Возможно, потому что вы пропускаете некоторые коды/логику, которые должны выполняться в HttpServlet. Но из того, что я вижу в текущей последней версии исходных кодов, должно быть довольно безопасно, если пропустить HttpServlet.
Большое спасибо за ваш ответ и разрешил мою путаницу.
Рад слышать, так что подумайте о том, чтобы принять мой ответ или проголосовать за меня? ?
если не нужно делегировать
HttpServlet, все запросы обрабатываютсяFrameworkServlet, используйтеprocessRequest(), не произойдет ли что-то плохое?