Servlet也是一个class。所以 在提供服务的时候需要new对象。十分重要的一点是,Servlet只会new一个对象对外提供服务,这是j2ee规定的标准。
现在实验如下:
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServletLife extends HttpServlet{
public TestServletLife(){
System.out.println("constructor!");
}
@Override
public void destroy() {
System.out.println("desdroy!");
}
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
}
}
访问http://localhost:8080/test/TestServletLife后可以看到后台tomcat的输出如下
constructor!
init
doGet
这很正常,先通过构造方法new一个对象,初始化后通过doGet方法对外提供服务。可是当刷新后。得到的是这样的输出:
constructor!
init
doGet
doGet
这就说明servlet在对外提供服务是始终只有一个对象,这个对象将永久的存在于我们的内存当中,除非server停止或者webapp销毁。