今天开始对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.实现过程

  1. 客户端发送请求至服务器端;

  2. 服务器将请求信息发送至 Servlet;

  3. Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;

  4. 服务器将响应返回给客户端

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及其生命周期相关推荐

  1. java之Servlet的生命周期

    Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...

  2. 初次使用MyEclipse || Servlet 的生命周期

    Servlet 的生命周期: 从第一次调用,到服务器关闭 如果在 web.xml 中配置了 load-on-startup 则是从服务器开启到服务器关闭 package com.cl.servlet; ...

  3. 框架:Servlet的生命周期

    Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...

  4. 【Servlet】HTTP 协议之请求方式、Servlet介绍、Servlet 的生命周期

    HTTP 协议之请求格式 HTTP协议官网:其中有http协议原文https://www.w3.org/Protocols/ 请求格式的结构: 请求头:请求方式.请求的地址和HTTP 协议版本 请求行 ...

  5. 集成 Tomcat、 Servlet 的生命周期

    通过对 Servlet 的 web.xml 配置,我们知道 Servlet 的配置方式 有很多种,也很多需要注意的地方.但是同时我们也发现每次在 Myeclipse 中更改了代码后,都需要重新复制代码 ...

  6. Servlet的生命周期和工作原理

    原文 一.Servlet生命周期分为三个阶段: 1).初始化阶段:调用init()方法 2).响应客户端请求阶段:调用service()方法 3).终止阶段:调用destroy()方法         ...

  7. Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。

    Servlet的生命周期分为5个阶段:加载.创建.初始化.处理客户请求.卸载. (1)加载:Servlet容器(Tomcat)通过类加载器加载servlet文件(.class) (2)创建:通过调用s ...

  8. servlet的生命周期 (四个阶段).

    1.加载阶段 加载并实例化我们的servlet实例 从我们的Tomcat(容器)启动,Tomcat会通过类的加载器加载我们的servlet,并调用默认的构造函数 2.初始化阶段init() servl ...

  9. 阅文 java面试题,阅文笔试:讲讲servlet的生命周期

    大家好,我是勾玉! 该问来自2021届阅文Java方向笔试卷,servlet想必大家都有所了解,这是一个非常重要的知识点,希望大家多多关注. servlet的生命周期可分为初始化.响应请求.终止三个阶 ...

最新文章

  1. 20145307《信息安全系统设计基础》期中总结
  2. sql随机查询数据语句(NewID(),Rnd,Rand(),random())
  3. 蓝牙耳机和蓝牙鼠标相互干扰_蓝牙耳机推荐:编辑亲测后中肯评价五大爆款蓝牙耳机...
  4. 推荐 14 个 GitHub 上优质的原创前端博客文章仓库
  5. 发现dba_segments和dba_extents中统计段空间大小居然不一样
  6. Vue 组件实例属性的使用
  7. 最新emlog媒体范美化版v6.3.1
  8. 一文掌握GaussDB(DWS) SQL进阶技能:全文检索
  9. 马尔科夫过程与吉布斯采样
  10. ios app上传图片与文件到服务器,iOS开发之上传图片视频到服务器
  11. 111-GAMP处理流程
  12. R语言时间序列分析常用步骤
  13. Ubuntu16.04定时执行功能
  14. 为什么打印还要另存为_打印的时候为什么显示文件另存为
  15. [名词解释] PATA和SATA I
  16. 包收录外链平台都有哪些
  17. 几种实现动画效果的优化方法(will-change属性的使用)
  18. 真正的高手,都有对抗“熵增”的底层思维
  19. 引文分析软件histcite简介(中科大 罗昭锋)
  20. 【STM8S】STM8S之内外部16M晶振

热门文章

  1. java.lang.IllegalArgumentException: Bucket “xxxx“ 名称无效。Bucket 命名规范:1)只能包括小写字母,数字和短横线(-);2)必须以小写字母或者数
  2. java swing mysql项目_java swing mysql 实现的家庭收支管理系统项目源码
  3. 应用逻辑:haskell生成有理数集合
  4. 如何让mysql榨干电脑性能_榨干多核CPU?这个方法你必须试试!
  5. win7打开远程计算机,win7系统开启远程桌面实现远程连接图文教程
  6. 全球与中国低压电气机柜市场现状及未来发展趋势(2022)
  7. 电脑数据丢失如何恢复
  8. SDK 的下载及安装教程
  9. matlab 和 numpy 矩阵乘法异同
  10. Unity 一笔画的玩法实现