原因是:一个servlet在它的init()方法中传递它的ServletConfig实例,在其他的方法中却不可以。当一个servlet在init()方法外需要调用config对象时就会产生问题。使用super.init(config)语句就解决了这个问题,该语句通过唤醒GenericServlet的init()方法, 该方法保存了这个config对象的一个引用,以备将来使用。那么,一个servlet是怎样利用这个保存的引用的呢?是通过自身唤醒方法。在执行中,GenericServlet类通过使用保存的引用,自身执行ServletConfig接口。换个说法,就是在调用super.init(config)语句后,一个servlet可以直接唤醒它自己的getInitParameter()方法。
如果没有调用 super.init(config)语句,任何使用 GenericServlet的 getInitParameter()方法的行为或者是调用 ServletConfig的方法都将会抛出NullPointerException的异常。所以每一个servlet的init ()方法的第一个语句都应该是super.init(config)。只有在一种情况下可以不这样做,如果这个servlet直接执行javax.servlet.Servlet接口,这种情况下则没有super.init().
本文出自 “小小菜的java学习日志” 博客,请务必保留此出处http://arthennala.blog.51cto.com/287631/64940