Servlet工作原理

2023-11-03


一、Servlet是什么?

Servlet 类是 JavaWeb 的三大组件之一,它属于动态资源,是一组 Tomcat 提供给程序猿的 API。其作用是处理请求,服务器通常会把接收到的请求交由 Servlet 的实现类来处理。

通常Servlet的实现类需要完成:

  1. 接收请求数据;
  2. 处理请求;
  3. 完成响应。

Servlet 实现类中的方法需要由我们自己来实现,且每个 Servlet 实现类必须实现 javax.servlet.Servlet 接口,之后由服务器来创建 Servlet 类对象并调用相应的方法。

二、相关接口

ServletConfig:当前Servlet的配置信息,每一个Servlet都有其唯一对应的ServletConfig。

ServletContext:作用是在整个Web应用的动态资源之间共享数据,一个Web应用对应一个唯一的ServletContext对象, ServletContext对象在项目启动时创建,在项目卸载时销毁。

GenericServlet:通用的Servlet父类。

HttpServlet:HttpServlet继承了GenericServlet,而GenericServlet实现Servlet接口,
所以我们可以继承HttpServlet来创建一个Servlet。当通过继承HttpServlet来创建一个Servlet时,我们只需要根据要处理的请求的类型,来重写不同的方法 ①处理get请求,则重写doGet();②处理post请求,则重写doPost()

HttpServletRequest:浏览器发送给服务器的请求报文,该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。

HttpServletResponse:服务器发送给浏览器的响应报文,该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。

三、Servlet的工作流程

Servlet只有放在容器中才能执行,最常见的容器为Tomcat,Servlet工作流程如下图:
在这里插入图片描述
分析如下:

  1. 浏览器向服务器发送GET请求,请求服务器ServletA
  2. 服务器上的Servlet 容器接收到该URL,根据该URL判断为Servlet请求,此时Servlet 容器将产生两个对象:请求对象(HttpServletRequest)和响应对象(HttpServletResponce)
  3. Servlet 容器对请求的 URL 进行解析并根据web.xml配置文件找到处理该请求的Servlet(ServletA),并创建一个线程A
  4. Servlet 容器将刚才创建的请求对象和响应对象传递给线程A
  5. Servlet 容器调用Servlet的service()方法
  6. service()方法根据请求类型(本示例为GET请求)调用doGet() (本示例调用doGet()) 或doPost()方法
  7. doGet()执行完后,将结果返回给Servlet 容器
  8. 线程A被销毁或被放在线程池中

四、Servlet的生命周期

Servlet是运行在Servlet容器中的,由Servlet容器来负责Servlet实例的查找、创建以及整个生命周期的管理。Servlet整个生命周期可以分为四个阶段:

  1. 类装载以及实例创建阶段:默认情况下,Servlet实例是在接收到第一个请求时进行创建,并且在以后的请求中对这个实例进行复用。
  2. 实例初始化阶段:一旦Servlet实例被创建,将会调用Servlet中的 init(ServletConfig arg) 方法,传入ServletConfig,即Servlet的相关配置信息,init()方法在整个Servlet的生命周期中只会被调用一次。
  3. 服务阶段:实例初始化后,一旦由客户端请求,Servlet 就会调用service(ServletRequest req, ServletRespose res) 方法处理数据并响应数据。
  4. 实例销毁阶段:当Servlet容器决定销毁某个Servlet时,将会调用 Servlet 实例中的destory()方法,在destory()方法中进行资源释放。一旦Servlet实例的 destory() 方法被调用,Servlet 容器将不会发任何请求给这个Servlet实例,若 Servlet 容器需要再次使用这个 Servlet,需要重新实例化该 Servlet 实例。

总结

以上就是今天要讲的内容,本文主要介绍了Servlet的工作原理,包括Servlet相关接口、Servlet的生命周期和Servlet如何和Servlet 容器配合工作,如果你觉得有收获的话,就留下你的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Servlet工作原理 的相关文章

