HttpServlet类的简述:public abstract class HttpServlet extends GenericServlet implements java.io.Serializable
java.lang.Object
  |
  +--javax.servlet.GenericServlet
        |
        +--javax.servlet.http.HttpServlet

父类/接口:java.io.Serializable, Servlet, ServletConfig

提供一个抽象类,扩展该类可以创建一个适合http servlet的网站。
一个扩展HttpServlet的子类,必须覆写至少一个方法,通常的方法是:
  doGet():假如servlet支持HTTP的GET请求的方法;
  doPost():用于HTTP的POST请求的方法;
  doPut():用于HTTP的PUT请求的方法;
  doDelete():用于HTTP的DELETE请求的方法;
  init()和destroy(),管理保持servlet生命周期信息的资源;
  getServletInfo(),提供servlet自身的信息。

不需要覆写service()方法。services()方法通过为每个HTTP请求类型(上述的doXXX())把这些请求分派到相应的处理方法来处理标准的HTTP请求。
同样,不需要覆写doOptions()方法和doTrace()方法。

Servlets是运行于多线程服务器的,所以一个servlet必须能够处理当前的请求,并可对共享资源提供同步访问。共享资源包括内存内数据,如:对象实例或类变量,或者诸如文件,数据连接、网络连接等外部对象。

doGet()方法概述:protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由服务器调用(通过service()方法)来允许一个servlet处理一个GET请求。
覆写该方法来支持一个GET请求也自动地支持一个HTTP HEAD请求。一个HEAD请求是一个GET请求,在响应中只返回请求头区域,没有返回BODY区域。
当覆写这个方法的时候,读取请求数据,写入响应头,获得响应的writer或输出流对象,最后,写入响应数据。最好包含content type和编码(encoding)。当使用一个PrintWriter对象去返回响应,需要在访问PrinterWriter对象之前设置content type。
servlet容器必须在提交响应前写入头信息,因为在HTTP协议下,必须在传送BODY之前传送头信息。
在可能的情况下,设置头信息的Content-Length(使用ServletResponse.setContentLength(int)方法)以允许servlet容器使用一个持久性连接向客户端返回响应,从而改善性能。如果整个响应适合放入响应缓冲区,那么Content-Length会被自动设定。
GET方法是比较安全的,如果客户端的请求需要改变存储的数据,应该使用其它HTTP方法。
The GET method should also be idempotent, meaning that it can be safely repeated. Sometimes making a method safe also makes it idempotent. For example, repeating queries is both safe and idempotent, but buying a product online or modifying data is neither safe nor idempotent. (暂时不能翻译)
如果请求的格式错误,doGet会返回一个HTTP的“Bad Request”信息。


getLastModified()方法概述:protected long getLastModified(HttpServletRequest req)
返回HttpServletRequest最近一次被修改的时间,该时间是距离1970年1月1日格林威治时间的毫秒数。如果时间未知,则返回一个否定的默认号(-1)。
支持HTTP GET请求并能迅速决定修改时间的servlet应该覆写该方法。这会使浏览器和代理缓冲区更具效率,因为这样可以减少重复的流量。

doHead()方法概述:protected void doHead(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
从一个protected service()方法返回一个HTTP HEAD请求,并处理该请求。当客户端只需要知道响应头,比如Content-Type或者Content-Length,客户端只需要发送一个HEAD请求。HTTP HEAD准确地计算输出的字节数来设定Content-Length。
如果你覆写该方法,可以避免计算响应的BODY,而只需设置响应头以改善性能。Make sure that the doHead method you write is both safe and idempotent (that is, protects itself from being called multiple times for one HTTP HEAD request).

doPost()方法概述:protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由服务器调用(通过service()方法)以允许一个servlet去处理一个POST请求。HTTP POST方法允许客户在同一时间内向服务器发送无长度限制的数据,而且好像信用卡号等都是允许的。
当覆写该方法时,读取请求数据,写入响应头,获得响应的writer或输出流对象,最后,写入响应数据。最好包含content type和编码(encoding)。当使用一个PrintWriter对象去返回响应,需要在访问PrinterWriter对象之前设置content type。
当使用HTTP 1.1进行编码时(这意味着响应带有一个Transfer-Encoding 头),不要设置Content-Length 头。

doPut()方法概述:protected void doPut(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由服务器调用(通过service()方法)以允许一个servlet去处理一个PUT请求。PUT操作允许客户好像使用FTP一样把文件放置到服务器。

doDelete()方法概述:protected void doDelete(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由服务器调用(通过service()方法)以允许一个servlet去处理一DELETE请求。DELETE操作允许客户从服务器中删除一个文档或网页。

doOptions()方法概述:protected void doOptions(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由服务器调用(通过service()方法)以允许一个servlet去处理一OPTIONS请求。OPTIONS操作决定服务器支持哪种HTTP方法,并返回一个适当的头信息。举例:如果一个servlet覆写了doGet()方法,doOptions()方法将会返回如下头信息:Allow: GET, HEAD, TRACE, OPTIONS

doTrace()方法概述:protected void doTrace(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由服务器调用(通过service()方法)以允许一个servlet去处理一TRACE请求。该方法用于程序调试,无需被覆写。


protected service()方法概述:protected void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
从public service()方法接收标准的HTTP请求,并把它们分派给doXXX成员方法。该方法无需被覆写。

public service()方法概述:分派客户的请求到protected service()方法,该方法无需被覆写。
其它见Servlet.service()方法。

posted on 2004-06-30 11:50  Johnny  阅读(2992)  评论(2编辑  收藏  举报