- JSP 基础教程
- JSP - 首页
- JSP - 概述
- JSP - 环境搭建
- JSP - 架构
- JSP - 生命周期
- JSP - 语法
- JSP - 指令
- JSP - 动作
- JSP - 隐式对象
- JSP - 客户端请求
- JSP - 服务器响应
- JSP - HTTP 状态码
- JSP - 表单处理
- JSP - 编写过滤器
- JSP - Cookie 处理
- JSP - 会话跟踪
- JSP - 文件上传
- JSP - 处理日期
- JSP - 页面重定向
- JSP - 点击计数器
- JSP - 自动刷新
- JSP - 发送邮件
- 高级 JSP 教程
- JSP - 标准标签库
- JSP - 数据库访问
- JSP - XML 数据
- JSP - JavaBean
- JSP - 自定义标签
- JSP - 表达式语言
- JSP - 异常处理
- JSP - 调试
- JSP - 安全
- JSP - 国际化
- JSP 有用资源
- JSP - 问答
- JSP - 快速指南
- JSP - 有用资源
- JSP - 讨论
JSP - 客户端请求
在本章中,我们将讨论 JSP 中的客户端请求。当浏览器请求一个网页时,它会向 Web 服务器发送大量信息。这些信息无法直接读取,因为这些信息作为 HTTP 请求头的一部分传输。您可以查看 HTTP 协议 以获取更多信息。
下表列出了来自浏览器的重要的头部信息。这些信息在 Web 编程中经常使用:
序号 | 头部 & 描述 |
---|---|
1 | Accept 此头部指定浏览器或其他客户端可以处理的 **MIME** 类型。**image/png** 或 **image/jpeg** 的值是最常见的两种可能性。 |
2 | Accept-Charset 此头部指定浏览器可以使用哪些字符集来显示信息。例如,**ISO-8859-1**。 |
3 | Accept-Encoding 此头部指定浏览器知道如何处理的编码类型。**gzip** 或 **compress** 的值是最常见的两种可能性。 |
4 | Accept-Language 如果 servlet 可以生成多种语言的结果,则此头部指定客户端的首选语言。例如 **en, en-us, ru** 等。 |
5 | Authorization 此头部用于客户端在访问受密码保护的网页时进行身份识别。 |
6 | Connection 此头部指示客户端是否可以处理持久性 HTTP 连接。持久性连接允许客户端或其他浏览器使用单个请求检索多个文件。**Keep-Alive** 的值表示应使用持久性连接。 |
7 | Content-Length 此头部仅适用于 **POST** 请求,并以字节为单位给出 POST 数据的大小。 |
8 | Cookie 此头部将 Cookie 返回给之前将其发送到浏览器的服务器。 |
9 | Host 此头部指定原始 URL 中给出的主机和端口。 |
10 | If-Modified-Since 此头部指示客户端仅在指定日期之后更改了页面时才需要该页面。如果没有任何更新的结果可用,服务器将发送代码 304,这意味着 **Not Modified** 头部。 |
11 | If-Unmodified-Since 此头部与 **If-Modified-Since** 相反;它指定操作仅在文档早于指定日期时才应成功。 |
12 | Referer 此头部指示引用网页的 URL。例如,如果您位于网页 1 并单击指向网页 2 的链接,则当浏览器请求网页 2 时,网页 1 的 URL 将包含在 Referer 头部中。 |
13 | User-Agent 此头部标识发出请求的浏览器或其他客户端,可用于向不同类型的浏览器返回不同的内容。 |
HttpServletRequest 对象
request 对象是 **javax.servlet.http.HttpServletRequest** 对象的一个实例。每次客户端请求一个页面时,JSP 引擎都会创建一个新对象来表示该请求。
request 对象提供方法来获取 HTTP 头部信息,包括 **表单数据、Cookie、HTTP 方法** 等。
下表列出了可在 JSP 程序中用于读取 HTTP 头部的重要方法。这些方法可用于表示客户端对 Web 服务器请求的 HttpServletRequest 对象。
序号 | 方法 & 描述 |
---|---|
1 | Cookie[] getCookies() 返回一个包含客户端随此请求发送的所有 Cookie 对象的数组。 |
2 | Enumeration getAttributeNames() 返回一个包含此请求可用的属性名称的枚举。 |
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(String name) 将请求参数的值作为 String 返回,或者如果参数不存在,则返回 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() 返回此请求的 URL 中从协议名称到 HTTP 请求第一行中的查询字符串的部分。 |
24 | String getRequestedSessionId() 返回客户端指定的会话 ID。 |
25 | String getServletPath() 返回此请求的 URL 中调用 JSP 的部分。 |
26 | String[] getParameterValues(String name) 返回一个包含给定请求参数具有的所有值的 String 对象数组,或者如果参数不存在,则返回 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 头部请求示例
头部名称 | 头部值(s) |
---|---|
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 |
您可以尝试以类似的方式使用所有方法。