HttpServlet类是一个抽象类,可以从该类派生出一个子类来实现一个HttpServlet,接受来自Web站点的请求(该请求来自访问该Web站点的客户浏览器),并将处理后的响应结果发回Web站点(Web站点再将响应结果发送给客户浏览器),在HttpServlet的子类中,必须至少重载下表中的其中一种方法。
方法名 | 用途 |
doGet | 如果Servlet支持Http GET请求,用于Http GET请求 |
doPost | 如果Servlet支持Http POST请求,用于Http POST请求 |
doPut | 如果Servlet支持Http PUT请求,用于Http PUT请求 |
doDelete | 如果Servlet支持Http DELETE请求,用于Http DELETE请求 |
init和destroy | 如果需要管理Servlet生命周期内所持有资源,可以重载这两个方法 |
通常,不重载service方法,对于上表中的每一种HTTP请求,service方法通过分派它们到相应的Handler线程(doXXX方法)来处理这些标准的HTTP请求。
同样地,通常也不重载doOptions和doTrace方法,service方法通过分派它们到doTrace和doOptions来支持HTTP1.1 TRACE和OPTIONS。
Servlet通常运行在多线程的服务器中,因此,所编写的Servlet代码必须能够处理并行请求和对数据资源的同步访问。共享资源包括内存中的数据(例如:实例或类变量)和外部对象(例如:文件、数据库连接或网络连接)。
Protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException
从service方法授并处理HTTP GET请求。GET方法允许客户读取来自Web服务器的信息,客户通过传递一个带URL的查询字符串可以告诉服务器它需什么信息。
重载支持GET请求的doGet方法还将自动支持HTTP HEAD请求,HEAD请求也是一个GET请求,它得到的返回响应中只有一个请求头(header)字段,而没有响应信息的内容。
如果重载方法,应该从该请求读数据,在响应中设置整个headers,访问PrintWriter或输出流对象,最后写响应数据。当设置headers时,应确保包含content type和encoding。如果使用PrintWriter对象返回响应,在存取PrintWriter对象之前必须设置content type。
Servlet引擎必须在写响应数据之前写headers,因为在写数据之后headers随时都可能被刷新。
如果设置Content-Length头,Servlet可以使用一个持久稳固的连接来将其响应返回给客户机,动态地改善性能。
如果请求的格式不正确,doGet方法将返回一个HTTP BAD_REQUEST信息。
参数req为一个HttpServletRequest对象,含有客户的Servlet请求;resp是一个HttpServletResponse对象,含有Servlet发送给客户的响应。
Protected long getLastModified(HttpServletRequest req)
得到HttpServletRuqest对象的最后修改时间,自1970年1月1日以来的毫秒数,如果时间不知道,则返回一个负数。
参数req是发送给Servlet的HttpServletRequest对象。
返回值为一个长整型,用于指描述HttpServletRequest对象的最后修改时间。
支持HTTP Get请求的Servlet引擎应该重载getLastModified,以便提供一个精确的对象修改时间,这可以使浏览器和代理服务器的缓存工作更效,减少服务器和网络资源的装载。
Protected void doPost(HttpServletRequest req,HttpServletResponse resp)
Throws ServletExeceptin,IOException
从service方法接受并处理HTTP POST请求。HTTP POST允许客户发送长度没有限制的数据给Web服务器,当发送诸如信用卡号等信息时非常有用。
如果重载该方法,应该人HttpServletRequest对象读数据,设置响应的headers(包括Content-Type和Content-Encoding),然后存取PringWriter或输出流对象,最后,使用javax.servlet.servletOutputStream对象写响应数据。
如果使用PrintWriter对象写响应数据,在存取PringWriter对象之前设置Content-Type,Servlet引擎必须在响应数据之前写headers,因为当Servlet引擎开始写响应的体后,headers随时可能会被刷新。
如果使用HTTP1.1块编码(意味着响应有一个Transfer-Encoding Header),则无需设置Content-Length Header,否则,应该设置内容的长度以便让Servlet利用HTTP的“connection Keep Alive”特征。
如果HTTP POST请求的格式不正确,doPost方法将返回一个HTTP BAD_AREQUEST信息。
参数req为一个HttpServletRequest对象,含有客户的Servelt请求,resp是一个HttpServletResonse对象,含 有Servlet发送给客户的响应。
(未完,待续。)