标签:
1 package cn.servlet.life; 2 import java.io.IOException; 3 4 import javax.servlet.ServletConfig; 5 import javax.servlet.ServletException; 6 import javax.servlet.ServletRequest; 7 import javax.servlet.ServletResponse; 8 import javax.servlet.http.HttpServlet; 9 10 public class LifeDemo extends HttpServlet { 11 12 /** 13 * 1.构造方法 14 */ 15 public LifeDemo(){ 16 System.out.println("1.servlet对象被创建了。"); 17 } 18 19 /** 20 * 2.init方法 21 */ 22 @Override 23 public void init(ServletConfig config) throws ServletException { 24 System.out.println("2.init方法被调用"); 25 } 26 27 /** 28 * 3.service方法 29 */ 30 @Override 31 public void service(ServletRequest req, ServletResponse res) 32 throws ServletException, IOException { 33 System.out.println("3.service方法被调用"); 34 } 35 36 /** 37 * 4.destroy方法 38 */ 39 @Override 40 public void destroy() { 41 System.out.println("4.servlet对象销毁了"); 42 } 43 44 45 }
1.servlet对象被创建了。
2.init方法被调用
3.service方法被调用
当再次访问这个Servlet时,输出结果如下,只有service()方法被调用。:
3.service方法被调用
注意:Tomcat是通过反射机制调用Servlet的无参构造器去初始化Servlet对象的。
----------------------------------------------------------------------------------------------------------------------------------------------
Servlet的继续体系:
在这个体系中,根接口是Servlet,直接的实现类是:GenericServlet, HttpServlet,这二个是都是抽象类,并且HttpServlet继承了GenericServlet类。
-------------------------------------------------------------------------
Servlet完成初始化后,Tomcat会传入的对象有:
重点是ServletConfig和ServletContext对象,
ServletConfig对象是在Servlet容器调用带参数的init()方法时传入的,是通过GenericServlet的源码得知的:
private transient ServletConfig config;
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
public void init() throws ServletException {
}
也就是说,Servlet容器调用init的带参数的方法,并且把ServletConfig对象传入了,这个带参数的init方法只是为了初始化ServletConfig对象的,在这个方法内部还调用了不带参数的init方法,这个方法是提供给使用者可以去覆盖的,带参数的方法一般不建议覆盖,否则GenericServlet中的init方法将不再被执行,也就得不到ServletConfig对象了。
注意,查看源码得知,HttpServlet中没有提供覆盖的init方法,HttpServlet继承了GenericServlet类,而我们自定义的Servlet类又继承了HttpServlet类,所以当我们自定义的Servlet不去覆盖GenericServlet中的带参数的init方法时,Tomcat将直接执行GenericServlet中的Init方法,并将ServletConfig对象传入了。
-----------------------------------------------------------------------------------------------
ServletConfig对象的作用:
主要是用于加载servlet的初始化参数。在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象)
标签:
原文地址:http://www.cnblogs.com/one-cool/p/5103846.html