关于servlet生命周期和相关接口的理解

1、实例化创建servlet对象

    由容器负责创建,默认情况下,请求到达容器,容器检检查是否有对象,没有则创建;对象创建的时机也可以在web.xml设置。

2、初始化

    如何初始化参数:

涉及servlet接口规定了5种方法,与生命周期相关的三种方法分别是:

init(ServletConfig config);service(ServletRequest req,ServletResponse res);destroy();

我们写的servlet类继承了HttpServlet抽象类,而HttpServlet继承了GenericServlet抽象类,GennericServlet抽象实现servlet接口,重写了init(ServletConfig config)和destroy()方法,注意抽象类并不一定要实现接口所有的方法。

其中GennericServle重写的init(ServletConfig config):

关于servlet生命周期和相关接口的理解_第1张图片

但是我们写的子类如何获取父类方法中局部变量?定义了全局变量ServletConfig config,但是被private修饰了,

关于servlet生命周期和相关接口的理解_第2张图片

所以不能直接被子类使用,幸运的是GennericServlet类提供了public修饰getConfig()方法,子类可以直接this.getConfig()获取该对象,取得web.xml文件配置的初始化参数。

如:

ServletConfig config=getServletConfig();
String value=config.getInitParameter("version");

其中version是在web.xml文件配置的参数名。

 

 

3、就绪

容器调用service();在底层,容器会根据请求方式调用doGet()或者doPost()方法,因此作为子类,可以重写service();也可以重写doGet()或者doPost()。建议使用前者,因为可以处理get和post两种请求。

注意servlet接口定义的service方法是:service(ServletRequest req,ServletResponse res);而不是我们重写的service(HttpServletRequest req,HttpServletResponse res);那是因为在父类HttpServlet中有两个service方法。

关于servlet生命周期和相关接口的理解_第3张图片

关于servlet生命周期和相关接口的理解_第4张图片


4、销毁

 

容器调用destroy();容器会根据自身的算法,判断出需要销毁的servlet对象。参考垃圾回收机制,这样才能释放资源空间,防止内存泄露。

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(关于servlet生命周期和相关接口的理解)