随机推荐

  • sql计算用户留存率和时间留存率

    Sql 29 计算用户的平均次日留存率 题目 现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率 请你取出相应数据 解法1 表里的数据可以看作是全部第一天来刷题了的 那么我们需要构造出第二天来了的字段 因此可以考虑用left jo
  • Android 打包Jar(发布SDK)常见问题及解决方案

    在Android开发过程中 我们经常会有这种需求 需要将自己开发一个类库打包成jar包以供他人 其他人一般指开发者 调用 而不是直接打包apk文件供最终用户使用 在打包成jar后 你往往会自己先测试一下看jar包能不能直接使用 这时就会常常
  • mac下ssh报错:ssh_exchange_identification: read: Connection reset by peer

    1 美图 2 背景 base lcc lcc hadoop 2 7 4 sh sbin stop all sh This script is Deprecated Instead use stop dfs sh and stop yarn
  • Ant Design Pro入门之部署安装

    部署安装 下载地址 https github com ant design ant design pro 我们使用资料中提供的 已经下载好的文件 ant design pro master zip 第一步 将ant design pro m
  • VSCode 无法更新插件 XHR timeout error 解决办法

    注 本方案仅为XHR timeout error错误的其中一种解决方案 作者使用此方法修改后更新成功 但不保证对于所有的XHR Timeout Error错误 使用此方法后可解决问题 另注 依评论区要求 现已上传修改windows授时服务器
  • 为什么实时时钟的晶振都是32.768KHZ呢

    原来我也只知道实时时钟就应该用32 768KHZ的晶振但不知道为什么 今天突然想知道为什么就查了查 搞懂了 写下来 为了积累 为了分享 1 振荡电路用于实时时钟RTC 对于这种振荡电路只能用32 768KHZ 的晶体晶体被连接在OSC3 与
  • OpenWrt 快速入门(源码目录)

    文章目录 1 OpenWrt 优点 2 OpenWrt 版本发展 3 OpenWrt 源码 缩略语 Acronyms and Abbreviations OpenWrt Wrt Wirless Router 官网 www openwrt o
  • Namomo Test Round 2 C 序列

    题意 给定一个长度为 n n n的序列 a a a 每次可以选择 l
  • Python报错合集(1)

    1 slice None None None 0 is an invalid key X train X test y train y test train test split X resampled y resampled test s
  • MySQL启动过程中的问题

    1 创建my ini 进入MySQL的安装目录 创建配置文件my ini配置文件 写入内容 mysql 设置mysql客户端默认字符集 default character set utf8 mysqld 设置3306端口 port 3306
  • easyExcel设置水印

    1 依赖导入
  • Linux命令入门教程(五):系统管理篇

    Linux系统管理 包括权限管理 网络配置 软件安装 各类参数设置 开关机 系统运行状态等 5 1 权限管理 在linux系统中 用户类别有超级用户和普通用户 只有一个超级用户root 普通用户可以有多个 最根本的区别就是权限不同 在lin
  • iOS17可以更新了!网友实测炫酷值拉满,但续航嘛…

    丰色 发自 凹非寺量子位 公众号 QbitAI iOS 17终于来了 今天凌晨正式推送 有数码博主评价 实用性不高 但酷炫值拉满 旺柴 可以说是一句话概括了 不过有测评发现 更新后续航掉依然的厉害 特别是iPhone XR 可得谨慎了 还登
  • 关于代理抓包,ssl pinning解决方案

    详情见我的博客小生博客 抓包 代理抓包 Fiddler charles能抓http https websocket属于应用层 优点 配置简单 抓取解析ssl方便 缺点 app对代理抓包的检测越发厉害 https http是明文传播 易被修改
  • 轻松搭建基于 SpringBoot + Vue 的 Web 商城应用

    首先介绍下在本文出现的几个比较重要的概念 函数计算 Function Compute 函数计算是一个事件驱动的服务 通过函数计算 用户无需管理服务器等运行情况 只需编写代码并上传 函数计算准备计算资源 并以弹性伸缩的方式运行用户代码 而用户
  • ajax.request,ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧...

    使用AJAXRequest进行AJAX应用程序开发 1 初识AJAXRequest 前言 在发布了AJAXRequest类的几个版本之后 渐渐地有许多朋友用上了它 也有许多朋友问我有没有更详细的说明和示例 不过因为时间的问题以及我能想到的示
  • ClamAV 详解

    1 ClamAV介绍Clam AntiVirus是一个类UNIX系统上使用的反病毒软件包 主要应用于邮件服务器 采用多线程后台操作 可以自动升级病毒库 ClamAV是一个在命令行下查毒软件 因为它不将杀毒作为主要功能 默认只能查出您计算机内
  • 微信小程序canvas生成图片并保存

    需求 做一个类似下图的功能 图片内容是动态的 用canvas画出来 生成临时图片 再保存 实现
  • Python中的isinstance()函数

    1 描述 Python中的 isinstance 函数 是Python中的一个内置函数 用来判断一个函数是否是一个已知的类型 类似 type 2 语法 isinstance object classinfo 参数 object 实例对象 c
  • Servlet工作原理

    文章目录 一 Servlet是什么 二 相关接口 三 Servlet的工作流程 四 Servlet的生命周期 总结 一 Servlet是什么 Servlet 类是 JavaWeb 的三大组件之一 它属于动态资源 是一组 Tomcat 提供给