- 前言
- 一、生命周期定义
- 二、生命周期方法
- 1.Init()
- 2.service()
- 3.doGet()
- 4.doPost()
- 5.destory()
- 三、代码展示
前言
简单了解了Servlet是用来干什么后,我开始了其生命周期的学习,我的学习心得可能有不足之处,还请大佬多多指正。
一、生命周期定义
Servlet生命周期可被定义为从创建直到毁灭的整个过程,即加载类–>实例化(为对象分配空间)–>初始化(init())–>请求处理(service())–>销毁(destroy())。
二、生命周期方法由于加载阶段无法观察,但是初始化、服务、销毁阶段是可以观察到的。所以接下来对这三个阶段的方法展开描述。
1.Init()在一个Servlet的生命周期中,init方法只会被执行一次,之后无论用户执行多少次请求,都不会在调用该方法。
其定义如下:
public void init() throws ServletException {
// 初始化
}
init()方法通常负责简单的创建或者加载一些数据,而这些数据将用于该Servlet的整个生命周期中。
2.service()当一个客户发出请求时,实际处理工作全部由service方法来完成,它用来处理客户端的请求,并生成格式化的数据返回给客户端。
每一次请求服务器都会开启一个新的线程并执行一次service方法,其根据客户端的请求类型,调用doGet、doPost等方法。
其定义如下:
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException{
}
注:service() 方法由容器调用,所以我们不用对 其做任何动作,我们只需根据来自客户端的请求类型来重写doGet() 方法或doPost() 方法即可。
3.doGet()doGet() 方法用来处理get请求,get请求来自于一个url的正常请求,或者来自于一个未指定method的html表单。
其定义如下:
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
}
4.doPost()
doPost() 方法处理post请求,post请求来自于一个特别指定了method为post的html表单。
其定义如下:
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
}
5.destory()
destroy() 方法只会被调用一次,在Servlet生命周期结束时被调用。调用了destroy()方法后,当前servlet实例将会被标记为回收垃圾,会对servlet实例进行清除处理。
其定义如下:
public void destroy() {
// 销毁
}
三、代码展示
public class LifeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private int count = 0;
private int count1 = 0;
private int count2 = 0;
public void init() throws ServletException{
count = 0;
count1 = 0;
count2 = 0;
System.out.println("在init中完成计数器的初始化");
System.out.println(count);//chaqi
}
public void destroy() {
System.out.println("该Servlet共进行"+count1+"次doGet方法");//chaqi
System.out.println("该Servlet共进行"+count2+"次doPost方法");//chaqi
System.out.println("Servlet已经释放");
}
public LifeServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
count++;
count1++;//chaqi
out.println("这个Servlet已经被访问了"+count+"次了!");
System.out.println("该Servlet的doGet方法被执行了一次");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
count2++;//chaqi
doGet(request, response);
System.out.println("该Servlet的doPost方法被执行了一次");
}
}
运行后日志如下:



