在Servlet开发中,实现servlet有三种方式:1.实现javax.servlet.Servlet接口 2.继承javax.servlet.GenericServlet 3.继承javax.servlet.HttpServlet,其层次关系为:
一、servlet接口如下所示:
package javax.servlet; public interface Servlet { void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException; javax.servlet.ServletConfig getServletConfig(); void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException; java.lang.String getServletInfo(); void destroy(); }
其主要方法描述如下:
init:在servlet加载并实例化后首先调用,在servlet生命期间仅仅调用一次,所以我们可以再其中做一些初始化的工作,例如加载数据库驱动等操作
另外如果我们的servlet采用的是直接实现javax.servelet.Servlet接口的话,则需要定义一个变量来保存ServletConfig,以便在getServletConfig中使用
service: 每次浏览器调用服务的响应方法,一次调用执行一次,我们主要响应业务都在其中实现
destroy:在web服务器关闭或者重新加载web应用的时候才执行一次,用以释放一些相关资源,也是在其生命周期仅仅执行一次
getServletConfig:返回在init方法中保存的servletConfig变量
二 、GenericServlet类实现了javax.servlet.Servlet接口,实现了一些常用的功能,如上面提到在init方法中保存ServletConfig变量及在getServletConfig方法中返回等,如果我们从GenericServlet继承的话,仅仅需要重载其service方法
另外如果重载init做一些初始化的操作,则必须调用基类的init(super.init(serviceConfig);),否则不会保存servletConfig,在调用getServletConfig的时候返回null
三、HttpServlet根据http请求特点细化了service操作,也就是说在service方法中会根据http请求类型(get,post等)分别调用doGet,doPost等方法
另外同二如果我们重载init,一定要调用super.init