Servlet及其生命周期

今天开始对Servlet进行一个较为全面深入的学习,并将学习所得记录于此,与君共勉。

思维导图如下:

Servlet及其生命周期_第1张图片

接下来开始对各部分进行介绍总结。

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体系结构

Servlet及其生命周期_第2张图片

6.1servlet接口

看下servlet接口的源码

Servlet及其生命周期_第3张图片

接口总共定义了五个方法,其中init() service() destroy()是servlet的生命周期方法,代表了servlet从初始化到响应请求再到摧毁的过程。上文已经介绍,这里不再赘述。

getServletConfig() 方法

返回一个 ServletConfig 对象,该对象用来返回初始化参数和 ServletContext。ServletContext 接口提供有关 servlet 的环境信息。

getServletInfo() 方法

是一个可选的方法,它提供有关 servlet 的信息,如作者、版本、版权。

6.2其他接口待补充

7.HttpServlet类

在实际开发中,一般都是通过继承HttpServlet类的方式去实现Servlet程序。这里对其进行简单介绍

Servlet及其生命周期_第4张图片

 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

 

 

 

 

         

 

 

你可能感兴趣的:(Java,servlet)