文章目录
Servlet 的生命周期
一个 Servlet 的开始到死亡
1、示例代码
首先看以下的示例代码,这是一个最为普通的 Servlet 实现
import javax.servlet.*;
import java.io.IOException;
public class StudentServlet implements Servlet {
/**
* 无参构造
*/
public StudentServlet() {
System.out.println("无参构造方法执行了");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init 方法执行了");
}
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("service 方法执行了");
}
@Override
public void destroy() {
System.out.println("destroy 方法执行了");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}
1.1、测试1
然后开始使用 Tomcat 执行:
Tomcat输出了以下内容:
无参构造方法执行了
init 方法执行了
service 方法执行了
1.1.1、测试1 结论
得出结论:
- 1)Tomcat 执行的时候 首先会在用户访问 Servlet 的时候创建 该 Servlet 对象
- 2)然后 Tomcat 会调用 init 方法
- 3)之后调用 service 方法
1.2、测试2
然后我再次刷新 3次 网页:
Tomcat输出了以下内容:
service 方法执行了
service 方法执行了
service 方法执行了
1.2.1、测试2 结论
得出结论:
- Tomcat 执行的时候 首先会在用户访问 Servlet 的时候创建 该 Servlet 对象,然后,在创建的时候调用一次 init 方法,之后每次刷新都会调用 service 方法。(Tomcat 只会创建一次该对象,假单例模式)
1.3、测试3
最后我在 idea 里面关闭 Tomcat 的执行
Tomcat输出了以下内容:
destroy 方法执行了
1.3.1、测试3 结论
得出结论:
- 由此可见 Tomcat 会在 Servlet 对象销毁前调用 destroy 方法(因为如果不可能在对象销毁后调用,没有对象调用不了)
得出最终结论:
Tomcat 会在用户访问某个 Servlet 的时候创建该 Servlet 对象,执行无参构造方法,然后会在执行的时候调用一次 init 方法,之后每一次访问该 Servlet 的时候都是调用该 Servlet 的 Service 方法,最后在(Tomcat关闭) 对象销毁前 Tomcat 会调用一次 destroy方法(遗书)死亡前调用一次。
Servlet 方法调用顺序
不等用户访问先创建Servlet对象:
Tomcat 默认是当用户第一次访问 Servlet 的时候创建该Servlet对象。如果想不等待用户访问,在启动 Tomcat 的时候立即创建对象,如下:
在对应的Servlet xml 配置文件里面加上如下:
<load-on-startup>0</load-on-startup>
里面的参数是一个正整数,当有多个 Servlet 都配置了 ‘<load-on-startup>0</load-on-startup>’ 的时候,里面的参表示其创建对象的优先级,正整数越小,就越先创建对象。
如下为启动 Tomcat 的时候输出:(用户还未访问)
无参构造方法执行了
init 方法执行了
以上如果有任何问题还请及时指出,谢谢,希望对你有用