servlet的生命周期的理解
1.在servlet为客户端提供服务过程当中,在服务器内部只有一个servlet对象.
意思就是说多个浏览器端输入相同的网址,访问相同的servlet,tomcat只会new出一个servlet对象。
2.使用线程池的方式给浏览器端回应,线程池访问的都是同一个servlet对象。
3.tomcat让servlet存在到结束的全过程
加载 ClassLoader(当把我们编译好的类放入web容器中)
实例化 new (时间:第一次客户端请求)
初始化 init(ServletConfig)(只调用一次,时间new之后)
处理请求doget 或dopost(多线程方式处理)
退出服务 destroy (时间:web应用程序退出,重新加载,类的定义重新加载)
4.实例化时间代码验证(在构造方法加上输入字符)
当我们只有在浏览器端输入网址访问时它才出现
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;import java.io.IOException; import java.io.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class httpservlet extends HttpServlet { public httpservlet(){ System.out.println("new 一个对象"); } protected void doPost(HttpServletRequest req, HttpServletResponse resp){ try {doGet(req,resp); System.out.println("dopost"); }catch(IOException e){} } protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException{ System.out.println("doget"); PrintWriter out =resp.getWriter(); out.println("<html><head><head/><body><h1>hello<h1><body/><html/>"); out.flush(); out.close(); } }
5.new一个servlet对象的验证
同样第二次输入上述链接,你会发现没有构造方法里面的字符了
6.验证加载类的时机
当你重新定义类,替换掉以前类时,你会在tomcat服务器端发现提示:加载一个类(我的没有提示)
7.验证初始化的时机
跟验证new一样,它是new后面的
8.验证退出请求的时机
当你重启web服务器,然后在浏览器端访问资源,会发现构造方法又重新执行了,说明上一个对象被destroy了。
(重新将类放入tomcat中,然后tomcat服务器会提示重新加载,然后destroy你原来的servlet对象)
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;import java.io.IOException; import java.io.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class httpservlet extends HttpServlet { public httpservlet(){ System.out.println("new 一个对象"); } protected void doPost(HttpServletRequest req, HttpServletResponse resp){ try {doGet(req,resp); System.out.println("dopost"); }catch(IOException e){} } protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException{ System.out.println("doget"); PrintWriter out =resp.getWriter(); out.println("<html><head><head/><body><h1>hello<h1><body/><html/>"); out.flush(); out.close(); } public void destroy(){ System.out.println("destroy"); } }