本系列博客汇总在这里:JavaWeb_servlet 汇总
目录
- Servlet 生命周期
Servlet 生命周期
javax.servlet.Servlet 接口中,有三个方法说明了 Servlet 的生命周期:
(1)void init(ServletConfig):创建后马上调用 init() 完成初始化;
(2)void service(ServletRequest,ServletResponse):每次处理请求时调用 service() 方法;
(3)void destroy():当 Tomcat 要销毁 Servlet 实例时,先调用 destroy() 方法。示例(细节操作参见上一篇,本节示例只是在上一节的基础上更换了 demo1 源码)
编码(完整源码见文末)
结果图说明
(1)Servlet 对象的实例默认情况下是在浏览器第一次调用 servlet 时候被创建的(可以修改其创建时机后续讲解)现在你应该已经清楚了,Servlet 的实例不由我们创建,Servlet 的方法不由我们来调用,这一切都是由 Tomcat 来完成!!!这就是说由 Tomcat 来管理 Servlet,而我们只需要去编写 Servlet 实现类,并将其部署到 web.xml 文件中去!
(2)再次提醒,只有这三个方法是生命周期中的方法。也就是说,生命周期方法会被 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());
}
}
如有错误,欢迎指正!