- 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-Java Bean
- JSP - 自定义标签
- JSP——表达式语言
- JSP——异常处理
- JSP-调试
- JSP-安全性
- JSP-国际化
- JSP 有用资源
- JSP - 问题与解答
- JSP - 快速指南
- JSP - 有用的资源
- JSP - 讨论
JSP - 客户请求
在本章中,我们将讨论 JSP 中的客户端请求。当浏览器请求网页时,它会向网络服务器发送大量信息。该信息无法直接读取,因为该信息作为 HTTP 请求标头的一部分进行传输。您可以检查HTTP 协议以获取更多信息。
下表列出了来自浏览器的重要标头信息。此信息经常用于网络编程 -
编号 | 标题和描述 |
---|---|
1 | 接受 该标头指定浏览器或其他客户端可以处理的MIME类型。image/png或image/jpeg的值是两种最常见的可能性。 |
2 | 接受字符集 该标头指定浏览器可用于显示信息的字符集。例如,ISO-8859-1。 |
3 | 接受编码 该标头指定浏览器知道如何处理的编码类型。gzip或compress的值是两种最常见的可能性。 |
4 | 接受语言 此标头指定客户端的首选语言,以防 servlet 可以以多种语言生成结果。例如en、en-us、ru等。 |
5 | 授权 客户端在访问受密码保护的网页时使用此标头来识别自己的身份。 |
6 | 联系 该标头指示客户端是否可以处理持久 HTTP 连接。持久连接允许客户端或其他浏览器通过单个请求检索多个文件。Keep-Alive值意味着应使用持久连接。 |
7 | 内容长度 此标头仅适用于POST请求,并给出 POST 数据的大小(以字节为单位)。 |
8 | 曲奇饼 此标头将 cookie 返回到之前将 cookie 发送到浏览器的服务器。 |
9 | 主持人 此标头指定原始 URL 中给出的主机和端口。 |
10 | 如果-修改-自 此标头表明客户端仅需要在指定日期之后更改的页面。服务器发送代码 304,这意味着如果没有更新的结果可用,则未修改标头。 |
11 | 如果-未修改-自 该标头与If-Modified-Since相反;它指定仅当文档早于指定日期时操作才应成功。 |
12 | 推荐人 该标头指示引用网页的 URL。例如,如果您在网页 1 上单击指向网页 2 的链接,则当浏览器请求网页 2 时,网页 1 的 URL 将包含在 Referer 标头中。 |
13 | 用户代理 此标头标识发出请求的浏览器或其他客户端,并可用于向不同类型的浏览器返回不同的内容。 |
HttpServletRequest 对象
request 对象是javax.servlet.http.HttpServletRequest对象的实例。每次客户端请求页面时,JSP 引擎都会创建一个新对象来表示该请求。
request对象提供了获取HTTP头信息的方法,包括表单数据、cookie、HTTP方法等。
下表列出了可用于在 JSP 程序中读取 HTTP 标头的重要方法。这些方法可用于HttpServletRequest对象,该对象表示客户端对 Web 服务器的请求。
编号 | 方法及说明 |
---|---|
1 | Cookie[] getCookies() 返回一个数组,其中包含客户端通过此请求发送的所有 Cookie 对象。 |
2 | 枚举 getAttributeNames() 返回一个枚举,其中包含可用于此请求的属性的名称。 |
3 | 枚举 getHeaderNames() 返回此请求包含的所有标头名称的枚举。 |
4 | 枚举 getParameterNames() 返回 String 对象的枚举,其中包含此请求中包含的参数名称。 |
5 | HttpSession getSession() 返回与此请求关联的当前会话,或者如果该请求没有会话,则创建一个会话。 |
6 | HttpSession getSession(布尔创建) 返回与此请求关联的当前 HttpSession,或者,如果没有当前会话并且 create 为 true,则返回一个新会话。 |
7 | 区域设置 getLocale() 根据 Accept-Language 标头,返回客户端接受内容的首选区域设置。 |
8 | 对象 getAttribute(字符串名称) 以对象形式返回指定属性的值,如果给定名称的属性不存在,则返回 null。 |
9 | ServletInputStream 获取输入流() 使用 ServletInputStream 以二进制数据形式检索请求正文。 |
10 | 字符串 getAuthType() 返回用于保护 servlet 的身份验证方案的名称,例如“BASIC”或“SSL”,如果 JSP 不受保护,则返回 null。 |
11 | 字符串 getCharacterEncoding() 返回此请求正文中使用的字符编码的名称。 |
12 | 字符串 getContentType() 返回请求正文的 MIME 类型,如果类型未知,则返回 null。 |
13 | 字符串 getContextPath() 返回请求 URI 中指示请求上下文的部分。 |
14 | String getHeader(字符串名称) 以字符串形式返回指定请求标头的值。 |
15 | 字符串获取方法() 返回发出此请求所使用的 HTTP 方法的名称,例如 GET、POST 或 PUT。 |
16 | 字符串获取参数(字符串名称) 以字符串形式返回请求参数的值,如果参数不存在则返回 null。 |
17 号 | 字符串 getPathInfo() 返回与客户端发出此请求时发送的 URL 关联的任何额外路径信息。 |
18 | 字符串 getProtocol() 返回请求使用的协议的名称和版本。 |
19 | 字符串 getQueryString() 返回请求 URL 中路径后面包含的查询字符串。 |
20 | 字符串 getRemoteAddr() 返回发送请求的客户端的 Internet 协议 (IP) 地址。 |
21 | 字符串 getRemoteHost() 返回发送请求的客户端的完全限定名称。 |
22 | 字符串 getRemoteUser() 如果用户已通过身份验证,则返回发出此请求的用户的登录名;如果用户尚未通过身份验证,则返回 null。 |
23 | 字符串 getRequestURI() 返回此请求的 URL 部分,从协议名称到 HTTP 请求第一行中的查询字符串。 |
24 | 字符串 getRequestedSessionId() 返回客户端指定的会话 ID。 |
25 | 字符串 getServletPath() 返回此请求的 URL 中调用 JSP 的部分。 |
26 | String[] getParameterValues(字符串名称) 返回一个 String 对象数组,其中包含给定请求参数的所有值;如果参数不存在,则返回 null。 |
27 | 布尔值 isSecure() 返回一个布尔值,指示此请求是否是使用安全通道(例如 HTTPS)发出的。 |
28 | int getContentLength() 返回请求正文的长度(以字节为单位)并由输入流提供,如果长度未知,则返回 -1。 |
29 | int getIntHeader(字符串名称) 以 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 标头请求示例
标头名称 | 标头值 |
---|---|
接受 | */* |
接受语言 | en-us |
用户代理 | Mozilla/4.0(兼容;MSIE 7.0;Windows NT 5.1;Trident/4.0;InfoPath.2;MS-RTC LM 8) |
接受编码 | gzip、压缩 |
主持人 | 本地主机:8080 |
联系 | 活着 |
缓存控制 | 无缓存 |
您可以尝试以类似的方式处理所有方法。