面试题servlet的执行过程

硅谷探秘者 3028 0 0

1.浏览器请求

浏览器向服务器请求时,服务器不会直接执行我们的类,而是到web.xml里寻找路径名 

①:第一步,浏览器输入访问路径后,携带了请求行,头,体 

②:第二步,根据访问路径找到已注册的servlet名称

③:第三步,根据映射找到对应的servlet名 (在xml里配置的)

③:第四步,根据根据servlet名找到我们全限定类名,既我们自己写的类


2.服务器创建对象

①:服务器找到全限定类名后(xml配置),通过反射创建对象,同时也创建了servletConfig,里面存放了一些初始化信息(注意服务器只会创建一次servlet对象,所以servletConfig也只有一个)。


3.调用init方法

①:对象创建好之后,首先要执行init方法,但是我们发现我们自定义类下没有init方法,所以程序会到其父类HttpServlet里找 

②:我们发现HttpServlet里也没有init方法,所以继续向上找,既向其父类GenericServlet中继续寻找,在GenericServlet中我们发现了init方法,则执行init方法(对接口Servlet中的init方法进行了重写) 。


4.调用service方法

接着,服务器会先创建两个对象:ServletRequest请求对象和ServletResponse响应对象,用来封装浏览器的请求数据和封装向浏览器的响应数据 

①:接着服务器会默认在我们写的类里寻找service(ServletRequest req, ServletResponse res)方法,但是DemoServlet中不存在,那么会到其父类中寻找 

②:到父类HttpServlet中发现有此方法,则直接调用此方法,并将之前创建好的两个对象传入 

③:然后将传入的两个参数强转,并调用HttpServlet下的另外个service方法 

④:接着执行service(HttpServletRequest req, HttpServletResponse resp)方法,在此方法内部进行了判断请求方式,并执行doGet和doPost,但是doGet和doPost方法已经被我们自己重写了,所以会执行我们重写的方法 。


5.向浏览器响应

最后处理完数据后,将数据响应到浏览器


参考:https://blog.csdn.net/u010452388/article/details/80395679

猜你喜欢
java虚拟机(jvm) 4338 jvm内存模型分析(1)已经对内存模型进了一个宏观概括http://www.jiajiajia.club/weblog/blog/artical/82那么下边具体分析一下方法还是以一个
blog
其他 1238 packagecom.dzqc.campus.controller;publicclassA{publicstaticAa=newA();publicstaticAa2=newA
official 657 《计算机组成原理》运算器基本组成如下运算器基本组成控制器基本组成控制器基本组成完成一条指令步骤完成一条指令步骤计算机工作描述起来非常复杂,不太好描述,我也是截图贴在了这里(原视
其他 4383 查询每门课成绩都大于80分学生学号数据库表studentnamescorecourseA85语文A75数学A82英语B75语文B89数学B79英语C90语文C100数学C100英语请写出每门课
spring/springmvc 3807 1.springmvc图:2.分析1.一个url请求该站点前端控制器DispatcherServlet。2.随后DispatcherServlet调用HandlerMapping
其他 2511 1、五升壶装满;2、倒入六升壶(未满,内有5升);3、再把五升壶装满;4、倒入六升壶,六升壶满,五升壶剩4升;5、六升壶倒空,6、五升壶里剩余四升水倒入六升壶,此时六升壶内有四升水7、五升壶装满;8、倒入六升壶装满,此时五升壶内有三升水,完毕。
java虚拟机(jvm) 2739 概念:解释运:一边对序进翻译,翻译成计算机可以指令,一边交给计算机,翻译一句一句。编译运:对整个序先翻译成计算机可以理解指令,然后计算机可以直接。java是解释还是
java基础 1596 32个java必考点
归档
2018年11月  12 2018年12月  33 2019年01月  28 2019年02月  28 2019年03月  32 2019年04月  27 2019年05月  33 2019年06月  6 2019年07月  12 2019年08月  12 2019年09月  21 2019年10月  8 2019年11月  15 2019年12月  25 2020年01月  9 2020年02月  5 2020年03月  16 2020年04月  4 2020年06月  1 2020年07月  7 2020年08月  13 2020年09月  9 2020年10月  5 2020年12月  3 2021年01月  1 2021年02月  5 2021年03月  7 2021年04月  4 2021年05月  4 2021年06月  1 2021年07月  7 2021年08月  2 2021年09月  8 2021年10月  9 2021年11月  16 2021年12月  14 2022年01月  7 2022年05月  1 2022年08月  3 2022年09月  2 2022年10月  2 2022年12月  5 2023年01月  3 2023年02月  1 2023年03月  4 2023年04月  2 2023年06月  3 2023年07月  4 2023年08月  1 2023年10月  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。