1、什么是Servlet的生命周期
容器如何创建Servlet对象、如何为Servlet对象分配资源、如何调用Servlet对象的方法来处理请求、以及如何销毁Servlet对象的整个过程
2、声明周期的四个阶段
阶段一:实例化
什么是实例化?
容器调用Servlet的构造器,创建一个Servlet对象。
什么时候实例化?
情形一:开始容器里面没有Servlet,收到请求后创建Servlet对象
情形二:容器启动之后就立即创建相应的实例
阶段二:初始化
什么是初始化?
容器在创建好Servlet对象之后,会立即调用该对象的init方法。
一般情况下,我们不会写init方法,因为GenericServlet已经提供了init方法的实现(将容器传递过来的ServletConfig对象保存下来,并且,提供了getServletConfig方法来获得ServletConfig对象)。
init方法只会执行一次
Servlet的初始化参数如何配置
<init-param>
<param-name>company</param-name>
<param-name>北京达内</param-value>
</init-param>
如何读取Servlet的初始化参数?
String ServletConfig.getInitParameter("company")
阶段三:就绪
容器收到请求之后调用Servlet对象的service()来处理请求
阶段四:销毁
容器依据自身的算法删除Servlet对象,删除前会调用destroy()
只会执行一次
可以override destroy方法来实现自己的处理逻辑
应用程序卸载时一定会调用destroy方法
3、Servlet核心接口与类
Servlet接口
GenericServlet抽闲类
HttpServlet抽象类
4、Servlet接口
Servlet接口 主要包括
1>init(ServletConfig config)方法
2>service(ServletRequest req,ServletResponse res)方法
ServletRequest是HttpServletRequest的父接口
ServletResponse是HttpServletResponse的父接口
3>destroy方法
5、Servlet核心类
GenericServlet抽象类实现了servlet接口的部分方法(init和destroy方法)
HttpServlet抽象类继承了GenericServlet实现了service方法
查看GenericServlet中init方法源代码,init方法在service方法调用之前调用。容器会先创建ServletConfig对象,然后把config对象传给init。
init()执行完后,ServletConfig对象消失,所以this.config=config可保存对象引用
ServletConfig可以访问Servlet初始化的参数
6、什么是Servlet上下文
容器启动之后,会为每一个Web应用创建唯一的一个符合ServletContext接口要求的对象,该对象就是Servlet上下文。
特点:
唯一性(一个Web应用对应一个servlet)
一直存在(只要容器不关闭,应用没有被卸载删除,servlet上下文就一直存在)
7、如何获取Servlet上下文
方式一:
通过GenericServlet提供的 getServletContext()
方式二:
通过ServletConfig提供的 getServletContext()
方式三
通过HttpSession提供的 getServletContext()
方式四:
通过FilterConfig提供的 getServletContext()
8、Servlet上下文的作用及特点
作用一
使用setAttribute绑定数据
作用二
使用removeAttribute移除绑定数据
作用三
使用getAttribute获取绑定数据
特点
servlet上下文绑定的数据可以被整个应用上的所有组件共享,并且一直可以访问