JavaWeb_servlet

Servlet 生命周期

● javax.servlet.Servlet 接口中,有三个方法说明了 Servlet 的生命周期:

  • void init(ServletConfig):创建后马上调用 init() 完成初始化;
  • void service(ServletRequest,ServletResponse):每次处理请求时调用 service() 方法;
  • void destroy():当 Tomcat 要销毁 Servlet 实例时,先调用 destroy() 方法。

● 示例(细节操作参见上一篇)(本节示例只是在上一节的基础上更换了 demo1 源码)

  • 编码(完整源码见文末)
    JavaWeb_servlet(3)_ Servlet 生命周期
  • 结果
    JavaWeb_servlet(3)_ Servlet 生命周期
    JavaWeb_servlet(3)_ Servlet 生命周期

● 说明

  • Servlet 对象的实例默认情况下是在浏览器第一次调用 servlet 时候被创建的(可以修改其创建时机后续讲解)现在你应该已经清楚了,Servlet 的实例不由我们创建,Servlet 的方法不由我们来调用,这一切都是由 Tomcat 来完成!!!这就是说由 Tomcat 来管理 Servlet,而我们只需要去编写 Servlet 实现类,并将其部署到 web.xml 文件中去!
  • 再次提醒,只有这三个方法是生命周期中的方法。也就是说,生命周期方法会被 Tomcat 在不同的时间点来调用!而其它方法就不会被调用了!!!如果你在自己写的 Servlet 中添加了其他方法,那么 Tomcat 也是不会去调用它们的!但你可以让生命周期方法去调用你自己写的方法就OK了!

以上操作源码(web.xml同上一篇):

package com.wyx.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 
 * @author renliang servlet的生命周期 ServletDemo2对象实例并不是由我们手动的创建,而是web容器给给我们创建(面试常问)
 *       
 *         void init(ServletConfig config) :默认情况当servlet被第一次访问的时候init会被调用,
 *         									说明servlet的实例默认情况下是第一次被访问的时候创建的(可以改的),
 *         									第二次往后都不会再被调用,servlet的实例是单例的 void
 *         
 *         service(ServletRequest req, ServletResponse res) :每次请求来的时候都会被调用 void
 *         destroy() :当ServletDemo2销毁时被调用
 * 
 */
public class demo1 implements Servlet
{

	public void destroy()
	{
		System.out.println("destroy 被调用...");
	}

	public ServletConfig getServletConfig()
	{
		return null;
	}

	public String getServletInfo()
	{
		return null;
	}

	public void init(ServletConfig arg0) throws ServletException
	{
		System.out.println("init方法被调用...");
	}

	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException
	{
		System.out.println("service方法被调用...");
		response.getOutputStream().write("<font color='red'>service 方法被调用...</font>".getBytes());
	}
}

如有错误,欢迎指正!

相关文章: