Servlet体系、与继承HttpServlet的类的执行过程

Servlet体系结构

Servlet接口
在其整个生命周期中,Init是初始化Servlet时调用的方法,Service是处理用户请求、响应用户结果的方法,destroy是Servlet正常销毁时执行的方法。
内部方法:
Servlet体系、与继承HttpServlet的类的执行过程_第1张图片

ServletConfig接口
内部方法
Servlet体系、与继承HttpServlet的类的执行过程_第2张图片

GenericServlet抽象类
实现了Servlet接口,并在此基础上,增强实现了ServletConfig接口,具备了ServletConfig内的方法,主要是getServletContext()方法,由此直接方法可拥有直接获得ServletContext的能力。
且该抽象类内还单独提供了无参的init()方法,可将初始化功能和数据的代码在此处处理(不要借用有参的init()方法)。
内部方法:
Servlet体系、与继承HttpServlet的类的执行过程_第3张图片

HttpServlet抽象类
继承了GenericServlet抽象类,其处理用户请求的方法与原本的Servlet一样在Service()方法中。在HttpServlet中提供了两个Service方法:
一个是
Servlet体系、与继承HttpServlet的类的执行过程_第4张图片
本方法目的是增强ServletRequest和ServletResponse为HttpServletRequest和HttpServletResponse,将其通过this传入本类中的另一个专门接收Http类型对象的方法,即下面的Service方法:
Servlet体系、与继承HttpServlet的类的执行过程_第5张图片
本次增强的目的,是因为为了调用HttpServletRequedoPostst和HttpServletResponse对应的doGet方法和doPost方法,两个方法对外提供,并最终被我们重写。

当一个类继承了HttpServlet后,其执行流程为:
1、通过浏览器的地址栏输入的url地址的末尾,如本例的/aim,定位到web.xml配置文件(如下图)或者注解。
Servlet体系、与继承HttpServlet的类的执行过程_第6张图片
2、在web.xml配置文件中,url地址末尾定位到url-pattern,获得servlet的自定义名称“demo”,通过该名称在servlet中找到其对应类“com.test.servlet.Demo”,去执行Demo。

3、该类继承了HttpServlet,因此会先执行其父类的Service方法。(想象如果Demo不重写任何方法,其就是HttpServlet,则在完成其父类GenericServlet内的init()方法后,接着就是完成Service方法)。
Servlet体系、与继承HttpServlet的类的执行过程_第7张图片
该service方法如下:
Servlet体系、与继承HttpServlet的类的执行过程_第8张图片
4、上面的Service方法强转ServletRequest和ServletResponse,接着调用本类下的Http的Service方法,如下
在这里插入图片描述
本方法判断请求方式是get还是post,并最终回到我们创建的Demo中,调用我们重写的doGet和doPost方法。
Servlet体系、与继承HttpServlet的类的执行过程_第9张图片

你可能感兴趣的:(Servlet体系、与继承HttpServlet的类的执行过程)