在本章中,我们将讨论JSP中的客户端请求.当浏览器请求网页时,它会向Web服务器发送大量信息.无法直接读取此信息,因为此信息作为HTTP请求标头的一部分传播.您可以查看 HTTP协议以获取更多相关信息.
下表列出了重要内容来自浏览器的标题信息.此信息经常用于网络编程 :
S.No. | 标题&描述 |
---|---|
1 | 接受 此标头指定浏览器或其他客户端可以处理的 MIME 类型. image/png 或 image/jpeg 的值是两种最常见的可能性. |
2 | 接受 - Charset 此标头指定浏览器可用于显示信息的字符集.例如, ISO-8859-1 . |
3 | 接受编码 此标头指定浏览器知道如何处理的编码类型.值 gzip 或压缩是两种最常见的可能性. |
4 | 接受语言 此标头指定客户端的首选语言,以防servlet以多种语言生成结果.例如 en,en-us,ru 等. |
5 | 授权 客户端使用此标头在访问受密码保护的网页时标识自己. |
6 | 连接 此标头指示客户端是否可以处理持久HTTP连接.持久连接允许客户端或其他浏览器使用单个请求检索多个文件.值 Keep-Alive 表示应该使用持久连接. |
7 | 内容长度 此标头仅适用于 POST 请求,并以字节为单位给出POST数据的大小. |
8 | Cookie 此标头将Cookie返回给先前已将其发送到浏览器的服务器. |
9 | 主机 此标头指定原始网址中给出的主机和端口. |
10 | If-Modified -Since 此标题表示客户端只有在规范之后更改了页面约会日期.如果没有更新的结果,服务器发送代码304,这意味着未修改标题. |
11 | If-Unmodified-Since 此标题与 If-Modified-Since 相反;它指定只有在文档早于指定日期时才能成功. |
12 | Referer 此标头指示引用网页的URL.例如,如果您在网页1并单击指向网页2的链接,则当浏览器请求网页2时,网页1的URL将包含在Referer标题中. |
13 | 用户代理 此标题标识发出请求的浏览器或其他客户端,可用于将不同内容返回给不同类型的浏览器. |
请求对象是 javax.servlet.http.HttpServletRequest 对象的一个实例.每次客户端请求页面时,JSP引擎都会创建一个新对象来表示该请求.
请求对象提供了获取HTTP头信息的方法,包括表单数据,cookie, HTTP方法等
下表列出了可用于在JSP程序中读取HTTP头的重要方法.这些方法可用于 HttpServletRequest 对象,它表示客户端对webserver的请求.
S.No. | 方法&描述 |
---|---|
1 | Cookie [] getCookies() 返回一个数组,其中包含客户端通过此请求发送的所有Cookie对象. |
2 | Enumeration getAttributeNames() 返回包含此请求可用属性名称的Enumeration./p> |
3 | Enumeration getHeaderNames() 返回此请求包含的所有标题名称的枚举. |
4 | Enumeration getParameterNames() 返回String对象的枚举,其中包含此参数中包含的参数的名称的请求. |
5 | HttpSession getSession() 返回与此请求关联的当前会话,或者请求没有会话,创建一个. |
6 | HttpSession getSession(boolean create) 返回与此请求关联的当前HttpSession,或者,如果没有当前会话且create为true,则返回新会话. |
7 | Locale getLocale() 根据Accept-Language标头返回客户端将接受内容的首选语言环境. |
8 | Object getAttribute(String name) 以Object形式返回指定属性的值,如果不存在给定名称的属性,则返回null. |
9 | ServletInputStream getInputStream() 使用ServletInputStream以二进制数据的形式检索请求体. |
10 | String getAuthType() 返回用于保护servlet的身份验证方案的名称,例如"BASIC"或"SSL",如果是JSP,则返回null没有受到保护. |
11 | String getCharacterEncoding() 返回用于的字符编码的名称这个请求的正文. |
12 | String getContentType() 返回请求正文的MIME类型,如果类型为null不知道. |
13 | String getContextPath() 返回请求URI的一部分,表示请求的上下文. |
14 | String getHeader(String name) 返回值的值指定的请求标头为String. |
15 | String getMethod() 返回HTTP的名称用于此请求的方法,例如,GET,POST或PUT. |
16 | String getParameter(S tring name) 以String形式返回请求参数的值,如果参数不存在,则返回null. |
17 | String getPathInfo() 返回与客户端发出此请求时发送的URL关联的所有额外路径信息. |
18 | String getProtocol() 返回请求使用的协议的名称和版本. |
19 | String getQueryString() 返回路径后请求URL中包含的查询字符串. |
20 | String getRemoteAddr() 返回I发送请求的客户端的nternet协议(IP)地址. |
21 | String getRemoteHost() 返回发送请求的客户端的完全限定名称. |
22 | String getRemoteUser() 如果用户已经过身份验证,则返回发出此请求的用户的登录名;如果用户未经过身份验证,则返回null. |
23 | String getRequestURI() 从协议名称返回此请求的URL部分,直到HTTP请求第一行中的查询字符串. |
24 | String getRequest edSessionId() 返回客户端指定的会话ID. |
25 | String getServletPath() 返回此请求调用JSP的URL的一部分. |
26 | String [] getParameterValues(String name) 返回包含给定请求参数所具有的所有值的String对象数组,如果参数不存在,则返回null. |
27 | boolean isSecure() 返回一个布尔值,指示此请求是否是使用安全通道(如HTTPS)进行的. |
28 | int getContentLength() 返回请求体的长度(以字节为单位),并由输入流提供,如果长度未知,则返回-1. |
29 | int getIntHeader(String name) 以int形式返回指定请求标头的值. |
30 | int getServerPort() 返回收到此请求的端口号. |
以下是使用 getHeaderNames的示例() HttpServletRequest 的方法来读取HTTP头信息.此方法返回一个Enumeration,其中包含与当前HTTP请求关联的标头信息.
一旦我们有了Enumeration,我们就可以以标准方式循环Enumeration.我们将使用 hasMoreElements() 方法来确定何时停止以及 nextElement() 方法来获取每个参数名称的名称.
<%@ page import = "java.io.*,java.util.*" %> <html> <head> <title>HTTP Header Request Example</title> </head> <body> <center> <h2>HTTP Header Request Example</h2> <table width = "100%" border = "1" align = "center"> <tr bgcolor = "#949494"> <th>Header Name</th> <th>Header Value(s)</th> </tr> <% Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } %> </table> </center> </body> </html>
现在让我们将上面的代码放在 main.jsp 中并尝试访问它.
标题名称 | 标题值 |
---|---|
accept | */* |
accept-language | en-us |
user- agent | Mozilla/4.0(兼容; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8) |
accept-encoding | gzip,deflate |
host | localhost:8080 |
connection | Keep-Alive |
cache-control | no-cache |
您可以尝试以类似的方式处理所有方法.