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。

工作流程

  1. Web Client 向Servlet容器(Tomcat)发出Http请求

  2. Servlet容器接收Web Client的请求

  3. Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。

  4. Servlet容器创建一个HttpResponse对象

  5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。

  6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。

  7. HttpServlet调用HttpResponse对象的有关方法,生成响应数据。

  8. Servlet容器把HttpServlet的响应结果传给Web Client。

处理请求流程

  1. 用户点击一个链接,指向了一个servlet而不是一个静态页面。

  2. 容器“看出”这个请求是一个Servlet,所以它创建了两个对象HttpServletRequest和HttpServletResponse。

  3. 容器根据请求中的URL找到正确的Servlet,为这个请求创建或分配一个线程,并把请求和响应对象传递给这个Servlet线程。

  4. 容器调用Servlet的service()方法。根据请求的不同类型,service()方法会调用doGet()或doPost()方法。这里假设调用doGet()方法。

  5. doGet()方法生成动态页面,并把这个页面“塞到”响应对象里,需要注意的是,容器还有响应对象的一个引用!

  6. 线程结束,容器把响应对象转换为一个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 运行工作原理详解相关推荐

  1. nginx配置文件及工作原理详解

    nginx配置文件及工作原理详解 1 nginx配置文件的结构 2 nginx工作原理 1 nginx配置文件的结构 1)以下是nginx配置文件默认的主要内容: #user nobody; #配置用 ...

  2. ASP.NET页面与IIS底层交互和工作原理详解(一)

    第一回: 引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net.他们耐心.细致地告诉你如何一步步拖放控件.设置控件属性.编写CodeBehind代码,以实 ...

  3. 有刷直流电机工作原理详解

    有刷直流电机工作原理详解 来源:网络整理• 2018-05-10 09:00 • 56380次阅读 有刷直流电机被广泛用于从玩具到按钮调节式汽车坐椅的应用中.有刷直流 (Brushed DC,BDC) ...

  4. FTP协议及工作原理详解

    FTP协议及工作原理详解 1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的 ...

  5. 网络爬虫工作原理详解

    网络爬虫工作原理详解 一.通用网络爬虫运行原理 二.聚焦网络爬虫运行原理

  6. sync.Map低层工作原理详解

    sync.Map低层工作原理详解 目录 为什么需要sync.Map?适合什么场景? sync.Map内部实现基本原理及结构体分析 sync.Map低层工作原理 1. 为什么需要sync.Map?适合什 ...

  7. ASP.NET页面与IIS底层交互和工作原理详解 (二)

    第三回: 引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler ...

  8. camera (13)---智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono

    智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono 由于双摄技术的快速发展,目前已经衍生出了几种不同的双摄硬件和算法配置解决方案.不同手机厂商可能有不同的双摄配置,比如华为荣耀P9 ...

  9. 晶体三极管结构及其工作原理详解

    晶体三极管基本概述 晶体管是一种与其他电路元件结合使用时可产生电流增益.电压增益和信号功率增益的多结半导体器件.因此,晶体管称为有源器件,而二极管称为无源器件.晶体管的基本工作方式是在其两端施加电压时 ...

  10. 卡尔曼滤波工作原理详解

    卡尔曼滤波工作原理详解 网上看到有不少的博客翻译 How a Kalman filter works, in pictures, 这篇文章中非常有趣的解释了卡尔曼滤波,. 但是目前很多翻译的文章中公式 ...

最新文章

  1. NFV节省企业宽带成本—Vecloud微云
  2. asp.net2.0中session在ie9下不能保存的问题
  3. java中方法不调用会执行_java[新手]类里的方法没有调用为什么实现了?
  4. boost::describe模块实现overloaded的测试程序
  5. MNIST数据可视化
  6. 使用docker的mysql镜像
  7. 智伴机器人三级分销模式_有赞三级分销?有赞分销模式怎
  8. Unity5 GI与PBS渲染从用法到着色代码
  9. 【转发】响应式Web设计?怎样进行?
  10. 客户端和服务器不支持一般 ssl 协议版本或加密套件。_恶意软件加密通信概要分析...
  11. 收藏!MySQL 面试必须掌握的 8 个知识点!
  12. 机器这次击败人之后,争论一直没平息 | SQuAD风云
  13. 解决php保存文件时文件名乱码问题
  14. ios 表情符号 键盘_更方便地输入颜文字表情:教你如何在 iPhone 键盘中添加颜文字...
  15. Facebook账户 “ 解封、防封、养号 ” 知识要点,已收藏!
  16. 小米、百度、bigo 、滴滴 、快手等iOS 面试后的一次阶段性总结
  17. 计算机开机后无法网络拨号怎样处理,拨号上网时电脑假死的原因和解决方法
  18. 联想惠普谁才是pc的最后王者
  19. 第六周作业——百词斩扇贝单词背单词功能模块测试
  20. [论文阅读笔记]Deep Neural Networks are Easily Fooled:High Confidence Predictions for Unrecognizable Images

热门文章

  1. 在计算机桌面中选择了隐藏如何显示不出来的,电脑桌面文件被隐藏了怎么办
  2. 解决递归求快速排序时间复杂度计算
  3. linux修音软件下载,修音软件下载 Auto Tune 8(修音工具) v8.1.2 免费安装版 下载-脚本之家...
  4. vivado基本使用流程(详细版,一步步跟着来一定能成功)
  5. 使用ADB启动手机APP
  6. spring源码下载安装,导入idea以及编译报错问题详细解决过程
  7. 2022年高处安装、维护、拆除理论题库及模拟考试
  8. 新浪微博产品分析报告
  9. hadoop+hbase安装
  10. win32com excel转pdf