servlet相关知识点
servlet特征
- servlet是单例多线程的。
- 一个servlet实例只会执行一次无参构造器与init()方法,并且是在第一次访问时执行。
- 用户每提交一次对当前servlet的请求,就会执行一次service()方法。
- 一个servlet实例只会执行一次destroy()方法,在应用停止时执行。
- 由于servlet是单例多线程的,所以为了保证其线程安全性,一般情况下是不为servlet类定义可修改的成员变量的。因为每个线程均可修改这个成员变量,会出现线程安全问题。
- 默认情况下,servlet在web容器启动时是不会被实例化的。
由GenericServlet看java的多态
java程序的运行分为编译器和运行期。运行期的类型绑定称之为动态绑定。
在GenericServlet中实现了init(ServletConfig config)方法:
@Override
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
但是GenericServlet的子类也可能需要实现init(ServletConfig config)方法,在子类实现该方法的时候如果未调用super.init(config)方法,则会导致ServletConfig初始化失败。
所以GenericServlet添加了重载方法init()交给子类实现。
public void init() throws ServletException {
// NOOP by default
}
子类只需要实现init()方法,只需要关注自身业务实现即可。实现了代码的解耦。这里所用到的就是java的多态。