1.2 Servlet

1.2 Servlet

Servlet接口中定义了以下5个方法:

方法 描述
void init(ServletConfig config) throws ServletException 初始化方法
void service(ServletRequest request,ServletResponse response) throws ServletException, java.io.IOException 响应请求方法
void destroy() 销毁Servlet
java.lang.String getServletInfo() 返回Servlet的描述信息
ServletConfig getServletConfig() 返回由Servlet容器传给init方法的ServletConfig对象

注意,编写Java方法签名时,如果方法的返回值类型或者抛出的异常类型和定义这个方法的类不再同一个包下,则返回值类型或异常类型要使用类全名。 正因为如此,在service方法的签名中,由于javax.servlet.ServletException这个类与当前类Servlet位于同一个包中,所以ServletException,可以不用写类全名,而java.io.Exception和当前类javax.servlet.Servlet,不再同一个包下,所以Exception类要写完整的名称。

生命周期方法

initservicedestroy是生命周期方法。Servlet容器根据以下规则调用这3个方法:

  • init方法,当该Servlet第一次被请求时,Servlet容器会调用这个方法。这个方法只调用这一次,在后续请求中将不会再被调用。我们可以利用这个方法执行相应的初始化工作。 调用这个方法时,Servlet容器会传入一个 ServletConfig对象的引用作为init方法的参数。一般来说,你会在init方法体中把ServletConfig对象引用赋给一个类变量。
  • service方法,每当请求Servlet时,Servlet容器就会调用这个service方法。当第一次请求Servlet时,Servlet容器要同时调用init方法和service方法。后续的请求将只调用service方法。
  • destroy方法,当要销毁Servlet时,Servlet容器就会调用这个方法。当要卸载应用程序,或者当要关闭 Servlet容器时,就会发生这种情况。一般会在这个方法中编写清除代码。

非生命周期方法

Servlet中的另外两个方法是非生命周期方法,即 getServletInfogetServletConfig方法:

  • getServletInfo方法,这个方法会返回Servlet的描述。你可以返回有用的或者为null的任意字符串。
  • getServletConfig方法,这个方法会返回由Servlet容器传给init方法的ServletConfig对象。但是,为了让 getServletConfig方法返回一个非null值,必须将传给init 方法的ServletConfig赋给一个类变量。 ServletConfig将在本章的1.6节中讲解。

注意线程安全性。**Servlet实例会被一个应用程序中的所有用户共享**,因此不建议使用类级变量,除非它们是只读的,或者是java.util.concurrent.atomic包的成员。 下一节“编写基础的Servlet应用程序”将介绍如何编写Servlet实现。