SpringMVC 源码分析之 FrameworkServlet

这篇博客分析了 SpringMVC 中 FrameworkServlet 的 `service` 方法,着重讨论了对不同请求类型的处理,尤其是 `doDelete`, `doGet`, `doPost`, `doPut` 方法如何调用 `processRequest` 进行实际处理。在 `processRequest` 中,主要工作是初始化 LocaleContext 和 RequestAttributes,设置异步管理器,以及在处理完请求后恢复上下文和发布事件。此外,文章还介绍了 LocaleContext 和 RequestAttributes 在处理国际化和请求属性中的作用。" 109457448,5584369,摄像头技术解析:白平衡、色温和伽马曲线,"['计算机视觉', '摄像头']
摘要由CSDN通过智能技术生成

@Override

protected void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

HttpMethod httpMethod = HttpMethod.resolve(request.getMethod());

if (httpMethod == HttpMethod.PATCH || httpMethod == null) {

processRequest(request, response);

}

else {

super.service(request, response);

}

}

可以看到,在该方法中,首先获取到当前请求方法,然后对 patch 请求额外关照了下,其他类型的请求统统都是 super.service 进行处理。

然而在 HttpServlet 中并未对 doGet、doPost 等请求进行实质性处理,所以 FrameworkServlet 中还重写了各种请求对应的方法,如 doDelete、doGet、doOptions、doPost、doPut、doTrace 等,其实就是除了 doHead 之外的其他方法都重写了。

我们先来看看 doDelete、doGet、doPost 以及 doPut 四个方法:

@Override

protected final void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

@Override

protected final void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

@Override

protected final void doPut(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

@Override

protected final void doDelete(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

可以看到,这里又把请求交给 processRequest 去处理了,在 processRequest 方法中则会进一步调用到 doService,对不同类型的请求分类处理。

doOptions 和 doTrace 则稍微有些差异,如下:

@Override

protected void doOptions(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

if (this.dispatchOptionsRequest || CorsUtils.isPreFlightRequest(request)) {

processRequest(request, response);

if (response.containsHeader(“Allow”)) {

return;

}

}

super.doOptions(request, new HttpServletRespon

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值