Servlet的相关类和接口的相关知识

Servlet的相关类和接口的相关知识

1.HttpServlet类
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请求

initdestroy

如果需要管理Servlet生命周期内所持有资源,可以重载这两个方法

通常,不重载service方法,对于上表中的每一种HTTP请求,service方法通过分派它们到相应的Handler线程(doXXX方法)来处理这些标准的HTTP请求。

同样地,通常也不重载doOptionsdoTrace方法,service方法通过分派它们到doTracedoOptions来支持HTTP1.1 TRACEOPTIONS

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 typeencoding。如果使用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对象的最后修改时间,自197011日以来的毫秒数,如果时间不知道,则返回一个负数。

参数req是发送给ServletHttpServletRequest对象。

返回值为一个长整型,用于指描述HttpServletRequest对象的最后修改时间。

支持HTTP Get请求的Servlet引擎应该重载getLastModified,以便提供一个精确的对象修改时间,这可以使浏览器和代理服务器的缓存工作更效,减少服务器和网络资源的装载。

Protected void doPost(HttpServletRequest req,HttpServletResponse resp)

Throws ServletExeceptin,IOException

service方法接受并处理HTTP POST请求。HTTP POST允许客户发送长度没有限制的数据给Web服务器,当发送诸如信用卡号等信息时非常有用。

如果重载该方法,应该人HttpServletRequest对象读数据,设置响应的headers(包括Content-TypeContent-Encoding),然后存取PringWriter或输出流对象,最后,使用javax.servlet.servletOutputStream对象写响应数据。

如果使用PrintWriter对象写响应数据,在存取PringWriter对象之前设置Content-TypeServlet引擎必须在响应数据之前写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发送给客户的响应。

(未完,待续。)