• 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。
  • 相关阅读:
    如何把一个一般的git库变成“裸库”?
    MacOSX下杀掉sudo进程
    nginx FastCGI错误Primary script unknown解决办法
    Lua继承userdata
    Unity图文混排
    C++轻量级跨平台文件系统API
    lua_next()
    重载方法匹配算法
    C++模板函数只能全特化不能偏特化
    xcode离线安装包下载
  • 原文地址:https://www.cnblogs.com/Junqiang/p/5466537.html
Copyright © 2020-2023  润新知