Servlet API遍程常用接口和类
本文主要总结Servlet API遍程常用接口和类
Servlet API
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html
Sun公司提供了javax.servlet.http 和javax.servlet两个扩展包来开发Servlet。这两个包属于Java的标准扩展Servlet API。
javax.servlet包提供了控制Servlet生命周期所必需的Servlet接口。
javax.servlet.http包提供了从Servlet接口派生出的专门用于处理HTTP请求的抽象类和一般的工具类。
Servlet接口和类的继承关系
Servlet程序必须实现javax.servlet.Servlet接口。该接口定义了Servlet容器与Servlet程序之间的通信协议。为了简化Servlet程序的编写,API中也提供了一个实现Servlet接口的GenericServlet类,这个类实现了Servlet程序的基本特征和功能。
HttpServlet类是Servlet API提供的一个专用于HTTP协议的类, 该类是GenericServlet类的子类,在GenericServlet类的基础上进行了一些针对HTTP特点的扩充。
开发基于Servlet类的应用必须继承GenericServlet
类或HttpServlet
类。为了充分利用HTTP协议的功能,一般情况下,都将自己编写的Servlet作为HttpServlet类的子类。而HttpServlet类是一个抽象类,开发者必须在自己定义的继承类中实现HttpServlet类的所有方法。
Servlet接口
javax.servlet.Servlet
是所有Servlet的基础接口
方 法 原 型 | 含 义 |
destroy() | 当Servlet被清除时,Web容器调用这个方法。Servlet 可使用这个方法完成如断开和数据库的连接等操作。 |
getServletConfig() | 该方法返回ServletConfig对象,该对象可以使Servlet和Web容器进行通信,例如传递初始变量 |
getServletInfo() | 返回有关Servlet的基本信息,如编程人员姓名和时间等 |
init(ServletConfig arg0) | 该方法在Servlet初始化时被调用,在Servlet生命周期中,这个方法仅会被调用一次,它可以用来设置一些准 备工作,例如设置数据库连接、读取Servlet设置信息 等,它也可以通过ServletConfig对象获得Web容器通 过的初始化变量 |
service(ServletRequestarg0, ServletResponse arg1) | 该方法用来处理Web请求、产生Web响应的主要方法, 它可以对ServletRequest和ServletResponse对象进行操作 |
ServletConfig接口
javax.servlet.ServletConfig
接口是一个由Servlet容器使用的Servlet配置对象,用于在Servlet初始化时向它传递信息。
方 法 原 型 | 含 义 |
getInitParameter(String arg0) | 根据初始化变量名称返回其字符串值 |
getInitParameterNames() | 返回所有初始化变量的枚举Enumeration对象,可以用来查询 |
getServletContext() | 返回ServletContext对象,Java的getXxx()方法大多返回原对象,而不是对象拷贝 |
getServletName() | 返回当前Servlet的名称,该名称在web.xml里指定 |
GenericServlet类
javax.servlet.GenericServlet
类提供了对Servlet接口的基本实现。
方 法 原 型 | 含 义 |
destroy() | Servlet容器使用这个方法结束Servlet服务 |
getInitParameter(String arg0) | 根据变量名称查找并返回初始变量值 |
getInitParameterNames() | 返回初始变量的枚举对象 |
getServletConfig() | 返回ServletConfig对象 |
getServletContext() | 返回ServletContext对象 |
getServletInfo() | 返回关于Servlet的信息,如作者、版本、版权等 |
getServletName() | 返回Servlet的名称 |
init() | 代替super.init(config)的方法 |
init(ServletConfig arg0) | Servlet容器使用这个指示Servlet已经被初始化为服务状态 |
log(String arg0, Throwable arg1) | 这个方法用来向Web容器的log目录输出运行记录,一般文件名称为Web程序的servlet名称 |
log(String arg0) | 这个方法用来向Web容器的log目录输出运行纪录和弹出的运行错误信息 |
service(ServletRequest arg0, ServletRe- sponse arg1) | 由Servlet容器调用,使Servlet对请求进行响应 |
init()方法
public void init() throws ServletException
Servlet第一次被请求加载时,服务器创建一个Servlet对象,这个对象调用init()方法完成必要的初始化工作。该方法在执行时,Servlet会把一个ServletConfig类型的对象传递给init()方法,这个对象就被保存在Servlet对象中,直到Servlet对象被销毁。
服务器只调用一次init()方法,以后的客户再请求Servlet服务时,Web服务器将启动一个线程,在该线程中,Servlet调用service()方法响应客户的请求,除非它要重载这个Servlet。在重载某个Servlet之前,服务器必须先调用destroy()方法卸载这个Servlet。
缺省的init()方法设置了Servlet的初始化参数,并用它的ServletConfig对象参数来启动配置,所以,通常不必覆盖init()方法。但是,在个别情况下也可以用自己编写的init()方法来覆盖它。例如,可以编写一个init()方法用于一次装入GIF图像,也可以编写一个init()方法初始化数据库连接。
同时需要注意,所有覆盖init()方法的Servlet应调用super.init()方法,以确保仍然执行这些任务。此外,在调用service()方法之前,应确保已完成了init()方法。
service()方法
public abstract void service(ServletRequest req,
ServletResponse res)
throws ServletException,
java.io.IOException
service()方法是Servlet的核心。每当客户请求一个Servlet 对象时,该对象的service()方法就被调用,而且传递给service()方法一个“请求”对象和一个“响应” 对象作为参数。
service()方法根据请求的类型调用相应的服务功能,缺省的服务功能是调用与HTTP请求的方法相应的do功能。例如,当客户通过HTML 表单发出一个HTTP GET请求时,则缺省情况下就调用doGet()方法;当客户发出的是一个HTTP POST请求时,就调用doPost()方法。
destroy()方法
public void destroy()
destroy()方法仅执行一次,即在服务器停止且卸载Servlet 时执行该方法。缺省的destroy()方法通常是符合要求的。也可以覆盖destroy()方法。
例如,如果Servlet在运行时要累计统计数据,则可以编写一个destroy()方法,该方法用于在未装载Servlet时将统计数字保存在文件中,也可以编写一个destroy()方法关闭数据库连接等。
HttpServlet类
javax.servlet.http.HttpServlet
类通过执行Servlet接口,能够提供HTTP协议的功能。
方 法 原 型 | 含 义 |
doDelete(HttpServletRequest arg0, HttpServletResponse arg1) | 对应HTTP DELETE请求从服务器删除文件 |
doGet(HttpServletRequest arg0, HttpServletResponse arg1) | 对应HTTP GET请求,客户向服务器请求数据,通过URL附加发送数据 |
doHead(HttpServletRequest arg0, HttpServletResponse arg1) | 对应HTTP HEAD请求从服务器要求数据,和GET不同的是并不是返回HTTP数据体 |
doOptions(HttpServletRequest arg0, HttpServletResponse arg1) | 对应HTTP OPTION请求,客户查询服务器支持什么方法 |
doPost(HttpServletRequest arg0, HttpServletResponse arg1) | 对应HTTP POST请求,客户向服务器发送数据,请求数据 |
doPut(HttpServletRequest arg0, HttpServletResponse arg1) | 对应HTTP PUT请求,客户向服务器上传数据或文件 |
doTrace(HttpServletRequest arg0, HttpServletResponse arg1) | 对应HTTP TRACE请求,用来调试Web程序 |
getLastModified(HttpServletRequest arg0) | 返回HttpServletRequest最后被更改的时间,以ms为单位,从1970/01/01计起 |
doGet()方法
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
java.io.IOException
被这个类的service()方法调用,用来处理一个HTTP GET操作。这个操作允许客户端简单地从HTTP服务器“获得”资源。对这个方法的重载将自动地支持HEAD方法。
当一个客户通过HTML表单发出一个HTTP GET请求或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。当不需修改服务器端的数据时,应该使用doGet()方法。
doPost()方法
protected void doPost(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
java.io.IOException
被这个类的service()方法调用,用来处理一个HTTP POST操作。这个操作包含请求体的数据。当开发者要处理POST操作时,必须在HttpServlet的子类中重载这一方法。
当一个客户通过HTML 表单发出一个HTTP POST请求时,doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用doPost()方法。
HttpServletRequest接口
javax.servlet.http.HttpServletRequest
接口代表了对客户端发出的HTTP请求。
方 法 原 型 | 含 义 |
getAuthType() | 返回Servlet使用的安全机制名称 |
getContextPath() | 返回请求URI的Context部分,实际是URI中指定Web程序的部分,例如URI为http://localhost:8080/mingrisoft/index.jsp,这一方法返回的是“mingrisoft” |
getCookies() | 返回客户发过来的Cookie对象 |
getDateHeader(String arg0) | 返回客户请求中的时间属性 |
getHeader(String arg0) | 根据名称返回客户请求中对应的头信息 |
getHeaderNames() | 返回客户请求中所有的头信息名称 |
getHeaders(String arg0) | 返回客户请求中特定头信息的值 |
getIntHeader(String arg0) | 以int格式根据名称返回客户请求中对应的头信息(header),如果不能转换成int格式,生成一个NumberFormatException异常 |
getMethod() | 返回客户请求的方法名称,例如:GET、POST或PUT |
getPathInfo() | 返回客户请求URL的路径信息 |
方 法 原 型 | 含 义 |
getPathTranslated() | 返回URL中在Servlet名称之后、检索字符串之前的路径信息 |
getQueryString() | 返回URL中检索的字符串 |
getRemoteUser() | 返回用户名称,主要应用在servlet安全机制中检查用户是否已经登录 |
getRequestURI() | 返回客户请求使用的URI路径,是URI中的host名称和端口号之后的部分,例如URL为http://localhost:8080/mingrisoft/index.jsp,这一方法返回的是“/index.jsp” |
getRequestURL() | 返回客户Web请求的URL路径 |
getServletPath() | 返回URL中对应servlet名称的部分 |
getSession() | 返回当前会话期间对象 |
getUserPrincipal() | 返回java.security.Principal对象,包括当前登录用户名称 |
isRequestedSessionIdFromCookie() | 当前session ID是否来自一个cookie |
isRequestedSessionIdFromURL() | 当前session ID是否来自URL的一部分 |
isRequestedSessionIdValid() | 当前用户期间是否有效 |
isUserInRole(String arg0) | 已经登录的用户是否属于特定角色 |
HttpServletResponse接口
javax.servlet.http.HttpServletResponse接口代表了对客户端的HTTP响应。
方 法 原 型 | 含 义 |
addCookie(Cookie arg0) | 在响应中加入cookie对象 |
addDateHeader(String arg0, long arg1) | 加入对应名称的日期头信息 |
addHeader(String arg0, String arg1) | 加入对应名称的字符串头信息 |
addIntHeader(String arg0, int arg1) | 加入对应名称的int属性 |
containsHeader(String arg0) | 对应名称的头信息是否已经被设置 |
encodeRedirectURL(String arg0) | 对特定的URL进行加密,在sendRedirect()方法中使用 |
encodeURL(String arg0) | 对特定的URL进行加密,如果浏览器不支持cookie,同时加入session ID |
sendError(int arg0) throws IOException | 使用特定的错误代码向客户传递出错响应 |
sendError(int arg0, String arg1) throws IOException | 使用特定的错误代码向客户传递出错响应,同时清空缓冲器 |
sendRedirect(String arg0) throws IOException | 传递临时相应,相应的地址根据location指定 |
setHeader(String arg0, String arg1) | 设置指定名称的头信息 |
setIntHeader(String arg0, int arg1) | 设置指定名称头信息,其值为int数据 |
setStatus(int arg0) | 设置响应的状态编码 |