Servlet及其生命周期
今天开始对Servlet进行一个较为全面深入的学习,并将学习所得记录于此,与君共勉。
思维导图如下:
接下来开始对各部分进行介绍总结。
1.什么是servlet
定义:Servlet是小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性 。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。
功能:交互式地浏览和生成数据,生成动态Web内容。接受客户端请求,处理并生成响应数据发送给客户端。
基本介绍:servlet是JavaWeb三大组件之一,三大组件为:servlet程序,filter过滤器,listener监听器。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。servlet本质上也是Java类,但是要遵循servlet规范(接口)编写,没有main()方法,它的创建,使用,销毁有servlet容器进行管理。
提供servlet功能的服务器叫做servlet容器,常见的容器有:Tomcat,Jetty,Oracle Application server,JBoss等。
2.实现过程
客户端发送请求至服务器端;
服务器将请求信息发送至 Servlet;
Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
服务器将响应返回给客户端
3.工作过程
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
4.生命周期
1.加载阶段
Tomcat从文件系统,远程文件系统或其他网络服务中通过类加载器来加载Servlet类到内存,并调用Servlet的默认构造方法(不带参构造器)
2.初始化阶段
在获得servlet实例后调用init()方法初始化该实例
3.响应请求阶段
调用service()方法,根据请求方式的不同,调用doGet() 或者 doPost()
4.终止阶段
servlet摧毁时调用destroy()方法
5.其他补充
针对客户端的多次Servlet请求,通常情况下,服务器只会在第一次请求的时候创建一个Servlet实例对象,并驻留在内存中,为后续的其他请求服务,直至Servlet容器退出,Servlet实例对象才会销毁。
在Servlet的整个生命周期内,Servlet的init()方法只被调用一次,而对于每一个请求都会调用一次Servlet的service()方法service根据请求方式调用doGet或doPost方法。
这里用动图演示一下整个生命周期,以tomcat为例
5.Servlet API
1.javax.servlet 其中包含定义servlet和servlet容器之间契约的类和接口。
2.javax.servlet.http 其中包含定义HTTP Servlet 和Servlet容器之间的关系。
3.javax.servlet.annotation 其中包含标注servlet,Filter,Listener的标注。它还为被标注元件定义元数据。
4.javax.servlet.descriptor,其中包含提供程序化登录Web应用程序的配置信息的类型。
6.Servlet体系结构
6.1servlet接口
看下servlet接口的源码
接口总共定义了五个方法,其中init() service() destroy()是servlet的生命周期方法,代表了servlet从初始化到响应请求再到摧毁的过程。上文已经介绍,这里不再赘述。
getServletConfig() 方法
返回一个 ServletConfig 对象,该对象用来返回初始化参数和 ServletContext。ServletContext 接口提供有关 servlet 的环境信息。
getServletInfo() 方法
是一个可选的方法,它提供有关 servlet 的信息,如作者、版本、版权。
6.2其他接口待补充
7.HttpServlet类
在实际开发中,一般都是通过继承HttpServlet类的方式去实现Servlet程序。这里对其进行简单介绍
Serclet接口有两个实现类,GenerricServlet和HttpServlet,其中后者是前者的子类,它在原有基础上添加了一些HTTP协议处理方法,它比GenerricServlet功能更强大,所以我们一般将自己的类继承自HttpServlet,并重写doGet方法和doPost方法,不需要重写Service方法。
8.参考资料
https://www.cnblogs.com/rocomp/p/4808924.html
https://baike.baidu.com/item/servlet/477555?fr=aladdin#9
https://blog.csdn.net/qq_19782019/article/details/80292110
https://blog.csdn.net/CSDN_GIA/article/details/53452710
Servlet及其生命周期相关推荐
- java之Servlet的生命周期
Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...
- 初次使用MyEclipse || Servlet 的生命周期
Servlet 的生命周期: 从第一次调用,到服务器关闭 如果在 web.xml 中配置了 load-on-startup 则是从服务器开启到服务器关闭 package com.cl.servlet; ...
- 框架:Servlet的生命周期
Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...
- 【Servlet】HTTP 协议之请求方式、Servlet介绍、Servlet 的生命周期
HTTP 协议之请求格式 HTTP协议官网:其中有http协议原文https://www.w3.org/Protocols/ 请求格式的结构: 请求头:请求方式.请求的地址和HTTP 协议版本 请求行 ...
- 集成 Tomcat、 Servlet 的生命周期
通过对 Servlet 的 web.xml 配置,我们知道 Servlet 的配置方式 有很多种,也很多需要注意的地方.但是同时我们也发现每次在 Myeclipse 中更改了代码后,都需要重新复制代码 ...
- Servlet的生命周期和工作原理
原文 一.Servlet生命周期分为三个阶段: 1).初始化阶段:调用init()方法 2).响应客户端请求阶段:调用service()方法 3).终止阶段:调用destroy()方法 ...
- Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
Servlet的生命周期分为5个阶段:加载.创建.初始化.处理客户请求.卸载. (1)加载:Servlet容器(Tomcat)通过类加载器加载servlet文件(.class) (2)创建:通过调用s ...
- servlet的生命周期 (四个阶段).
1.加载阶段 加载并实例化我们的servlet实例 从我们的Tomcat(容器)启动,Tomcat会通过类的加载器加载我们的servlet,并调用默认的构造函数 2.初始化阶段init() servl ...
- 阅文 java面试题,阅文笔试:讲讲servlet的生命周期
大家好,我是勾玉! 该问来自2021届阅文Java方向笔试卷,servlet想必大家都有所了解,这是一个非常重要的知识点,希望大家多多关注. servlet的生命周期可分为初始化.响应请求.终止三个阶 ...
最新文章
- 20145307《信息安全系统设计基础》期中总结
- sql随机查询数据语句(NewID(),Rnd,Rand(),random())
- 蓝牙耳机和蓝牙鼠标相互干扰_蓝牙耳机推荐:编辑亲测后中肯评价五大爆款蓝牙耳机...
- 推荐 14 个 GitHub 上优质的原创前端博客文章仓库
- 发现dba_segments和dba_extents中统计段空间大小居然不一样
- Vue 组件实例属性的使用
- 最新emlog媒体范美化版v6.3.1
- 一文掌握GaussDB(DWS) SQL进阶技能:全文检索
- 马尔科夫过程与吉布斯采样
- ios app上传图片与文件到服务器,iOS开发之上传图片视频到服务器
- 111-GAMP处理流程
- R语言时间序列分析常用步骤
- Ubuntu16.04定时执行功能
- 为什么打印还要另存为_打印的时候为什么显示文件另存为
- [名词解释] PATA和SATA I
- 包收录外链平台都有哪些
- 几种实现动画效果的优化方法(will-change属性的使用)
- 真正的高手,都有对抗“熵增”的底层思维
- 引文分析软件histcite简介(中科大 罗昭锋)
- 【STM8S】STM8S之内外部16M晶振
热门文章
- java.lang.IllegalArgumentException: Bucket “xxxx“ 名称无效。Bucket 命名规范:1)只能包括小写字母,数字和短横线(-);2)必须以小写字母或者数
- java swing mysql项目_java swing mysql 实现的家庭收支管理系统项目源码
- 应用逻辑:haskell生成有理数集合
- 如何让mysql榨干电脑性能_榨干多核CPU?这个方法你必须试试!
- win7打开远程计算机,win7系统开启远程桌面实现远程连接图文教程
- 全球与中国低压电气机柜市场现状及未来发展趋势(2022)
- 电脑数据丢失如何恢复
- SDK 的下载及安装教程
- matlab 和 numpy 矩阵乘法异同
- Unity 一笔画的玩法实现