Servlet 运行工作原理详解
Servlet 运行工作原理详解
瓜子二手车 秋季校招内推邮箱:liyoule@guazi.com,欢迎投简历哦
一、研发类校招
1.研发工程师(前端/后端/云平台开发)
2.算法
3.测试开发
4.数据仓库
5.安全工程师
二、运营/数据分析类职位校招
1.数据分析(商业分析/经营分析/业务分析等)
2.运营(品类运营)
三、产品类职位校招
1、产品经理
投递方式:邮件发送简历至liyoule@guazi.com.邮件主题: [校招简历投递] 姓名-学校-岗位
投递截止时间: 2021/12/31 24:00
正文开始:
事实上,servlet就是一个Java接口,interface! 打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的interface!
所以,提问中说的网络协议、http什么的,servlet根本不管!也管不着!
那servlet是干嘛的?很简单,接口的作用是什么?规范呗!
servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:
你初始化时要做什么
你销毁时要做什么
你接受到请求时要做什么
这是Java给的一种规范!就像阿西莫夫的机器人三大定律、行尸走肉里Rick的那三个问题一样,规范!
servlet是一个规范,那实现了servlet的类,就能处理请求了吗?
答案是,不能。
你可以随便谷歌一个servlet的hello world教程,里面都会让你写一个servlet,相信我,你从来不会在servlet中写什么监听8080端口的代码,servlet不会直接和客户端打交道!
那请求怎么来到servlet呢?答案是servlet容器,比如我们最常用的tomcat,同样,你可以随便谷歌一个servlet的hello world教程,里面肯定会让你把servlet部署到一个容器中,不然你的servlet压根不会起作用。
tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。
Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。
工作流程
Web Client 向Servlet容器(Tomcat)发出Http请求
Servlet容器接收Web Client的请求
Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
Servlet容器创建一个HttpResponse对象
Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。
HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。
HttpServlet调用HttpResponse对象的有关方法,生成响应数据。
Servlet容器把HttpServlet的响应结果传给Web Client。
处理请求流程
用户点击一个链接,指向了一个servlet而不是一个静态页面。
容器“看出”这个请求是一个Servlet,所以它创建了两个对象HttpServletRequest和HttpServletResponse。
容器根据请求中的URL找到正确的Servlet,为这个请求创建或分配一个线程,并把请求和响应对象传递给这个Servlet线程。
容器调用Servlet的service()方法。根据请求的不同类型,service()方法会调用doGet()或doPost()方法。这里假设调用doGet()方法。
doGet()方法生成动态页面,并把这个页面“塞到”响应对象里,需要注意的是,容器还有响应对象的一个引用!
线程结束,容器把响应对象转换为一个HTTP响应,并把它发回给客户,然后删除请求和响应对象。
工作原理
1、首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet()、doPost()等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。
2、每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。
3、Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest、ServletResponse 强转为HttpRequest 和 HttpResponse。
Servlet 运行工作原理详解相关推荐
- nginx配置文件及工作原理详解
nginx配置文件及工作原理详解 1 nginx配置文件的结构 2 nginx工作原理 1 nginx配置文件的结构 1)以下是nginx配置文件默认的主要内容: #user nobody; #配置用 ...
- ASP.NET页面与IIS底层交互和工作原理详解(一)
第一回: 引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net.他们耐心.细致地告诉你如何一步步拖放控件.设置控件属性.编写CodeBehind代码,以实 ...
- 有刷直流电机工作原理详解
有刷直流电机工作原理详解 来源:网络整理• 2018-05-10 09:00 • 56380次阅读 有刷直流电机被广泛用于从玩具到按钮调节式汽车坐椅的应用中.有刷直流 (Brushed DC,BDC) ...
- FTP协议及工作原理详解
FTP协议及工作原理详解 1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的 ...
- 网络爬虫工作原理详解
网络爬虫工作原理详解 一.通用网络爬虫运行原理 二.聚焦网络爬虫运行原理
- sync.Map低层工作原理详解
sync.Map低层工作原理详解 目录 为什么需要sync.Map?适合什么场景? sync.Map内部实现基本原理及结构体分析 sync.Map低层工作原理 1. 为什么需要sync.Map?适合什 ...
- ASP.NET页面与IIS底层交互和工作原理详解 (二)
第三回: 引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler ...
- camera (13)---智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono
智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono 由于双摄技术的快速发展,目前已经衍生出了几种不同的双摄硬件和算法配置解决方案.不同手机厂商可能有不同的双摄配置,比如华为荣耀P9 ...
- 晶体三极管结构及其工作原理详解
晶体三极管基本概述 晶体管是一种与其他电路元件结合使用时可产生电流增益.电压增益和信号功率增益的多结半导体器件.因此,晶体管称为有源器件,而二极管称为无源器件.晶体管的基本工作方式是在其两端施加电压时 ...
- 卡尔曼滤波工作原理详解
卡尔曼滤波工作原理详解 网上看到有不少的博客翻译 How a Kalman filter works, in pictures, 这篇文章中非常有趣的解释了卡尔曼滤波,. 但是目前很多翻译的文章中公式 ...
最新文章
- NFV节省企业宽带成本—Vecloud微云
- asp.net2.0中session在ie9下不能保存的问题
- java中方法不调用会执行_java[新手]类里的方法没有调用为什么实现了?
- boost::describe模块实现overloaded的测试程序
- MNIST数据可视化
- 使用docker的mysql镜像
- 智伴机器人三级分销模式_有赞三级分销?有赞分销模式怎
- Unity5 GI与PBS渲染从用法到着色代码
- 【转发】响应式Web设计?怎样进行?
- 客户端和服务器不支持一般 ssl 协议版本或加密套件。_恶意软件加密通信概要分析...
- 收藏!MySQL 面试必须掌握的 8 个知识点!
- 机器这次击败人之后,争论一直没平息 | SQuAD风云
- 解决php保存文件时文件名乱码问题
- ios 表情符号 键盘_更方便地输入颜文字表情:教你如何在 iPhone 键盘中添加颜文字...
- Facebook账户 “ 解封、防封、养号 ” 知识要点,已收藏!
- 小米、百度、bigo 、滴滴 、快手等iOS 面试后的一次阶段性总结
- 计算机开机后无法网络拨号怎样处理,拨号上网时电脑假死的原因和解决方法
- 联想惠普谁才是pc的最后王者
- 第六周作业——百词斩扇贝单词背单词功能模块测试
- [论文阅读笔记]Deep Neural Networks are Easily Fooled:High Confidence Predictions for Unrecognizable Images
热门文章
- 在计算机桌面中选择了隐藏如何显示不出来的,电脑桌面文件被隐藏了怎么办
- 解决递归求快速排序时间复杂度计算
- linux修音软件下载,修音软件下载 Auto Tune 8(修音工具) v8.1.2 免费安装版 下载-脚本之家...
- vivado基本使用流程(详细版,一步步跟着来一定能成功)
- 使用ADB启动手机APP
- spring源码下载安装,导入idea以及编译报错问题详细解决过程
- 2022年高处安装、维护、拆除理论题库及模拟考试
- 新浪微博产品分析报告
- hadoop+hbase安装
- win32com excel转pdf