通过查看http://blog.csdn.net/wu_qing_man/archive/2007/01/18/1487123.aspx中的HelloWorld.java,可以发现:
l 它扩展一个名为HteepServlet的类。
l 它实现2个方法: doGet()和doPost()
1. Servlet的标志:javax.servlet.Servlet接口
一个Java类之所以可以作为一个Servlet,有一个突出的特点,这就是所有Servlet都必须实现javax.servlet.Servlet.Servlet接口。这个接口是容器(应用服务器)和servlet之间的合约。
l 所有servlet都必须实现的javax.servlet.servlet接口的方法:
n init() 容器调用这个方法来初始化servlet;
n destroy() 容器调用这个方法来指示servlet:它的使命已经结束了。
n getServletInfo() 容器或工具调用这个方法来得到有关Servlet的信息。返回值是一个串,其中可能包含开发商名、版本声明等
n getServletConfig() 容器调用这个方法来得到与这个servelt实例相关联的javax.servlet.ServletConfig对象。
n service() 这是最关健的servlet方法。容器调用这个方法向servlet传递一个请求来进行处理。Servlet必须处理这个请求,并提供一个响应。
2. 通过HttpServlet辅助类实现Servlet接口
大多数servlet并没有直接实现javax.servlet.Servlet接口。而是通过HttpServlet辅助类实现Servlet接口。
HttpServlet抽象类会透明地对HTTP协议细节进行编码,使我们能够把重点放在Servlet的核心功能上。
作为HttpServlet抽象类的一个子类,可以覆盖如下方法:
n doGet() 处理通过HTTP GET动作发送数据的到来的请求。
n doPost() 处理通过HTTP POST动作发送数据的到来的请求。
n doPut() 处理通过HTTP PUT动作发送数据的到来的请求。
n doDelete() 处理通过HTTP DELETE 动作删除服务器内容的到来请求。
n init() 与javax.servlet.Servlet接口的init()方法相同
n destroy() 与javax.servlet.Servlet接口的destroy()方法相同
n getServletInfo() 与javax.servlet.Servlet接口的getServletInfo()方法相同
3. 覆盖想实现的方法
对HttpServlet中的任何方法,如果没有覆盖,就会釆用javax.servlet.http.HttpServlet类中提供的一个默认实现。
Servlet的生命周期:
容器可以为到来的每一个请求创建一个Servlet实例,不过这种做法的效率不高。而且会占用服务器上的大量内存。为了更高效地处理到来的请求,容器必须对servlet实例的创建进行优化。每个Servlet2.4(2.3)容器都采用以下方法进行优化:
l 尽可能少地创建同一Servlet的实例(通常只为一个Servlet创建一个实例),并重用这个实例来处理所有到来的请求。
l 对所创建servlet实例进行适当的管理,服务器内存不太够时,要撤销较老的未用实例。
每个servlet(或服务器端软件组件)都有一个生命期。容器创建一个实例时,生命期开始。容器把该实例从服务中删除并撤销时,生命期终止。
这个生命周期说明了容器如何管理表示servlet的Java对象实例,可以总结为以下几个步骤:
1. 第一次访问一个servlet时会创建它的一个实例。
2. 如果需要,要初始化这个实例。
3. 维护这个实例来处理将来的请求。
4. 如果需要为新的servlet实例让出空间,则撤销该实例。