Servlet工作原理-程序员宅基地

技术标签: java  Web  servlet  前端  


一、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 容器配合工作,如果你觉得有收获的话,就留下你的吧!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_49991895/article/details/126478837

智能推荐

HDU3290 The magic apple tree【DFS】-程序员宅基地

文章浏览阅读129次。题目链接:HDU3290 The magic apple tree题意:给你一个树,起始叶子结点的值为他的编号本身,开始更新后,如果一个非叶子结点有K个子节点有值,那么他的值更新为这些值中第(k+1)/2小,求根节点的最后值;分析:从根节点向下DFS,到叶子结点之后向上回溯,裸题;#include<bits/stdc++.h>#define pb push_backu..._the magic apple tree

Android初步进阶之通知Notification_notificationchannel setfullscreenintent-程序员宅基地

文章浏览阅读143次。我了解到的通知,可以有三种展示类型,分别为普通通知、悬挂通知和折叠通知。而我们可以常用自定义视图、触发事件和权限等对它进行设置,个性化。下面介绍一个普通的通知的构建。示例代码:普通通知//触发事件 val mIntent:Intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com")) //通知管理器 val manager:Notification_notificationchannel setfullscreenintent

CentOS6.5源码安装MySQL5.6.35_源码安装mysql5.5.36-程序员宅基地

文章浏览阅读888次。原文地址:http://www.cnblogs.com/ShanFish/p/6531365.html参考地址:http://blog.csdn.net/1099564863/article/details/51622709http://blog.csdn.net/wendi_0506/article/details/39478369http://www.cnblogs.c_源码安装mysql5.5.36

Dart从入门到入土【持续更新】_dart教程-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏7次。Flutter入门语言Dart从0开始入门到入土保姆级教学_dart教程

一文详解微服务架构,通俗易懂,看到很多人给了这篇文章很高的评价,转载推荐分享给大家-程序员宅基地

文章浏览阅读723次,点赞13次,收藏18次。面试题文档来啦,内容很多,485页!由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

cocos2d 制作fnt 批量缩放png ios 批量制作图标 gamedevkit 支持windows, mac_fnt mac-程序员宅基地

文章浏览阅读2.1k次。0.制作了一个简单软件这个软件有4个功能:批量缩放png图片根据美术给的数字小图等,制作fnt字体文件供cocos2d使用批量制作ios 图标和android 图标(只需传入一张图片)截图制作,传入5张IPhone6+的截图,生成IPhone5,IPhone6的截图(这个功能没什么用,不过当你个人开发制作20+个游戏的时候,就能省点力)下面是具体功能介绍。。。当然这个软件暂定为收费。1. coco_fnt mac

随便推点

解决Sublime出现中文乱码的情况_sublime中文乱码-程序员宅基地

文章浏览阅读8.8k次,点赞4次,收藏8次。Sublime text 软件中出现中文乱码,大多是因为编码格式不支持,只需要安装一个插件就可以解决中文乱码问题。_sublime中文乱码

350、仿真-基于STM32单片机温湿度光照CO2浓度检测报警proteus仿真设计(程序+原理图+Proteus仿真+配套资料等)_stm32 dac dma proteus 仿真-程序员宅基地

文章浏览阅读744次,点赞6次,收藏13次。STM32系列是为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:“增强型”STM32F103系列和“基本型”STM32F101系列。增强型系列的时钟频率能达到72MHz,是同类产品中频率最高的;基本型的时钟频率为36MHz,用16位产品一样的价格得到比16位产品更大的性能,是16位产品的最好选择。两个系列都有内置的32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。_stm32 dac dma proteus 仿真

100个网站需要的服务器配置,100并发服务器需要什么配置-程序员宅基地

文章浏览阅读1.5k次。100并发服务器需要什么配置 内容精选换一换压测是需要模拟用户实际业务操作的真实使用场景,那么并发用户数是模拟一定数量用户操作的一个配置。例如,游戏网站某个时间点进行竞技活动,那么这个时候对设备的要求肯定是最高的。并发用户数就是模拟成千上万的用户在同一个时间点进行各种操作的配置数。这个时候我们将并发用户数,同时结合并发时间和思考时间来进行计算并发请求的数量,压测出服务器最终饱和数据100开头的IP..._100人的服务器配置

OpenOffice转换Office_openoffice命令行-程序员宅基地

文章浏览阅读300次。【代码】OpenOffice转换Office。_openoffice命令行

基于QtQuick的二维码解码_qrqoqk-程序员宅基地

文章浏览阅读1.7k次。QRDeCode Powered QML ModuleDesigning cool, interactive interfaces. DuoDuoZhijiao came up with a much better answer for QRDeCode: QML, a declarative language perfect for designing UIs (and much more). H_qrqoqk

JDBC简介_jdbc的介绍-程序员宅基地

文章浏览阅读1.2k次。JDBC简介一、JDBC简介JDBC(Java DataBase Connectivity, java 数据库连接)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 java 语言编写的类和接口组成。JDBC 提供了一个种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC 也是个商标名。jdbc的本质:jdbc是sun公司制定的一套接口(interface)接口都有调用者和实现者。面向接口调用、面向接口写实现_jdbc的介绍