Servlet生命周期
1.什么是servlet生命周期
servlet容器创建servlet对象,到servlet对象销毁这个过程称之为servlet生命周期。
2.生命周期如下
2-1:实例化
a.什么时候实例化?
情况1:容器收到请求后创建servlet对象
情况2:启动容器之后立刻创建servlet对象(需要配置文件)
以上两种情况容器调用Servlet的构造器创建对象。
b.创建了几个实例?
容器之创建了一个实例。
2-2:初始化
a.什么是初始化?
容器调用servlet的init方法(该方法只会执行一次)
b.GenericServlet已经提供了init方法的实现
c.如何实现自己的初始化处理逻辑?
只要重写GenericServlet的init方法(不带有参数的init方法)
d.初始化参数
1.配置初始化参数
2.使用servletConfig提供的genInitParpameter方法来读取初始化参数
2-3:就绪(调用servlet方法)
容器收到请求之后调用servlet的service方法来处理。
2-4:销毁
genericServlet提供的destory方法在容器删除servlet对象之前会调用destroy方法实现销毁功能。
3.代码演示
3.1整个生命周期
public class OneServlet extends HttpServlet {
//1.创建servlet实例
public OneServlet(){
System.out.println("OneServlet创建了对象");
}
//2.通过重写GenericServlet的init方法来实现servlet的初始化逻辑
public void init(){
System.out.println("OneServlet的初始化");
//获取局部初始化参数
String value=getInitParameter("UserName");
System.out.println(value);
}
//3.初始化service方法
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("OneServlet执行了service方法");
}
//4.销毁:通过重写GenericServlet中的destory,实现销毁
@Override
public void destroy(){
System.out.println("OneServlet对象销毁了");
}
//获取全局的初始化参数
@Override
public void init(ServletConfig config) throws ServletException {
String value=config.getServletContext().getInitParameter("password");
System.out.println("全局的参数:"+value);
}
}
3.2创建实例
1.容器启动时创建实例
<!--
配置启动加载:容器启动之后会立即创建响应的实例,
文件的值大于零,值越小,优先级越高(优先被创建实例)
-->
<load-on-startup>1</load-on-startup>
当启动容器后:
2.局部和全局初始化参数
<!--局部初始化参数-->
<init-param>
<param-name>UserName</param-name>
<param-value>admin</param-value>
</init-param>
//2.通过重写GenericServlet的init方法来实现servlet的初始化逻辑
public void init(){
System.out.println("OneServlet的初始化");
//获取局部初始化参数
String value=getInitParameter("UserName");
System.out.println(value);
}
局部初始化参数要写在标签里面
<!--全局的初始化参数-->
<context-param>
<param-name>password</param-name>
<param-value>123654</param-value>
</context-param>
//获取全局的初始化参数
@Override
public void init(ServletConfig config) throws ServletException {
String value=config.getServletContext().getInitParameter("password");
System.out.println("全局的参数:"+value);
}
全局初始化参数写在外面
3.就绪(调用servlet方法)
//3.初始化service方法
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("OneServlet执行了service方法");
}
4.销毁
//4.销毁:通过重写GenericServlet中的destory,实现销毁
@Override
public void destroy(){
System.out.println("OneServlet对象销毁了");
}
当停止容器运行后,会执行此方法,表示该servlet销毁。
4.总结
Servlet生命周期分为4部分:创建实例->初始化->就绪->销毁