zoukankan      html  css  js  c++  java
  • Servlet的加载(执行过程,原理)和生命周期

    Web服务器(tomcat,即Servlet容器)装载,执行并管理Servlet的过程
    l 客户向服务器发送对页面的请求。Web服务器将请求转化为
    ServletRequest 对象
    l 如果Servlet还没有装入(加载),服务器就装入它。-------------servlet实例化成对象

    Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的
    从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,
    该Web服务器必须包含 支持Servlet的Java虚拟机。


    l 服务器把请求信息送给Servlet,给每一个请求创建一个执行的新线程。-------servlet初始化init()
    l Serlvet执行service()方法,处理这个请求,生成一个响应并传递给服务器。
    l 服务器(Servlet容器,tomcat)把响应返回给客户端

     

    Servlet 容器(即tomcat)创建 Servlet 的一个实例
    l Servlet 的生命周期就是指创建 Servlet 实例之后其存在的时间以及何时消

    l 生命周期的 3个方法为:

    init()

    当Servlet被Servlet容器载入后,程序的init()方法会被Servlet容器自动调用。
    因此如果希望web应用在启动时预先执行一些初始化的操作,就可以把实现这
    些操作的代码写在一个Servlet程序的init()中。一旦初始化方法完成,
    Servlet就能接收客户端的请求。

    一个Servlet在生命周期中只能初始化一次,所以对Servlet进行了修改,需要重
    启Tomcat。Tomcat配置中也可以配置自动重载,conf/ser ver.xml中的
    <context>元素有一个reloadable属性

    service()

    service()方法是抽象方法,
    GenericServlet的子类必须重写该方法。

    destroy()

    Sevlet生命周期:指Servlet对象在服务器内存中从创建到调用,到销毁的整个过程,主要研究该过程中哪些方法对我
    们的开发有用。
    (1)实例化:当客户端通过URL请求的时候,web容器根据web xm配置自动调用该Srvlet的构造方法,实例化对
    象。
    (2)初始化:通过该sevlet对象调用nit)方法,读取web xml中该servlet的配置信息,为sevice方法提供相关数据。
    (3)服务:通过该对象调用service(万方法,如果是继承HtpSevlet,则根据请求头信息中的请求方法,调用对应的
    doGet()/doPost()
    (4)销毁:不是在service0万方法调用完后,立即调用,而是由JVM来决定。当JVM需要销毁一些对象、 释放内存空间

    的时候,才会去调用该实例的destroy(方法。

    Servlet生命周期
    1.web服务器启动时,会对servlet进行实例化操作
    2.第一次访问servlet时,会调用init方法进行初始化操作,这个操作只进行一次
    3.每次访问servlet时,都会调用service方法进行真正的请求和响应
    4.web服务器关闭时,会调用destroy进行销毁操作
    5.在整个生命周期期间,init()和destroy()都各执行一次
    6.与web服务器同生共死

    Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web
    容器负责的。
    l 当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置
    文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再
    实例化该Servlet类,也就是有 多个线程在使用这个实例。
    l Servlet容器会自动使用线程池等技术来支持系统的运行

     

    HttpServlet在javax.servlet.http包中,它扩展了GenericServlet类。
    HttpServlet类定义了service()方法和六个doXXX()方法。
    l HttpServlet中处理客户端请求的业务逻辑代码是在doXXX()方法中实现,
    不是在Service()方法中实现的。 HttpServlet类对Service()方法做了重置,
    它实现的业务逻辑功能是:根据客户端HTTP请求类型决定应该调用哪个
    doXXX()方法来处理客户端的请求。

    如果选择HttpServlet为Servlet程序的父类,没有必要重置service()方法,
    而是应该根据Http请求的类型,重置相应的 doXXX()方法来处理客户端请
    求。

    web容器将http请求,封装在HttpServletRequest对象中,并产生一个
    HttpServletResponse对象,以这两个对象做为参数,调用doXXX()方
    法。

  • 相关阅读:
    【转】【WCF】WCF中客户端生成代理的两种方式
    【WPF】鼠标拖拽功能DragOver和Drop
    【转】【Android】Android不同版本下Notification创建方法
    【C#】获取电脑DPI
    【转】7Z命令行解压缩
    【转】【C#】ZIP、RAR 压缩与解压缩
    【MySQL】字符串截取之substring_index
    【转】【Java/Android】Intent的简介以及属性的详解
    友盟分享和cocos2dx符合重复duplicate symbol 解决方案
    slimphp中间件调用流程的理解
  • 原文地址:https://www.cnblogs.com/longmo666/p/13548888.html
Copyright © 2011-2022 走看看