Servlet的两种service方法源码分析

本文深入探讨了Servlet的工作机制,特别是当用户发起请求时Tomcat服务器如何处理这些请求,并详细解释了HttpServlet类中的doGet和doPost方法是如何被调用的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们常常在用Servlet接口时,一般都会继承于HttpServlet,重写doGet和doPost方法,但其底层原理是怎么实现的,没有进行了解,下面我就谈谈自己的见解

当用户发送请求时,Tomcat服务器默认找带有(ServletRequest req,ServletResponse resp)的service方法,而该类中只有service(HttpServletRequest req, HttpServletResponse resp),没有Servlet的service方法,但是子类继承了HttpServlet,子类如果没有该方法,默认调用父类(HttpServlet)的方法,查看HttpServlet源码时,找到Servlet的service方法,源码如下:

查看源码发现Servlet的service方法,将(ServletRequest req,ServletResponse resp)强转为带有Http协议的请求和响应对象,最后再次调用自身的service方法,这时 需要查阅该service的源码看一看 做了什么事情:

我们只截取部分代码

我们查看源码发现,Servlet调用自身的service方法后,将强转后带有Http协议的请求和响应传进来,此时发现两个service出现了,方法名相同参数也相同(方法重写),执行的是子类重写后的方法,而带有Http协议的service方法中,通过请求所携带的信息,获取到请求的方法(get或post),最后调用doGet和doPost方法

因此继承HttpServlet重写service方法,可以间接实现Servlet接口

总结:一个类想通过浏览器访问到,必须直接或间接实现Servlet接口

另外我自己也画了一张图 ,供大家进一步理解:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值