JSP - 客户端请求
当浏览器请求一个网页时,它向 web 服务器发送大量的信息,信息不能直接阅读,因为这些信息作为 HTTP 请求标题的一部分行进。关于这点你可以查看 HTTP Protocol 来了解更多的信息。
以下是来自浏览器端的重要的标题,在网络编程中你将会频繁的使用:
标题 | 描述 |
---|---|
Accept | 该标题指定了浏览器或其他客户可以处理的 MIME 类型。image/png 或 image/jpeg 的值是两种最常见的可能性。 |
Accept-Charset | 该标题指定了浏览器可以用来显示信息的字符集。例如 iso - 8859 - 1。 |
Accept-Encoding | 这个标题指定了浏览器知道如何处理的编码类型。gzip 或 compressare 的值是两种最常见的可能性。 |
Accept-Language | 这个标题指定客户的首选语言,以防 servlet 可以产生多个语言的结果。例如英语,美语,俄语等。 |
Authorization | 这个标题是客户访问密码保护的 Web 页面时用来识别他们自己的。 |
Connection | 这个标题表明客户端是否能处理持续的 HTTP 连接。持续连接允许客户端或其他浏览器用单个请求检索多个文件。Keep-Alive 的值意味着应该使用持续连接 |
Content-Length | 该标题只适用于 POST 请求和以字节形式给出 POST 数据的大小。 |
Cookie | 这个标题为之前发送它们到浏览器的服务器返回 cookies。 |
Host | 这个标题指定主机和端口正如原始URL给出的一样。 |
If-Modified-Since | 这个标题表明,客户只想得到在指定日期后更改的页面。服务器发送一个代码,304 意味着 没有 修改标题如果没有更新的结果是可用的。 |
If-Unmodified-Since | 这个标题的作用与 if - modified – since 是相反的;它指定当且仅当文档比指定的日期要早时,操作应该成功。 |
Referer | 这个标题表示了引用的 Web 页面的 URL。例如,如果你在 Web 页面 1,点击一个链接到 Web 页面 2,当浏览器请求 Web 页面 2 时,web 页面 1 的 URL 是包含在引用标题中的。 |
User-Agent | 这个标题标识浏览器或其他做出请求的客户,对应不同类型的浏览器可以返回不同的内容。 |
HttpServletRequest 对象
该请求对象是 javax.servlet.http. HttpServletRequest 对象的一个实例。每次客户端请求一个页面时,JSP 引擎就会创建一个新的对象来表示这个请求。
请求对象提供方法来获取 HTTP 标题信息,包括表单数据,cookies,HTTP 方法等。
有以下重要的方法可用于读取 JSP 程序中的 HTTP 标题。有了 HttpServletRequest 对象,这些方法都可用的,该对象代表客户端对网络服务器的请求。
S.N. | 方法 & 描述 |
---|---|
1 |
Cookie[] getCookies() 返回一个数组,其中包含客户端用这个请求发送的所有 Cookie 对象。 |
2 |
Enumeration getAttributeNames() 返回一个枚举包含此请求可用的属性的名称。 |
3 |
Enumeration getHeaderNames() 返回一个这个请求包含的所有标题名称的枚举。 |
4 |
Enumeration getParameterNames() 返回一个字符串对象的枚举,该字符串对象包括包含在此请求中的参数的名称。 |
5 |
HttpSession getSession() 返回与此请求相关的当前会话,或者如果该请求没有会话,那么就创建一个。 |
6 |
HttpSession getSession(boolean create) 返回与这个请求相关的当前的HttpSession或,如果没有当前会话并且 create 为真,那么返回一个新的会话。 |
7 |
Locale getLocale() 返回客户会接受内容的首选区域设置,基于所包含的 accept – language 标题 |
8 |
Object getAttribute(String name) 作为一个对象返回指定属性的值,如果指定的名称没有属性,返回 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) 将指定的请求标题的值作为一个字符串返回。 |
15 |
String getMethod() 返回生成该请求的 HTTP 方法的名称,比如 GET,POST,或 PUT。 |
16 |
String getParameter(String name) 将一个请求参数的值作为字符串返回,如果参数不存在,返回 null。 |
17 |
String getPathInfo() 返回与客户端生成请求时发送的 URL 相关联的任何额外的路径信息。 |
18 |
String getProtocol() 返回请求协议的名称和版本。 |
19 |
String getQueryString() 返回在路径后包含在请求 URL 的查询字符串。 |
20 |
String getRemoteAddr() 返回发送请求的客户端的互联网协议(IP)地址。 |
21 |
String getRemoteHost() 返回发送请求的客户机的全称。 |
22 |
String getRemoteUser() 如果用户已经通过身份验证,就返回发出这一请求的登录用户,如果用户没有被验证,那么返回 null。 |
23 |
String getRequestURI() 从取决于 HTTP 请求首行的查询字符串的协议名称中返回请求 URL 的一部分。 |
24 |
String getRequestedSessionId() 返回客户端指定的会话 ID。 |
25 |
String getServletPath() 返回调用 JSP 的请求 URL 的部分。 |
26 |
String[] getParameterValues(String name) 返回一个字符串对象数组,其中包含所有的给定的请求参数的值,如果参数不存在,那么返回 null。 |
27 |
boolean isSecure() 返回一个布尔值表示是否使用一个安全通道发出了这个请求,比如 HTTPS。 |
28 |
int getContentLength() 以字节为单位,返回请求的主体长度并通过输入流使其可用,如果长度是未知的,那么返回 -1。 |
29 |
int getIntHeader(String name) 作为 int 返回指定请求标题的值。 |
30 |
int getServerPort() 返回收到这个请求的端口号。 |
HTTP 标题请求实例
下面是使用 HttpServletRequest 的 getHeaderNames() 方法读取 HTTP 标题信息的实例。该方法返回一个枚举,包含与当前 HTTP 请求相关的标题信息。
一旦得到一个枚举,我们可以以标准的方式循环枚举,使用 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 中并试图访问它。这将产生的如下所示的结果:
HTTP 标题请求实例
标题名称 | 标题值 |
---|---|
accept | */* |
accept-language | en-us |
user-agent | Mozilla/4.0 (compatible; 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 |
想要用其他方法变得更加舒服,你可以用相同的方法试试上面列出的几个方法。