HttpServletRequest和HttpServletResponse(1)

本文详细介绍了HTTP请求和响应的基本概念,重点讲解了HttpServletRequest和HttpServletResponse接口中的关键方法及其应用场景。

.1.7 HttpServletRequest和HttpServletResponse(1)

在javax.servlet.http包中,定义了HttpServletRequest和HttpServletResponse这两个接口。这两个接口分别继承自
javax.servlet.ServletRequest和javax.servlet.ServletResponse接口。在HttpServletRequest接口中新增的常用方法如下:

public java.lang.String getContextPath()

返回请求URI中表示请求上下文的部分,上下文路径是请求URI的开始部分。上下文路径总是以斜杠(/)开头,但结束没有斜杠(/)。在默认(根)上下文中,这个方法返回空字符串""。例如,请求URI为“/sample/test”,调用该方法返回路径为“/sample”。

public Cookie[] getCookies()

返回客户端在此次请求中发送的所有Cookie对象。

public java.lang.String getHeader(java.lang.String name)

返回名字为name的请求报头的值。如果请求中没有包含指定名字的报头,这个方法返回null。

public java.util.Enumeration getHeaderNames()

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

public java.util.Enumeration getHeaders(java.lang.String name)

返回名字为name的请求报头所有的值的枚举集合。

public java.lang.String getMethod()

返回此次请求所使用的HTTP方法的名字,例如,GET、POST或PUT。

public java.lang.String getPathInfo()

返回与客户端发送的请求URL相联系的额外的路径信息。额外的路径信息是跟在Servlet的路径之后、查询字符串之前的路径,并以斜杠(/)字符开始。例如,假定在web.xml文件中MyServlet类映射的URL是:/myservlet/*,用户请求的URL是:http://localhost:8080/ ch02/myservlet/test,当我们在HttpServletRequest对象上调用getPathInfo()时,该方法将返回/test。如果没有额外的路径信息,getPathInfo()方法将返回null。

public java.lang.String getPathTranslated()

将额外的路径信息转换为真实的路径。例如,在上面的例子中假定ch02 Web应用程序位于D:/OpenSource/apache-tomcat-6.0.16/webapps/ch02目录,当用户请求http://localhost: 8080/ch02/myservlet/test时,在请求对象上调用getPathTranslated()方法将返回D:/OpenSource/apache-tomcat-6.0.16/webapps/ch02/test。

public java.lang.String getQueryString()

返回请求URL中在路径后的查询字符串。如果在URL中没有查询字符串,该方法返回null。例如,有如下的请求URL:

http://localhost:8080/ch02/logon.jsp?action=logon

调用getQueryString()方法将返回action=logon。

public java.lang.String getRequestURI()

返回请求URL中从主机名到查询字符串之间的部分。例如:

请求行         返回值
POST /some/path.html HTTP/1.1    /some/path.html
GET http://foo.bar/a.html HTTP/1.0   /a.html
HEAD /xyz?a=b HTTP/1.1     /xyz

 

public java.lang.StringBuffer getRequestURL()

重新构造客户端用于发起请求的URL。返回的URL包括了协议、服务器的名字、端口号和服务器的路径,但是不包括查询字符串参数。


要注意的是,如果请求使用RequestDispatcher.forward(ServletRequest, ServletResponse)方法被转发到另一个Servlet中,那么你在这个Servlet中调用getRequestURL(),得到的将是获取RequestDispatcher对象时使用的URL,而不是原始的请求URL。

public java.lang.String getServletPath()

返回请求URI中调用Servlet的部分。这部分的路径以斜杠(/)开始,包括了Servlet的名字或者路径,但是不包括额外的路径信息和查询字符串。例如,假定在web.xml文件中MyServlet类映射的URL是:/myservlet/*,用户请求的URL是:http://localhost:8080/ ch02/myservlet/test,当我们在HttpServletRequest对象上调用getServletPath ()时,该方法将返回/myservlet。如果用于处理请求的Servlet与URL样式“/*”相匹配,那么这个方法将返回空字符串("")。

public HttpSession getSession()

返回和此次请求相关联的Session,如果没有给客户端分配Session,则创建一个新的Session。

public HttpSession getSession(boolean create)

返回和此次请求相关联的Session,如果没有给客户端分配Session,而create参数为true,则创建一个新的Session。如果create参数为false,而此次请求没有一个有效的HttpSession,则返回null。

在HttpServletResponse接口中,新增的常用方法如下:

public void addCookie(Cookie cookie)

增加一个Cookie到响应中。这个方法可以被多次调用,用于设置多个Cookie。

public void addHeader(java.lang.String name, java.lang.String value)

 

2.1.7 HttpServletRequest和HttpServletResponse(2)

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

public boolean containsHeader(java.lang.String name)

判断以name为名字的响应报头是否已经设置。

public java.lang.String encodeRedirectURL(java.lang.String url)

使用Session ID对用于重定向的url进行编码,以便用于sendRedirect()方法中。如果该url不需要编码,则返回未改变的url。(关于这个方法的使用,请参见第5章)

public java.lang.String encodeURL(java.lang.String url)

使用Session ID对指定的url进行编码。如果该url不需要编码,则返回未改变的url。(关于这个方法的使用,请参见第5章)

public void sendError(int sc) throws java.io.IOException

使用参数sc表示的状态代码发送一个错误响应到客户端,同时清除缓存。如果响应已经被提交,这个方法将抛出IllegalStateException异常。

public void sendError(int sc, java.lang.String msg)
throws java.io.IOException

使用指定的状态代码发送一个错误响应到客户端。服务器默认会创建一个包含了指定消息的服务器端错误页面作为响应,设置内容类型为“text/html”。如果Web应用程序已经声明了对应于指定状态代码的错误页面,则服务器会将这个页面发送给客户端,而不理会参数msg指定的错误消息。如果响应已经被提交,这个方法将抛出IllegalStateException异常。

public void sendRedirect(java.lang.String location)
throws java.io.IOException

发送一个临时的重定向响应到客户端,让客户端访问新的URL。如果指定的位置是相对URL,Servlet容器在发送响应到客户端之前,必须将相对URL转换为绝对URL。如果响应已经被提交,这个方法将抛出IllegalStateException异常。

public void setHeader(java.lang.String name, java.lang.String value)

用给出的name和value,设置一个响应报头。如果这个报头已经被设置,新的值将覆盖先前的值。

public void setStatus(int sc)

为响应设置状态代码。

此外,在HttpServletResponse接口中,还定义了一组整型的静态常量,用于表示HTTP错误代码,这些错误代码对应于HTTP/1.1中的错误代码。关于这些错误代码常量,请参看HttpServletResponse接口的API文档。

要想更好地理解HttpServletRequest和HttpServletResponse的使用,应该结合HTTP协议来看,彼此对照。HTTP协议的介绍参见附录B。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值