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
请求
|
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
发送给客户的响应。(未完,待续。)