1、生命周期
servlet是一个单实例 多线程的程序
servlet的生命周期
【1】类加载
"com.bjsxt.servlet.LifeServlet"
Class clazz= Class.forName("com.bjsxt.servlet.LifeServlet");
【2】实例化 (离不开反射)
Object obj= clazz.newInstance();
【3】 初始化(离不开反射)
【4】服务请求(service)(离不开反射)
【5】 销毁操作(离不开反射)
2、类加载的时机
【1】默认的情况是第一次访问servlet的时候进行类加载
【2】<load-on-startup>0</load-on-startup>(当启动服务器时候加载) 数字越小加载的时机越往前
3、代码实现
//实例化方法 执行一次 public LifeServlet(){
System.out.println("LifeServlet.LifeServlet()"); } //请求服务---每一次请求都会执行 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("LifeServlet.doGet()"); } //请求服务---每一次请求都会执行 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("LifeServlet.doPost()"); } //判断调用doget还是dopost--执行多次 @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获得传递的方法名成---GET/POST String method = req.getMethod(); System.out.println(method); if("GET".equals(method)){ doGet(req, resp); }else if("POST".equals(method)){ doPost(req, resp); }else { System.out.println("执行其他的方法"); } } //销毁操作 关闭服务器执行一次 @Override public void destroy() { System.out.println("LifeServlet.destroy()"); }
//初始化方法 ----执行一次 @Override public void init() throws ServletException { System.out.println("LifeServlet.init()"); }
} |