• <li id="oiayd"><ruby id="oiayd"></ruby></li>

    <acronym id="oiayd"><strong id="oiayd"></strong></acronym>

    <acronym id="oiayd"></acronym>
    <track id="oiayd"><ruby id="oiayd"></ruby></track>
  • <track id="oiayd"><ruby id="oiayd"><menu id="oiayd"></menu></ruby></track>

  • 400-650-7353
    您所在的位置:首页 > IT干货资料 > java > 【Java基础知识】Servlet学习之Servlet运行机制(五)

    【Java基础知识】Servlet学习之Servlet运行机制(五)

    • 发布: java培训
    • 来源:Java培训干货资料
    • 2021-11-29 19:49:12
    • 阅读()
    • 分享
    • 手机端入口

    一、Servlet运行机制

    Servlet是运行在Servlet容器中的服务器端的用来响应用户请求的服务器小程序,它的生命周期由Servlet容器负责管理。

    Servlet在Servlet容器中,以单例模式存在,即:在Servlet生命周期中,Servlet容器只创建一个Servlet对象,所有的客户请求都使用这一个Servlet对象来响应。

    当用户请求到达时,Servlet容器解析请求,检查内存中是否已存在用户要访问的Servlet对象;若存在,则直接使用该Servlet对象处理用户请求;若不存在,则加载Servlet,创建Servlet对象,并实例化、初始化,然后使用这个Servlet对象处理用户请求。

    在Servlet整个生命周期中,只实例化和初始化一次,即:只有一个Servlet实例对象为客户请求提供服务。

    Servlet以单例模式运行,即使有多个用户同时访问Servlet时,Servlet容器中也只有一个Servlet实例对象存在。Servlet容器通过Servlet对象调用service()服务方法时,采用多线程的方式使用Servlet对象。即:Servlet容器会为每一个用户请求创建一个线程,由线程调用Servlet的service()方法为用户请求提供服务。

    在Servlet容器中,用一个线程池来管理使用Servlet对象的多个线程,线程池在初始化时,会创建一定数量的线程对象放在池子中,当需要时,直接获取线程对象并使用;使用后,线程对象归还线程池;以避免频繁创建线程、销毁线程对象,从而提高Servlet容器的性能。

    下图描述了Servlet的请求与响应过程:客户机向WEB服务器发送请求,WEB服务器收到请求之后,转发给Servlet容器,Servlet容器创建HttpServletRequest和HttpServletResponse两个对象,分别封装请求数据和响应数据,并将它们传给线程池中分配的线程,该线程访问Servlet处理用户请求,处理完毕,将结果返回Servlet容器,线程归还线程池;最后,WEB服务器负责将响应结果发送回客户机。

    二、Servlet生命周期

    在Java中,任何对象都有生命周期。

    Servlet生命周期是指Servlet实例创建到Servlet实例销毁的过程。按照功能的不同,大致可以将Servlet的生命周期分为三个阶段:Servlet实例创建与初始化阶段、运行阶段、销毁阶段。

    在Servlet生命周期中,每个阶段用不同的方法,完成各自的任务。

    初始化阶段:调用Servlet的构造器和init()方法进行实例化和初始化。

    运行阶段:调用Servlet的service()方法处理客户请求。

    销毁阶段:调用Servlet的destroy()方法结束Servlet的运行。

    最后,Servlet对象由Java虚拟机JVM的垃圾回收器进行垃圾回收。

    1、初始化阶段

    Servlet实例是Servlet容器创建的,并且在整个Servlet生命周期中,只创建一个。

    Servlet容器会根据Servlet在web.xml配置文件中的参数值,或者@WebServlet注解中的loadOnStartup属性值,决定在哪个时候创建Servlet实例。

    如果参数值或loadOnStartup属性值大于等于0,则Servlet容器在应用程序启动时,加载Servlet字节码文件,并调用Servlet的构造器和init()方法创建Servlet实例;否则,在客户第一次访问Servlet时,Servlet容器调用Servlet的构造器和init()方法创建Servlet实例。

    在整个Servlet生命周期中,Servlet对象只实例化和初始化一次,init()方法只被调用一次。

    init()代码示例如下:

    public void init(ServletConfig arg0) throws ServletException {

    // TODO Auto-generated method stub

    }

    2、运行阶段

    运行阶段是Servlet生命周期中最重要的一个阶段,在这个阶段,Servlet容器会反复调用Servlet的service()方法处理客户请求。

    当Servlet容器接收到用户请求后,会为每一个用户请求创建代表请求的ServletRequest对象和代表响应的ServletResponse对象,在调用service()方法处理用户请求时,将它们作为参数传递给Servlet的service()方法。service()方法通过ServletRequest对象,获取客户请求信息;通过ServletResponse对象,生成响应结果。

    在整个Servlet生命周期中,对于Servlet的每一次用户访问请求,Servlet容器都会调用一次Servlet的service()方法,并且创建新的ServletRequest对象和ServletResponse对象,即:service()方法在 Servlet的整个生命周期中,会被多次调用。

    service()代码示例如下:

    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {

    // TODO Auto-generated method stub

    arg1.setContentType("text/html; charset=utf-8");

    arg1.getWriter().println("这是通过实现Servlet接口创建的Servlet程序");

    }

    3、销毁阶段

    当WEB服务器关闭(Servlet容器也就终止了)或WEB应用程序被移出Servlet容器时,Servlet会随着WEB应用程序的关闭而销毁。

    Servlet容器调用Servlet的destroy()方法,销毁Servlet对象,释放Servlet对象占用的资源。

    在整个Servlet生命周期中,Servlet对象只销毁一次,于是,destroy()方法只被Servlet容器调用一次。

    特别地:Servlet对象一旦创建,就一直驻留在内存中等待客户的访问,直到WEB服务器关闭或WEB应用程序被移出Servlet容器时,Servlet对象才会被销毁。

    destroy()代码示例如下:

    public void destroy() {

    // TODO Auto-generated method stub

    }

    文章“【Java基础知识】Servlet学习之Servlet运行机制(五)”已帮助

    >>本文地址:http://www.seyoho.com/zhuanye/2021/71019.html

    THE END  

    声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

    1 您的年龄

    2 您的学历

    3 您更想做哪个方向的工作?

    获取测试结果
    • 大前端大前端
    • 大数据大数据
    • 互联网营销互联网营销
    • JavaJava
    • Linux云计算Linux
    • Python+人工智能Python
    • 嵌入式物联网嵌入式
    • 全域电商运营全域电商运营
    • 软件测试软件测试
    • 室内设计室内设计
    • 平面设计平面设计
    • 电商设计电商设计
    • 网页设计网页设计
    • 全链路UI/UE设计UI设计
    • VR/AR游戏开发VR/AR
    • 网络安全网络安全
    • 新媒体与短视频运营新媒体
    • 直播带货直播带货
    • 智能机器人软件开发智能机器人
     

    快速通道fast track

    近期开班时间TIME

    日韩一级a片无卡顿

  • <li id="oiayd"><ruby id="oiayd"></ruby></li>

    <acronym id="oiayd"><strong id="oiayd"></strong></acronym>

    <acronym id="oiayd"></acronym>
    <track id="oiayd"><ruby id="oiayd"></ruby></track>
  • <track id="oiayd"><ruby id="oiayd"><menu id="oiayd"></menu></ruby></track>