为什么不直接在服务(请求,响应)中调用processRequest(请求,响应)?

时间:2019-05-15 03:22:22

标签: java spring spring-mvc

我正在学习Spring MVC,我已经看过有关FrameworkServlet的代码。 FrameworkServlet扩展了HttpServletBeanHttpServletBean扩展了HttpServletFrameworkServlet覆盖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,会发生什么不好的事情?

1 个答案:

答案 0 :(得分:1)

因为HttpServlet是在不支持HTTP PATCH的情况下使用HTTP 1.1实现的,所以Spring通过简单扩展{来实现PATCH中的FrameworkServlet请求的逻辑{1}}。

对于非HttpServlet请求,只需将其委托给PATCH即可处理。对于HttpServlet请求,由PATCH本身处理。因此,必须使用FrameworkServlet中的if-then-else块来检查请求是否为FrameworkServlet