zoukankan      html  css  js  c++  java
  • servlet生命周期、工作原理

    Servlet 生命周期:Servlet 加载--->实例化并初始化--->服务--->销毁。

    1. servlet加载:当容器启动的时候加载(或第一次访问servlet时加载);可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet
    2. init():在Servlet的生命周期中,仅执行一次init()方法。在服务器装入Servlet时,实例化servlet,并调用init()方法初始化。
    3. service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的 Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应” (ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法 相应的do功能。
    4. destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资 源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

    servlet的工作原理

    1. browser向servlet容器(tomcat)发送一个请求,容器将请求封装进httpRequest对象,同时new 一个httpResponse对象,将这两个对象传递给servlet的service(request,response)方法,service方法进行业务处理,并将结果set进response对象,容器解封httpRequest对象、httpResponse对象,对jsp进行渲染,将结果返回给browser;
    2. 自定义servlet,必须实现servlet接口,servlet接口定义了5个方法分别是getServletConfig()、getServletInfo()、init(ServletConfig arg0)、service(ServletRequest arg0, ServletResponse arg1)、destroy()方法。容器加载servlet时会调用init()方法,容器卸载时会调用destroy()方法,当用户发出请求时会调用service()方法。httpServlet实现了servlet接口,只暴露出dopost(),doget()方法,一般我们只要继承httpservlet就可以了。
    3. servlet和GenericServlet是不特定任何协议的,而httpServlet是特定http协议的类,所以httpServlet实现了service方法,并将servletRequest和servletResponse强转成httpRequest和httpReponse;

    servlet创建时机:

    1. servlet容器启动时读取web.xml配置文件的信息,根据配置<load-on-startup>1</load-on-startup>来决定何时加载servlet.
    2. 如果该值是一个负数或元素不存在,容器是空闲的时候加载。
    3. 如果该值是一个正整数或0,容器必须加载和初始化servlet。
  • 相关阅读:
    IBM斥资340亿美元收购红帽
    单例模式讨论篇:单例模式与垃圾回收
    Xshell拖拽上传文件插件
    理想的程序员
    Android学习之路
    springboot更改启动logo,佛祖保佑 ,永不宕机 , 永无BUG
    Java多线程实现的四种方式
    IntelliJ IDEA
    Jrebel最新激活破解方式(持续更新)
    PyCharm 2018.2.4永久破解办法
  • 原文地址:https://www.cnblogs.com/Junqiang/p/5466537.html
Copyright © 2011-2022 走看看