我正在学习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
,会发生什么不好的事情?
答案 0 :(得分:1)
因为HttpServlet
是在不支持HTTP PATCH
的情况下使用HTTP 1.1实现的,所以Spring通过简单扩展{来实现PATCH
中的FrameworkServlet
请求的逻辑{1}}。
对于非HttpServlet
请求,只需将其委托给PATCH
即可处理。对于HttpServlet
请求,由PATCH
本身处理。因此,必须使用FrameworkServlet
中的if-then-else块来检查请求是否为FrameworkServlet
。