`

Servlet API

 
阅读更多

 

Servlet接口

定义

public interface Servlet

要实现一个Servlet必须实现该类.

该接口定义了Servlet

方法:

1.init

public void init(ServletConfig config) throws ServletException;

在Servlet实例化之后,Servlet容器调用init()方法,来初始化对象,主要为了让Servlet对象在处理客户请求前可以完成一些初始化的工作.

容器调用init()时,把ServletConfig对象作为参数传递给Servlet对象.容器使用该对象向Servlet传递信息.

Servlet使用ServletConfig对象从Web应用程序的配置信息中获取”名-值”对形式的初始化参数.另外Servlet中,还可以通过ServletConfig对象获取配置Servlet运行环境的ServletContext对象,使用ServletContext对象.Servlet对象可以和Servlet容器进行通信.

如果 init 方法抛出一个 ServletException,Servlet无法工作.

如果 init方法在超时,则假定Servlet是不具备功能的. Servlet无法工作.

 

2.service

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException;

容器调用service()来处理客户端的请求.注意,在service()方法被容器调用之前,必须确保init()方法正确完成.容器会构造一个表示客户端请求对象(ServletRequest)和一个用于对客户端进行响应的响应对象(ServletResponse)作为参数传递给service()方法.

service()方法在Servlet未成功初始化之前无法调用.在一个Servlet对象被卸载后,直到一个新的Servelt被初始化之前,Servlet容器不再调用这个方法.

 

3.destroy

public void destroy();

当容器检测到一个Servlet对象应该从服务中被移除的时候,容器调用该对象的destroy()方法.以便让Servlet容器释放资源.

容器调用destroy ()方法之前,若还有其他线程正在service()方法中执行,容器会等待这些线程执行完毕,或等待服务器设定的超时值到达,一旦destroy()方法被调用,容器则不再把其他请求发送给该Servlet对象. destroy()调用之后,容器会释放Servlet对象,随后,该Servlet被Java的垃圾收集器所回收.

若该Servlet需再次为客户端服务,容器将会重新产生一个Servlet对象.

 

4.getServletConfig

public ServletConfig getServletConfig();

返回 ServletConfig 对象.返回的ServletConfig对象是容器调用init()时传递给Servlet对象的.ServletConfig对象包含了Servlet的初始化参数.

 

5.getServletInfo

public String getServletInfo();

返回String,其中包含了关于Servlet的信息,如作者,版本和版权.

 

 

 

ServletRequest接口

定义

public interface ServletRequest

ServletRequest对象由容器创建,通过ServletRequest可以获得客户端请求的数据.

 

方法:

1.getAttribute

public Object getAttribute(String name);

返回请求中以为name为名字的属性的值,如果该属性不存在,就返回一个null.

 

2.getAttributeNames

public Enumeration getAttributeNames();

返回请求中的所有属性的名字.若请求中没有属性.则返回一个空的枚举集合.

 

3.setAttribute

public void setAttribute(String name, Object object);

这个方法在请求中添加一个属性,这个属性可以被其他可以访问这个请求对象的对象

(例如一个嵌套的 Servlet)使用.

 

4.removeAttribute

public void setAttribute(String name);

移除请求中名字为name的属性.

 

5.getCharacterEncoding

public String getCharacterEncoding();

返回请求正文的字符编码的名字,如果没有指定字符编码,则返回null.

 

6.setCharacterEncoding

public void setCharacterEncoding(String env) throws java.io.UnsupportedEncodingExption

覆盖在请求正文中所使用的字符编码的名字.

 

7.getContentLength

public int getContentLength();

以字节为单位,返回请求正文的长度,如果长度未知,该方法将返回-1.

 

8.getContentType

public String getContentType();

返回请求正文的MIME类型,如果类型未知,返回null.

 

9.getInputStream

public ServletInputStream getInputStream() throws IOException;

返回一个输入流,使用该输入流以二进制方式读取请求正文的内容.

javax.servlet.ServletInputStream是一个抽象类,继承自java.io.InputStream.

如果在此之前已经通过getReader方法获得了要读取的结果,这个方法会抛出一个 IllegalStateException.

 

10.getParameter

public String getParameter(String name);

返回请求中name参数的值,如果这个参数不存在返回null.

如果name参数有多个值,那么该方法将返回值列表中的第一个值.

 

11.getParameterValues

public String[] getParameterValues(String name);

返回请求中name参数的所有值.如果name参数不存在,该方法返回null.

 

12.getParameterNames

public Enumeration getParameterNames();

返回请求中包含的所有的参数的名字.如果请求中没有输入参数,该方法返回空的枚举集合.

 

13.getProtocol

public String getProtocol();

返回请求所用的协议名和版本.其形式为:协议/主版本号.次版本号.例如HTTP/1.0.

 

14.getReader

public BufferedReader getReader() throws IOException;

返回BufferedReader对象,以字符数据读取请求体正文.

 

15.getRemoteAddr

public String getRemoteAddr();

返回发送请求的客户端或最后一个代理服务器的 IP 地址.

 

16.getRemoteHost

public String getRemoteHost();

返回发送请求的客户端或最后一个代理服务器的完整限定名.

 

17.getRemotePort

public int  getRemotePort ();

返回发送请求的客户端或最后一个代理服务器的IP源端口.Servlet2.4新增.

 

18getScheme

public String getScheme();

返回请求所使用的 URL 的模式.例如,对于一个 HTTP 请求,这个模式就是 http.

 

19.getServerName

public String getServerName();

返回请求发送到的服务器的主机名.

 

20.getServerPort

public int getServerPort();

返回请求发送到的服务器的端口号.

 

21.getLocalAddr

public String getLocalAddr();

返回接收到请求的网络接口的IP地址.Servlet2.4新增.

 

22.getLocalName

public String  getLocalName ();

返回接收到请求的IP接口的主机名.Servlet2.4新增.

 

23.getLocalPort

public int getLocalPort();

返回接收到请求的网络接口的IP端口号.Servlet2.4新增.

 

24.getRequestDispatcher

public RequestDispatcher getRequestDispatcher(String path)

返回RequestDispatcher对象,作为path所定位的资源的封装.

 

注:以下方法将被取消

getRealPath

public String getRealPath(String path);

返回与虚拟路径相对应的真实路径,如果因为某种原因,这一过程不能进行,该方法将

返回一个null.

这个方法和 ServletContext 接口中的 getRealPath 方法重复.在 2.1 版中,ServletContext

接口将阐明一个 Servlet 所能用的所有的路径的映射.该方法执行的结果将会与

ServletContext 中 getRealPath 方法的结果完全一样.

 

 

 

ServletResponse接口

定义

public interface ServletResponse

定义一个 Servlet 引擎产生的对象,通过这个对象,Servlet 对客户端的请求作出响应.

这个响应应该是一个 MIME 实体,可能是一个 HTML 页.图象数据或其他 MIME 的 格式 .

 

方法:

1.flushBuffer

public void flushBuffer() throws java.io.IOException

强制把任何在缓存中的内容发送到客户段.

 

2.getBufferSize

public int getBufferSize()

返回实际用于响应的缓存的大小.如果没有使用缓存,这个方法将返回0.

 

3.setBufferSize

public void getBufferSize(int size)

设置响应正文的缓存大小.Servlet容器将使用一个缓存,其大小至少是请求的尺寸大小.这个方法必须在响应正文被写入之前调用,如果内容已经被写入或响应对象已经被提交,这个方法将抛出IllegalStateException异常.

 

4.getCharacterEncoding

public String getCharacterEncoding()

返回响应中发送的正文所用的字符编码(MIME字符集)

 

5.setCharacterEncoding

public void setCharacterEncoding(String charset)

设置发送到客户算响应的字符编码,例如UTF-8

 

6.getOutputStream

public ServletOutputStream getOutputStream() throws IOException

返回ServletOutputStream对象.用于在响应中写入二进制数据.

ServletOutputStream是一个抽象类,继承自java.io.OutputStream.

 

7.getWriter

public PrintWriter getWriter throws IOException

返回 PringWriter 对象.用于发送字符文本到客户端.

PringWriter对象使用getCharacterEncoding()方法返回的字符编码.如果没有指定响应的字符编码方式,默认使用ISO-8859-1.

 

8.setContentLength

public void setContentLength(int length)

设置响应内容正文的长度,这个方法会设置HTTP Content-Length字体报头.

 

9.getContentType

public void  getContentType ()

返回在响应中发送的正文所使用的MIME类型.

 

10.setContentType

public void setContentType(String type)

设定要发送到客户端的响应内容的类型.此时响应应该还没有提交.给出的内容类型可以包含字符编码说明,例如:text/html;charset=UTF-8.如果这个方法在getWriter()方法被调用之前调用,那么响应的字符编码将仅从给出的内容类型中设置.这个方法如果在getWriter()方法被调用之后或者在响应被提交之后调用,将不会设置响应的字符编码.在使用HTTP协议的情况下,这个方法设置Content_Type实体报头.

 

11.isCommitted

public  boolean isCommitted()

返回一个布尔值,只是都否已经提交了响应.

 

12.reset

public void reset()

清除在缓存中的任何数据,包括状态代码和消息报头.如果响应已经被提交,这个方法将抛出IllegalStateException异常.

 

13.resetBuffer

public void resetBuffer()

清除在缓存中的响应内容,包括状态代码和消息报头.如果响应已经被提交,这个方法将抛出IllegalStateException异常.

 

 

 

ServletConfig 接口

定义

public interface ServletConfig

Servlet容器使用ServletConfig对象在Servlet初始化期间向它传递配置信息.一个Servlet只有一个ServletConfig对象.

 

方法:

1.getInitParameter

public String getInitParameter(String name);

返回名为name的初始化参数的值.如果这个参数不存在,返回null.

初始化参数在web.xml中配置.

 

2.getInitParameterNames

public Enumeration getInitParameterNames();

返回Servlet所有初始化参数的名字的枚举集合.如果Servlet没有初始化参数,这个方法将返回一个空的枚举集合.

 

3.getServletContext

public ServletContext getServletContext();

返回Servlet的上下文对象ServletContext 的引用.

 

4.getServletName

public ServletContext getServletName();

返回Servlet实例的名字.这个名字是在web应用程序的部署描述符中指定的.如果是一个没有注册的Servlet实例,该方法返回Servlet的类名.


 

 

 

ServletContext 接口

ServletContext对象表示了一个Web应用程序的上下文.每一个Web应用程序都有一个与之相关的ServletContext对象.

定义

public interface ServletContext

定义了一个 Servlet上下文对象,通过该对象,容器向Servlet 提供环境信息.ServletContext是Web服务器中的一个已知路径的根.

    Servlet容器在Servlet初始化期间,向其传递ServletConfig对象,可以通过ServletConfig对象的getServletContext()方法得到ServletContext对象.也可以通过GenericServlet对象的getServletContext()方法得到ServletContext对象.不过GenericServlet的getServletContext()也是通过ServletConfig()的getServletContext()得到的.

    一个 Servlet 的环境对象必须至少与它所在的主机是一一对应的.在一个处理多个虚拟主机的 Servlet 引擎中(例如,使用了 HTTP1.1 的主机 头域),每一个虚拟主机必须被视为一个单独的环境.此外,Servlet 容器还可以创建一组对应的Servlet 的环境对象.

 

方法:

1.getAttribute

public Object getAttribute(String name);

2.getAttributeNames

public Enumeration getAttributeNames();

3.setAttribute

public void setAttribute(String name, Object o);

4.removeAttribute

public void removeAttribute(String name);

以上四个方法用于读取,移除和设置共享属性,任何一个Servlet都可以设置某个属性,而同一个Web应用程序的另一个Servlet可以读取这个属性,不管这些Servlet是否为同一个客户进行服务.

 

5.getContext

public ServletContext getContext(String uriPath);

返回服务器上与指定的URL相对应的ServletContext对象.给出uriPath参数必须以斜杠 / 开始,被解释为相对与服务器文档根的路径.为了安全,如果该方法访问一个受限制的ServletContext,则返回null.

 

6. getContextPath

public String getContextPath();

用于返回Web应用程序的上下文路径.上下文路径总是以斜杠 / 开头,结束没有斜杠.

在默认(根)上下文中,该方法返回空字符串””.

该方法是在Servlet2.5规范中新增的.

 

7.getMajorVersion

public int getMajorVersion();

返回 Servlet容器支持的 Servlet API 的主版本号.例如对于 2.4 版,这个方法会返回2.

 

8.getMinorVersion

public int getMinorVersion();

返回 Servlet 容器支持的 Servlet API 的次版本号.例如对于 2.4 版,这个方法会返回4.

 

9.getMimeType

public String getMimeType(String file);

返回指定文件的MIME 类型,如果这种 MIME 类型未知,则返回null.

MIME 类型由Servlet 引擎的配置决定.也可以在Web应用程序的部署描述符中指定.

 

10.getRealPath

public String getRealPath(String path);

在一个Web应用程序中,资源用相对于上下文路径的路径来引用,这个方法可以返回资源在服务器文件系统上的真实路径(文件的绝对路径).返回的真实路径的格式应该适合于运行这个Servlet容器的计算机和操作系统(包括正确的路径分隔符).如果Servlet容器不能够将虚拟路径转换为真实路径,这个方法返回null.

 

11.getResource

public URL getResource(String uripath);

该方法返回被映射到指定路径上的资源的URL.传入的参数path必须以斜杠 / 开始,被解释为相对于当前上下文根的路径.这个方法允许Servlet容器从任何来源为Servlet生成一个可用的资源.资源可以是在本地或远程文件系统上,在数据库中,或者在WAR文件中.如果没有资源映射到指定的路径上,该方法将返回null.

 

12.getResourcePaths

public java.util.Set getResourcePaths(String uripath);

该方法返回资源的路径列表,参数path必须以斜杠 / 开始,指定用于匹配资源的部分资源路径.例如,一个Web应用程序包含了下列资源:

/webcome.html

/catalog/index.html

/catalog/products.html

/catalog/offers/books.htnl

/catalog/offers/music.html

/customer/login.jsp

/WEB_INF/web.xml

/WEB_INF/classes/com.acme.OrderServlet.class

如果调用getResourcePaths(“/”),将返回[/webcome.html, /catalog/,/customer/,/WEB_INF/].

如果调用getResourcePaths(“/catalog/”),将返回[/catalog/index.html,/catalog/products.html,/catalog/offers/].

 

13.getResourceAsStream

public InputStream getResourceAsStream(String uripath);

该方法与getResource()方法类似,不同之处在于,该方法返回资源的输入流对象.另外,使用getResourceAsStream()方法,元信息(如内容长度和内容类型)将丢失,而使用getResource()方法,元信息是可用的.

 

14.getRequestDispatcher

public RequestDispatcher getRequestDispatcher(String path);

该方法返回一个RequestDispatcher对象,作为指定路径上的资源封装.可以使用RequestDispatcher对象将一个请求转发(forword)给其他资源进行处理,或者在响应中包含(include)资源.要注意的是,传入的参数path必须以斜杠 / 开始,被解释为相对于当前上下文根(context root)的路径.

 

15.getNamedDispatcher

public RequestDispatcher getNamedDispatcher(String name);

该方法与getRequestDispatcher类似,不同之处在于,该方法接收一个在部署描述符中以<servlet-name>元素给出的Servlet(或JSP页面)的名字作为参数.

 

16.getServerInfo

public String getServerInfo();

返回一个运行Servlet的名称和版本.

 

17.getServletContextName

public String getServletContextName();

该方法返回在部署描述符中使用<display-name>元素指定的对应于当前ServletContext的Web应用程序的名称.

 

18.log

public void log(String msg);

记录日志文件.用于记录一般方法.

public void log(String msg, Throwable t);

记录日志文件.用于记录指定异常的站跟踪信息.

public void log(Exception exception, String msg); // 这种用法将被取消

说明:被写入的 log 文件由 Servlet 引擎指定. 

 

 

 

RequestDispatcher接口

定义

public interface RequestDispatcher

RequestDispatcher对象由Servlet容器创建,用于封装一个路径所标识的服务器资源.

RequestDispatcher对象可以把客户端的请求转发给服务器的可用资源(如Servlet,CGI,HTML ,JSP).

 

方法:

1.forward

public void forward(ServletRequest request, ServletReponse response) throws ServletException, IOException;

方法用于将请求从一个Servlet传递给服务器的其他资源.

当一个 Servlet 对响应作了初步的处理,并要求其它的对象对此作出响应时,可以使用这个方法.

当 request 对象被传递到目标对象时,请求的URL 路径和其他路径参数会改为目标资源的URL 路径.

注意:如果已经通过响应返回了ServletOutputStream对象或 PrintWriter 对象,该方法将不能使用.否则,抛出IllegalStateException.

 

2.include

public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException;

该方法用于在响应中包含其他资源的内容.

 

 

 

SingleThreadModel接口

定义

public interface SingleThreadModel;

这是一个空接口,它指定了系统如何处理对同一个 Servlet 的调用.如果一个 Servlet 被这个接口指定,那么在这个 Servlet 中的 service 方法中将不会有两个线程被同时执行.

Servlet 可以通过维持一个各自独立的 Servlet 实例池,或者通过只让 Servlet 的 service中只有一个线程的方法来实现这个保证.


 

 

GenericServlet 类

public abstract class GenericServlet implements Servlet,ServletConfig, Serializable;

抽象类.它给出了除service()方法外的其他4个方法的简单实现. GenericServlet类定义了一个通用的.不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口.

 

方法

1.init

public void init(ServletConfig config) throws ServletException;

public void init() throws ServletException;

第一个init方法是Servlet接口中的init的实现.在该方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二个不带参数的init()方法.

通常在编写继承自GenericServlet的Servlet类时,只需要重写第二个不带参数的init()方法即可.如果要覆盖第一个init()方法,那么应该在子类的init方法中包含一句super.init(config).

 

2.getInitParameter

public String getInitParameter(String name);

调用该方法实际上就是调用 ServletConfig 对象的同名的方法.

 

3.getInitParameterNames

public Enumeration getInitParameterNames();

调用该方法实际上就是调用 ServletConfig 对象的同名的方法.

 

4.getServletContext

public ServletContext getServletContext();

调用该方法实际上就是调用 ServletConfig 对象的同名的方法.

 

5.getServletConfig

public ServletConfig getServletConfig();

返回由该类init方法参数传入的ServletConfig对象的引用.

 

6.getServletInfo

public String getServletInfo();

返回一个反映 Servlet 版本的String.

 

7. log

public void log(String msg);

public void log(String msg, Throwable cause);

通过 Servlet content 对象将 Servlet 的类名和给定的信息写入 log 文件中.

 

8.destroy

public void destroy();

在这里 destroy 方法不做任何其他的工作.

 

9. service

public abstract void service(ServletRequest request, ServletResponse response) throws ServletException, IOException;

该方法为一个抽象方法,当扩展该类时,执行网络请求,需要调用该方法,所以必须实现该方法.

 

 

 

HttpServlet 类

定义

public class HttpServlet extends GenericServlet implements Serializable

继承自GenericServlet类,用于创建适合Web站点的HTTP Servlet.

虽然该类为抽象类,但是该类中所以方法均已实现.只是在该类中对客户端请求进行处理的方法没有真正实现.

该类的service()方法支持(例如GET,POST)标准的HTTP方法,通过分配到适当的方法(如doGet.doPost)来实现.

方法

1.doDelete

protected void doDelete(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;

被这个类的 service 方法调用,用来处理一个 HTTP DELETE 操作.这个操作允许客户

端请求从服务器上删除 URL.这一操作可能有负面影响,对此用户就负起责任.

这一方法的默认执行结果是返回一个HTTP BAD_REQUEST错误.当你要处理 DELETE

请求时,你必须重载这一方法.

2.doGet

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;

被这个类的 service 方法调用,用来处理一个 HTTP GET 操作.这个操作允许客户端简

单地从一个 HTTP 服务器“获得”资源.对这个方法的重载将自动地支持 HEAD 方法.

GET 操作应该是安全而且没有负面影响的.这个操作也应该可以安全地重复.

这一方法的默认执行结果是返回一个 HTTP BAD_REQUEST 错误.

3.doHead

protected void doHead(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;

被这个类的 service 方法调用,用来处理一个 HTTP HEAD 操作.默认的情况是,这个

操作会按照一个无条件的 GET 方法来执行,该操作不向客户端返回任何数据,而仅仅是返

回包含内容长度的头信息.

与 GET 操作一样,这个操作应该是安全而且没有负面影响的.这个操作也应该可以安

全地重复.

这个方法的默认执行结果是自动处理 HTTP HEAD 操作,这个方法不需要被一个子类执

行.

4.doOptions

protected void doOptions(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;

被这个类的 service 方法调用,用来处理一个 HTTP OPTION 操作.这个操作自动地决

定支持哪一种 HTTP 方法.例如,一个 Servlet 写了一个 HttpServlet 的子类并重载了 doGet

方法,doOption 会返回下面的头:

Allow: GET,HEAD,TRACE,OPTIONS

你一般不需要重载这个方法.

5.doPost

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;

被这个类的 service 方法调用,用来处理一个 HTTP POST 操作.这个操作包含请求体的

数据,Servlet 应该按照他行事.

这个操作可能有负面影响.例如更新存储的数据或在线购物.

这一方法的默认执行结果是返回一个 HTTP BAD_REQUEST 错误.当你要处理 POST

操作时,你必须在 HttpServlet 的子类中重载这一方法.

6.doPut

protected void doPut(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;

被这个类的 service 方法调用,用来处理一个 HTTP PUT 操作.这个操作类似于通过 FTP发送文件.

这个操作可能有负面影响.例如更新存储的数据或在线购物.

这一方法的默认执行结果是返回一个 HTTP BAD_REQUEST 错误.当你要处理 PUT 操

作时,你必须在 HttpServlet 的子类中重载这一方法.

7.doTrace

protected void doTrace(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;

被这个类的 service 方法调用,用来处理一个 HTTP TRACE 操作.这个操作的默认执行

结果是产生一个响应,这个响应包含一个反映 trace 请求中发送的所有头域的信息.

当你开发 Servlet 时,在多数情况下你需要重载这个方法.

8.getLastModified

protected long getLastModified(HttpServletRequest request);

返回这个请求实体的最后修改时间.为了支持 GET 操作,你必须重载这一方法,以精

确地反映最后修改的时间.这将有助于浏览器和代理服务器减少装载服务器和网络资源,从

而更加有效地工作.返回的数值是自 1970-1-1 日(GMT)以来的毫秒数.

默认的执行结果是返回一个负数,这标志着最后修改时间未知,它也不能被一个有条件的

GET 操作使用.

 

9.service

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException;

protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;

第一个方法是GenericServlet类中service()方法的实现.在该方法中,首先将request, response对象转换为HttpServletRequest, HttpServletResponse类型,然后调用第二个service方法,对客户端进行处理.

 

 

 

HttpServletRequest接口

定义

public interface HttpServletRequest extends ServletRequest;

继承自ServletRequest,用来处理一个对 Servlet 的 HTTP 格式的请求信息.

 

方法

1.getAuthType

public String getAuthType();

返回这个请求的身份验证模式.

 

2.getCookies

public Cookie[] getCookies();

返回一个数组,该数组包含这个请求中当前的所有 cookie.如果这个请求中没有 cookie,则返回空数组.

 

3.getDateHeader

public long getDateHeader(String name);

返回指定的请求头域的值,这个值被转换成一个反映自 1970-1-1 日(GMT)以来的精确到毫秒的长整数.

如果头域不能转换,抛出一个 IllegalArgumentException.如果这个请求头域不存在,这个方法返回-1.

 

4.getHeader

public String getHeader(String name);

返回名字为name的请求报头值,若请求中没有包含指定名字的报头,则方法返回null.

 

5.getHeaderNames

public Enumeration getHeaderNames();

返回此次请求包含的所有报头名字的枚举集合.

 

6.getIntHeader

public int getIntHeader(String name);

返回指定的请求头域的值,这个值被转换成一个整数.

如果头域不能转换,抛出一个 IllegalArgumentException.如果这个请求头域不存在,该方法返回-1.

 

7.getMethod

public String getMethod();

返回这个请求使用的 HTTP 方法(例如:GET.POST.PUT)

 

8.getPathInfo

public String getPathInfo();

这个方法返回在这个请求的 URL 的 Servlet 路径之后的请求 URL 的额外的路径信息.

如果这个请求 URL 包括一个查询字符串,在返回值内将不包括这个 查询字符串.这个路径

在返回之前必须经过 URL 解码.如果在这个请求的 URL 的 Servlet 路径之后没有路径信息.

这个方法返回null.

 

9.getPathTranslated

public String getPathTranslated();

这个方法获得这个请求的 URL 的 Servlet 路径之后的额外的路径信息,并将它转换成一

个真实的路径.在进行转换前,这个请求的 URL 必须经过 URL 解码.如果在这个 URL 的

Servlet 路径之后没有附加路径信息.这个方法返回null.

 

10.getQueryString

public String getQueryString();

返回这个请求 URL 所包含的查询字符串.一个查询字串符在一个 URL 中由一个“?”

引出.如果没有查询字符串,这个方法返回null.

 

11.getRemoteUser

public String getRemoteUser()

返回作了请求的用户名,这个信息用来作 HTTP 用户论证.

如果在请求中没有用户名信息,这个方法返回null.

 

12.getRequestedSessionId

public String getRequestedSessionId();

返回这个请求相应的 session id.如果由于某种原因客户端提供的 session id 是无效的,

这个 session id 将与在当前 session 中的 session id 不同,与此同时,将建立一个新的 session.

如果这个请求没与一个 session 关联,这个方法返回null.

 

13.getRequestURI

public String getRequestURI();

从HTTP请求的第一行返回请求的 URL 中定义被请求的资源的部分.如果有一个查询

字符串存在,这个查询字符串将不包括在返回值当中. 例如, 一个请求通过/catalog/books?id=1这样的URL路径访问,这个方法将返回/catalog/books.这个方法的返回值包括了Servlet 路径和路径信息.

如果这个 URL 路径中的的一部分经过了 URL 编码,这个方法的返回值在返回之前必须

经过解码.

 

14.getServletPath

public String getServletPath();

这个方法返回请求 URL 反映调用 Servlet 的部分.例如,一个 Servlet 被映射到

/catalog/summer 这个 URL 路径,而一个请求使用 了/catalog/summer/casual 这样的路径.所

谓的反映调用 Servlet 的部分就是指/catalog/summer.

如果这个 Servlet 不是通过路径匹配来调用.这个方法将返回一个null.

 

15.getSession

public HttpSession getSession();

若session已经存在,返回该session。若session不存在,则新建一个 session。

public HttpSession getSession(boolean create);

当参数为true时,等价于getSession()。

当参数为false时,若session已经存在,返回该session。若session不存在,返回null。

 

16.isRequestedSessionIdValid

public boolean isRequestedSessionIdValid();

这个方法检查与此请求关联的 session 当前是不是有效.如果当前请求中使用的 session

无效,它将不能通过 getSession 方法返回.

 

17.isRequestedSessionIdFromCookie

public boolean isRequestedSessionIdFromCookie();

如果这个请求的 session id 是通过客户端的一个 cookie 提供的,该方法返回真,否则返

回假.

 

18.isRequestedSessionIdFromURL

public boolean isRequestedSessionIdFromURL();

如果这个请求的 session id 是通过客户端的 URL 的一部分提供的,该方法返回真,否则

返回假.请注意此方法与 isRequestedSessionIdFromUrl 在 URL 的拼写上不同.

以下方法将被取消.

 

19.isRequestedSessionIdFromUrl

public boolean isRequestedSessionIdFromUrl();

该方法被 isRequestedSessionIdFromURL 代替.

 

 

HttpServletRespons接口

定义

public interface HttpServletResponse extends ServletResponse

描述一个返回到客户端的 HTTP 回应.这个接口允许 Servlet 程序员利用 HTTP 协议规定的头信息.

 

成员变量

public static final int SC_CONTINUE = 100;

public static final int SC_SWITCHING_PROTOCOLS = 101;

public static final int SC_OK = 200;

public static final int SC_CREATED = 201;

public static final int SC_ACCEPTED = 202;

public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;

public static final int SC_NO_CONTENT = 204;

public static final int SC_RESET_CONTENT = 205;

public static final int SC_PARTIAL_CONTENT = 206;

public static final int SC_MULTIPLE_CHOICES = 300;

public static final int SC_MOVED_PERMANENTLY = 301;

public static final int SC_MOVED_TEMPORARILY = 302;

public static final int SC_SEE_OTHER = 303;

public static final int SC_NOT_MODIFIED = 304;

public static final int SC_USE_PROXY = 305;

public static final int SC_BAD_REQUEST = 400;

public static final int SC_UNAUTHORIZED = 401;

public static final int SC_PAYMENT_REQUIRED = 402;

public static final int SC_FORBIDDEN = 403;

public static final int SC_NOT_FOUND = 404;

public static final int SC_METHOD_NOT_ALLOWED = 405;

public static final int SC_NOT_ACCEPTABLE = 406;

public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;

public static final int SC_REQUEST_TIMEOUT = 408;

public static final int SC_CONFLICT = 409;

public static final int SC_GONE = 410;

public static final int SC_LENGTH_REQUIRED = 411;

public static final int SC_PRECONDITION_FAILED = 412;

public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413;

public static final int SC_REQUEST_URI_TOO_LONG = 414;

public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;

public static final int SC_INTERNAL_SERVER_ERROR = 500;

public static final int SC_NOT_IMPLEMENTED = 501;

public static final int SC_BAD_GATEWAY = 502;

public static final int SC_SERVICE_UNAVAILABLE = 503;

public static final int SC_GATEWAY_TIMEOUT = 504;

public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

以上 HTTP 产状态码是由 HTTP/1.1 定义的.

 

方法

1.addCookie

public void addCookie(Cookie cookie);

在响应中增加一个cookie.可多次调用该方法以定义多个cookie.该方法应该在响应被提交之前调用.

 

2.addHeader

public void addHeader(String name,String value)

用给出的name和value,增加一个响应报头到响应中去.

 

3.containsHeader

public boolean containsHeader(String name);

检查是否设置了指定的响应头.

 

4.encodeRedirectURL

public String encodeRedirectURL(String url);

对 sendRedirect 方法使用的指定 URL进行编码.如果不需要编码,就直接返回这个 URL.

之所以提供这个附加的编码方法,是因为在 redirect 的情况下,决定是否对 URL 进行编码

的规则和一般情况有所不同.所给的 URL 必须是一个绝对 URL.相对 URL 不能被接收,

会抛出一个 IllegalArgumentException.

所有提供给 sendRedirect 方法的 URL 都应通过这个方法运行,这样才能确保会话跟踪

能够在所有浏览器中正常运行.

 

5.encodeURL

public String encodeURL(String url);

对包含 session ID 的 URL 进行编码.如果不需要编码,就直接返回这个 URL.Servlet

引擎必须提供 URL 编码方法,因为在有些情况下,我 们将不得不重写 URL,例如,在响

应对应的请求中包含一个有效的 session,但是这个 session 不能被非 URL 的(例如 cookie)

的手段来维 持.

所有提供给 Servlet 的 URL 都应通过这个方法运行,这样才能确保会话跟踪能够在所有

浏览器中正常运行.

 

6.sendError

public void sendError(int statusCode) throws IOException;

public void sendError(int statusCode, String message) throws IOException;

用给定的状态码发给客户端一个错误响应.如果提供了一个 message 参数,这将作为响

应体的一部分被发出,否则,服务器会返回错误代码所对应的标准信息.

调用这个方法后,响应立即被提交.在调用这个方法后,Servlet 不会再有更多的输出.

 

7.sendRedirect

public void sendRedirect(String location) throws IOException;

使用给定的路径,给客户端发出一个临时转向的响应(SC_MOVED_TEMPORARILY).

给 定 的 路 径 必 须 是 绝 对 URL . 相 对 URL 将 不 能 被 接 收 , 会 抛 出 一 个

IllegalArgumentException.

这个方法必须在响应被提交之前调用.调用这个方法后,响应立即被提交.在调用这个

方法后,Servlet 不会再有更多的输出.

 

8.setDateHeader

public void setDateHeader(String name, long date);

用一个给定的名称和日期值设置响应头,这里的日期值应该是反映自 1970-1-1 日

(GMT)以来的精确到毫秒的长整数.如果响应头已经被设置,新的值将覆盖当前的值.

 

9.setHeader

public void setHeader(String name, String value);

用一个给定的名称和域设置响应头.如果响应头已经被设置,新的值将覆盖当前的值.

 

10.setIntHeader

public void setIntHeader(String name, int value);

用一个给定的名称和整形值设置响应头.如果响应头已经被设置,新的值将覆盖当前的

值.

 

11.setStatus

public void setStatus(int statusCode);

这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的值.

 

以下的几个方法将被取消:

12.encodeRedirectUrl

public String encodeRedirectUrl(String url);

该方法被 encodeRedirectURL 取代.

14.encodeUrl

public String encodeUrl(String url);

该方法被 encodeURL 取代.

15.setStatus

public void setStatus(int statusCode, String message);

这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的值.如果

提供了一个 message,它也将会被作为响应体的一部分被发送.

 

 

 

HttpSession接口

定义

public interface HttpSession

这个接口被 Servlet 引擎用来实现在 HTTP 客户端和 HTTP 会话两者的关联.这种关联可能在多外连接和请求中持续一段给定的时间.session 用来在无状态的 HTTP 协议下越过多个请求页面来维持状态和识别用户.

一个 session 可以通过 cookie 或重写 URL 来维持.

 

方法

1.getAttribute

public Object getAttribute(String name);

2.getAttributeNames

public Enumeration getAttributeNames();

3.setAttribute

public void setAttribute(String name, Object o);

4.removeAttribute

public void removeAttribute(String name);

以上四个方法用于在HttpSession对象中读取,移除和设置属性,利用这些方法,可以在Session中维持客户的状态信息.

 

5.getCreationTime

public long getCreationTime();

返回建立 session 的时间,该时间是从 19701100:00:00GMT)以来的毫秒数.

 

6.getId

public String getId();

返回分配给这个session的唯一标识符. 该标识符由Servlet容器分配的,与具体的实现有关.

 

7.getLastAccessedTime

public long getLastAccessedTime();

返回客户端最后一次发出与这个 session 有关的请求的时间,如果这个session是新建立

,返回-1. 该时间是从 19701100:00:00GMT)以来的毫秒数.

 

8.getMaxInactiveInterval

public int getMaxInactiveInterval();

返回以毫秒为单位的时间. 这个时间表示客户端在不发出请求时,session Servlet容器维持的最长时间.超过这个时间间隔,Servlet容器将使Session失效. 在这个时间之后,Servlet 引擎可能被 Servlet 引擎终止.如果这个 session 不会被终

session 无效后再调用这个方法会抛出一个 IllegalStateException.

 

9.invalidate

public void invalidate();

该方法用于会话失效.所有绑定在该session上的数据都会被清除.

清除时通过HttpSessionBindingListener接口的valueUnbound 方法发出通告.

 

10.isNew

public boolean isNew();

返回一个布尔值以判断该session 是不是新的.如果客户端还不知道这个Session或者客户端没有选择加入Session,那么该方法返回true.,服务器使用基于CookieSession,而客户端禁用了Cookie,那么对每个请求,Session都是新的.

session 无效后再调用这个方法会抛出一个 IllegalStateException.

 

11.setMaxInactiveInterval

public int setMaxInactiveInterval(int interval);

设置一个秒数,这个秒数表示客户端在不发出请求时,session Servlet 引擎维持的最长时间.

 

以下这个方法将被取消

12.getSessionContext

public HttpSessionContext getSessionContext();

返回 session 在其中得以保持的环境变量.这个方法和其他所有 HttpSessionContext 的方

法一样被取消了.

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics