精华内容
下载资源
问答
  • servlet生命周期
    千次阅读
    2021-03-06 22:42:07

    小伙伴们知道servlet吗?这次我们要说的是java中的servlet,小伙伴们知道servlet的声明周期都包括哪些吗?下面就听小编介绍介绍吧。

    Servlet生命周期包含哪些?

    我们要了解,一个Servlet生命周期一共分为三个阶段:

    一、初始化阶段 调用init()方法

    一般在下列场景Servlet容器会装载Servlet:

    1)、Servlet容器启动时自动装载某些Servlet时,实现它只需要在web.XML文件中的之间添加如下代码:1

    2)、Servlet容器启动后,客户首次向Servlet发送请求时

    3)、Servlet类文件被更新后,重新装载Servlet时

    Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在一个Servlet的整个生命周期内,init()方法只会被调用一次。

    二、响应客户请求阶段 调用service()方法

    一般对于用户到达Servlet的请求,Servlet容器会创建一个特定于这个请求的ServletRequest对象与ServletResponse对象,并调用Servlet的service方法。service方法会从ServletRequest对象获得客户请求信息,之后处理这个请求,并通过ServletResponse对象向客户返回响应信息。

    三、终止阶段 调用destroy()方法

    通常来说,当一个WEB应用被终止,或一个Servlet容器终止运行,或一个Servlet容器重新装载Servlet新实例时,Servlet容器会优先调用Servlet中的destroy()方法,这个destroy()方法能够释放掉Servlet所占用的资源。

    Servlet一般何时被创建?

    1)、在全部默认情况下,web客户端第一次请求访问某个Servlet的时候,WEB容器就会创建这个Servlet的实例。

    2)、在web.xml文件中,如果元素指定了子元素时,Servlet容器就会在启动web服务器时,按顺序创建并初始化Servlet对象。

    以上就是关于servlet周期的所有内容了,你了解了吗?如果需要了解更多相关servlet常见问题,就请关注奇Q工具网了解详情吧。

    推荐阅读:

    更多相关内容
  • Servlet生命周期

    2020-12-22 14:33:21
    Servlet生命周期Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:   Servlet 加载—>实例化—>服务—>销毁。   1.Servlet 通过调用 init () 方法进行初始化。 2....
  • servlet生命周期

    2017-08-27 22:56:53
    可以了解一下周期
  • Servlet生命周期

    2021-01-20 02:23:14
    1.创建:当用户第一次请求servlet映射的路径时,服务器会加载servlet并...该方法在servlet生命周期中,只会执行一次。 3.服务:每当用户有一个servlet请求,服务器会调用service()方法处理用户请求,哈哈,方法在生命周期
  • Servlet生命周期详解

    千次阅读 2021-12-27 15:33:24
    Servlet常见面试题及Servlet生命周期详解

    一、Servlet 是什么及作用?

    1、Servlet 是什么?

    Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性, 是运行在 Web 服务器或应用服务器上的程序。

    2、Servlet 的作用

    它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。主要功能在于收集来自网页表单的用户输入,交互式地浏览和生成数据,还可以生成动态Web内容。

    二、Servlet 的生命周期

    Servlet 生命周期可被定义为从创建直到毁灭的整个过程。

    三个步骤即:初始化------>处理请求------>销毁

    创建Servlet对象后---------->初始化(调用 init () 方法)--------->处理/响应客户端的请求(调用 service() 方法)--------->销毁(调用 destroy() 方法,最后由 JVM 的垃圾回收器进行垃圾回收)

    三、生命周期方法详解

    创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建。(默认)

    1. init() 方法

    调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次(初始化阶段)
    (1)init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,创建于用户第一次调用该 Servlet 的 URL 时,也可以指定 Servlet 在服务器第一次启动时被加载。

    (2)当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。

    (3)init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

    init 方法的定义如下:

    public void init() throws ServletException {
      // 初始化代码...
    }
    

    2. service() 方法

    响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的。(响应客户请求阶段)

    (1)service() 方法是执行实际任务的主要方法,处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

    (2)每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。

    (3)Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。由于在Servlet接口和GenericServlet中是没doGet,doPost等等这些方法的,HttpServlet中定义了这些方法,所以,我们每次定义一个Servlet的时候,都必须实现doGet或 doPost等这些方法。

    (4)service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法进行处理。

    service方法的定义如下:

    public void service(ServletRequest request,ServletResponse response) 
          throws ServletException, IOException{
    }
    

    由于service() 方法由容器调用,service 方法在适当的时候会调用 doGet、doPost、doPut、doDelete 等方法。所以,我们不用对 service() 方法做任何处理,只需要根据客户端的请求类型来重写 doGet() 或 doPost() 即可。

    3. doGet() 方法

    用于处理请求,方法是运行的在多线程状态下的。(响应客户请求阶段)

    doGet() 是服务请求中最常用的方法,用于处理请求,当URL的请求类型为GET请求 ,或者是一个未指定请求类型HTML表单,那么该请求将由 doGet() 方法处理。

    doGet方法的定义如下:

    public void doGet(HttpServletRequest request,HttpServletResponse response)
        throws ServletException, IOException {
        // Servlet 代码
    }
    

    4. doPost() 方法

    用于处理请求,方法是运行的在多线程状态下的。(响应客户请求阶段)

    doPost() 是服务请求中最常用的方法,用于处理请求,当请求来自一个特别指定了 请求类型为POST的 HTML 表单,那么该请求将由doPost() 方法处理。

    doPost方法的定义如下:

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        // Servlet 代码
    }
    

    5、destroy() 方法

    在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象。(终止阶段)

    (1)destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。

    (2)destroy() 方法可以让Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

    (3)在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。

    destroy 方法定义如下:

    public void destroy() {
        // 终止化代码...
      }
    

    四、生命周期图解

    理解了上面的内容再看周期图就会容易很多。图片来源于网络
    在这里插入图片描述

    展开全文
  • JavaEE——Servlet生命周期

    多人点赞 2022-08-20 14:12:43
    Servlet生命周期顾名思义就是从servlet出现到消亡(销毁)的全过程。

    一、引入Servlet

           要编写一个完善的 HTTP 服务器,以 HTTP/1.1 为例,需要考虑的包括:

    • 识别正确和错误的 HTTP 请求;
    • 识别正确和错误的 HTTP 头;
    • 复用 TCP 连接;
    • 复用线程;
    • IO 异常处理;

           这些基础工作需要耗费大量的时间,并且经过长期测试才能稳定运行。如果我们只需要输出一个简单的 HTML 页面,就不得不编写上千行底层代码,那就根本无法做到高效而可靠地开发

           因此,在 JavaEE 平台上,处理 TCP 连接,解析 HTTP 协议这些底层工作统统扔给现成的 Web 服务器去做,我们只需要把自己的应用程序跑在 Web 服务器上。为了实现这一目的, JavaEE 提供了 Servlet API ,我们使用 Servlet API 编写自己 的 Servlet 来处理 HTTP 请求, Web 服务器实现 Servlet API 接口,实现底层功能,在这我选择的服务器是Tomcat:由Apache开发的开源免费服务器。

           先来实现一个简单的Servlet:

    // HelloServlet继承HttpServlet
    // 处理HTTP协议的请求,并按照HTTP协议进行响应
    @WebServlet("/hello.do") 
    public class HelloServlet extends HttpServlet{
    	
    	//重写doGet方法:处理get方式的请求
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        	System.out.println("哎呀,被get到了");
        	
        }   
        
    }

           注意:所有的请求路径必须以“/”开头

           在浏览器输入 http://localhost:8080/项目名称/hello.do ,即可看到 HelloServlet 的输出。 为什么路径是 "/项目名称" 而不是 / ?因为一个 Web 服务器允许同时运行多个 Web App 。因此,第一级目录 /项目名称表示Web App的名字,后面的 /hello.do 才是我 们在 HelloServlet 中映射的路径。

    二、浅析Servlet

           浏览器发送请求的时候,还会有请求方法( HTTP Method ):即GET 、POST 、PUT 等不同类型的 请求。因此,要处理GET请求,我们要覆写 doGet() 方法;要处理POST请求,就需要覆写 doPost() 方法。如果没有覆写 doPost() 方法,那么 HelloServlet 能不能处理POST请求方式下的 /hello.do 请求呢? 我们查看一下 HttpServlet 的 doPost() 方法就一目了然了:它会直接返回 405 或 400 错误。

    400 Bad Request:表示客户端发送了一个错误的请求,例如参数无效;

    405 Method Not Allowed:代表请求的方式服务器不提供支持,不允许的方法

    三、Servlet生命周期

           在通过一个 URL 路径发起对一个 Servlet 请求的过程中,其本质是在调用执行 Servlet 实例的 doXXX() 方法。该 Servlet 实例创建和使用的过程,被称为Servlet 的生命周期。整个生命周期包括:实例化、初始化、服务、销毁。

    @WebServlet("/home.do")
    public class HomeServlet extends HttpServlet

    1 实例化:根据 Servlet 请求的路径(例如: home.do ),查找该 Servlet 的实例。如果实例不存在,则通过调用构造方法,完成 Servlet 实例的创建。重复的Servlet,只实例化一次。

    public HomeServlet() {
    		System.out.println("1.HomeServlet实例被创建");
    }

    2 初始化:通过该 Servlet 的实例,调用 init() 方法,执行初始化的逻辑。重复的Servlet,只初始化一次。

    @Override
    public void init() throws ServletException {
        System.out.println("2.HomeServlet实例初始化");
    }

    3 服务:通过该 Servlet 的实例,调用 service() 方法,如果子类没有重写该方法,则调用HttpServlet父类的 service() 方法,在父类的该方法中进行请求方式的判断,如果是GET请求,则调用 doGet() 方法;如果是 POST请求,则调用 doPost() 方法; 如果子类重写 doXXX() 方法,则调用子类重写后的 doXXX() 方法; 如果子类没有重写 doXXX() 方法,则调用父类的 doXXX() 方法,在父类的方法实现中,返回一个 405 状态码的错误页面。重复的Servlet,服务可以多次执行。

    4 销毁:服务器关闭或重启时,会销毁所有的Servlet实例,会调用Servlet实例的 destroy() 方法

    @Override
    public void destroy() {
    		System.out.println("4.HomeServlet实例被销毁");
    }

    小结:

    Servlet生命周期顾名思义就是从servlet出现到消亡(销毁)的全过程。

    主要分为以下几个阶段:
    加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求响应(服务阶段)—>销毁

    以上就是对于Servlet生命周期的分享,如有不当之处还请大家多多评论指正,喜欢文章的可以留下您的关注和点赞,一起学习,一起加油!

    展开全文
  • Servlet生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求,提供服务。在讨论Servlet生命周期之前,先让我们来看一下这几个方法:1. init()方法在Servlet的生命周期中,仅执行一次init()...

    Servlet生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求,提供服务。在讨论Servlet生命周期之前,先让我们来看一下这几个方法:

    1. init()方法

    在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init();

    2. service()方法

    它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

    3. destroy()方法

    仅执行一次,在服务器端停止且卸载Servlet时执行该方法,有点类似于C++的delete方法。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

    下面来谈谈Servlet的生命周期,Servlet的生命周期是由Servlet容器来控制的,它始于装入Web服务器的内存时,并在终止或重新装入Servlet时结束。这项操作一般是动态执行的。然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。

    在代码中,Servlet生命周期由接口javax.servlet.Servlet定义。所有的Java Servlet 必须直接或间接地实现javax.servlet.Servlet接口,这样才能在Servlet Engine上运行。javax.servlet.Servlet接口定义了一些方法,在Servlet 的生命周期中,这些方法会在特定时间按照一定的顺序被调用。

    0069d002594e1fe5ea3142a4f2962669.png

    Servlet生命周期

    加载和实例化Servlet

    我们来看一下Tomcat是如何加载的:

    1. 如果已配置自动装入选项,则在启动时自动载入。

    2. 在服务器启动时,客户机首次向Servlet发出请求。

    3. 重新装入Servlet时。

    当启动Servlet容器时,容器首先查找一个配置文件web.xml,这个文件中记录了可以提供服务的Servlet。每个Servlet被指定一个Servlet名,也就是这个Servlet实际对应的Java的完整class文件名。Servlet容器会为每个自动装入选项的Servlet创建一个实例。所以,每个Servlet类必须有一个公共的无参数的构造器。

    初始化

    当Servlet被实例化后,Servlet容器将调用每个Servlet的init方法来实例化每个实例,执行完init方法之后,Servlet处于“已初始化”状态。所以说,一旦Servlet被实例化,那么必将调用init方法。通过Servlet在启动后不立即初始化,而是收到请求后进行。在web.xml文件中用 ...... 对Servlet进行预先初始化。

    初始化失败后,执行init()方法抛出ServletException异常,Servlet对象将会被垃圾回收器回收,当客户端第一次访问服务器时加载Servlet实现类,创建对象并执行初始化方法。

    请求处理

    Servlet 被初始化以后,就处于能响应请求的就绪状态。每个对Servlet 的请求由一个Servlet Request 对象代表。Servlet 给客户端的响应由一个Servlet Response对象代表。对于到达客户机的请求,服务器创建特定于请求的一个“请求”对象和一个“响应”对象。调用service方法,这个方法可以调用其他方法来处理请求。

    Service方法会在服务器被访问时调用,Servlet对象的生命周期中service方法可能被多次调用,由于web-server启动后,服务器中公开的部分资源将处于网络中,当网络中的不同主机(客户端)并发访问服务器中的同一资源,服务器将开设多个线程处理不同的请求,多线程同时处理同一对象时,有可能出现数据并发访问的错误。

    另外注意,多线程难免同时处理同一变量时(如:对同一文件进行写操作),且有读写操作时,必须考虑是否加上同步,同步添加时,不要添加范围过大,有可能使程序变为纯粹的单线程,大大削弱了系统性能;只需要做到多个线程安全的访问相同的对象就可以了。

    卸载Servlet

    当服务器不再需要Servlet实例或重新装入时,会调用destroy方法,使用这个方法,Servlet可以释放掉所有在init方法申请的资源。一个Servlet实例一旦终止,就不允许再次被调用,只能等待被卸载。

    Servlet一旦终止,Servlet实例即可被垃圾回收,处于“卸载”状态,如果Servlet容器被关闭,Servlet也会被卸载,一个Servlet实例只能初始化一次,但可以创建多个相同的Servlet实例。如相同的Servlet可以在根据不同的配置参数连接不同的数据库时创建多个实例。

    PS:现在用的还不是很多,只能停留在理论的层面上,下面需要在实践中多使用Servlet,深入体会生命周期中各个方法的调用过程。

    参考:

    1. servlet的定义及其生命周期

    2. 图解Servlet生命周期

    展开全文
  • Servlet 生命周期概述

    2022-07-26 10:00:02
    Servlet 生命周期概述
  • 使用代码和流程图,十分详细的对Servlet生命周期进行了分析演示,会对Servlet生命周期有更深刻的认识
  • servlet生命周期.rar,servlet生命周期,3.bmp,1.bmp,4.bmp,2.bmp,5.bmp
  • Servlet生命周期的简单理解

    千次阅读 2022-04-20 13:22:02
    1.顾名思义,对servlet来说,它的生命周期指的就是从创建直到毁灭的整个过程。 其流程可简化为: Servlet 初始化后调用init ()方法。(该方法只在最开始只调用一次); Servlet 调用service()方法来处理客户端的...
  • Servlet生命周期是指Servlet实例从创建到响应客户请求,直至销毁的过程。
  • 本人学习Servlet的笔记。可以很好区别jsp与Servlet之间的区别
  • 简单完整讲述Servlet生命周期

    万次阅读 多人点赞 2020-08-24 11:47:46
    servlet生命周期过程 1.加载web.xml文件——当前只去解析xml文件,知道servlet的存在,此时还没有去创建servlet。 <!-- 声明servlet --> <servlet> <!-- servlet的别名 --> <servlet-name&...
  • Servlet生命周期分为三个阶段:init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用。(在Servlet容器中,一个Servlet实例只初始化一次),如果多个用户请求同一个URL,那么用户访问的是同一个Servlet...
  • servelt生命周期 主要分为三个阶段 1. 初始化阶段: 调用 init方法 2. 响应客户端请求:调用service 方法 3. 终止:调用 destroy方法 初始化阶段: ​ 容器(tomcat等)装载servlet servlet容器启动的时候,会自动...
  • 简述servlet生命周期

    2019-06-26 16:02:55
    servlet生命周期 主要有三个方法: init()初始化阶段 service()处理客户端请求阶段 destroy()终止阶段 初始化阶段: Servlet容器加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例并调用init()方法,init...
  • Java WEB 篇七 Servlet 生命周期
  • 主要为大家详细介绍了Servlet生命周期与工作原理的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,451
精华内容 46,180
关键字:

servlet生命周期