servlet是一个实现了servlet接口的特殊类。
如果没有实现servlet接口(继承实现servlet接口的类也算),在url进行访问时,仍然能够实例化这个类,只是不能转化为servlet,
<span style="color:#ff0000;">java.lang.ClassCastException: servlet.ServletLifeCycle1 cannot be cast to javax.servlet.Servlet</span>
* servlet的生命周期:
* 1。类加载(把class文件load到内存中)* 2。实例化(创建该servlet的一个对象,一个servlet只创建一个对象)
* 3。初始化(调用init方法进行初始化)
* 4。提供服务(当有请求访问的时候调用service方法,httpservlet是doget dopost等。
* 5。消亡(当webapp停掉的时候,才会调用destroy方法销毁实例)
测试代码:
public class ServletLifeCycle extends HttpServlet{
public ServletLifeCycle(){
System.out.println("construct");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
}
@Override
public void destroy() {
System.out.println("destroy");
}
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
}
}
当启动服务器后,进行页面访问,顺序为:
construct
init
doGet
当再次访问时,只增加打印:
doGet
最后停止服务后:
destroy
servlet实例化的一个对象,会一直存在与服务器的内存中,直到应用停止,才消亡。