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

2024-06-17 12:48

本文主要是介绍Servlet体系、与继承HttpServlet的类的执行过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Servlet体系结构

Servlet接口
在其整个生命周期中,Init是初始化Servlet时调用的方法,Service是处理用户请求、响应用户结果的方法,destroy是Servlet正常销毁时执行的方法。
内部方法:
在这里插入图片描述

ServletConfig接口
内部方法
在这里插入图片描述

GenericServlet抽象类
实现了Servlet接口,并在此基础上,增强实现了ServletConfig接口,具备了ServletConfig内的方法,主要是getServletContext()方法,由此直接方法可拥有直接获得ServletContext的能力。
且该抽象类内还单独提供了无参的init()方法,可将初始化功能和数据的代码在此处处理(不要借用有参的init()方法)。
内部方法:
在这里插入图片描述

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

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

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

这篇关于Servlet体系、与继承HttpServlet的类的执行过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069485

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

JavaEE7 Servlet 3.1(JSR 340)规范中文版

http://www.iteye.com/news/27727-jinnianshilongnian     Jave EE 7中的部分规范已正式获得批准通过,其中包括JSR340 Java Servlet 3.1规范,去年翻译了该规范,在此分享出来,希望对某些朋友有所帮助,不足之处请指正。   点击直接下载    在线版目录   Servlet3.1规范翻译

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因