JSP - 客户请求


在本章中,我们将讨论 JSP 中的客户端请求。当浏览器请求网页时,它会向网络服务器发送大量信息。该信息无法直接读取,因为该信息作为 HTTP 请求标头的一部分进行传输。您可以检查HTTP 协议以获取更多信息。

下表列出了来自浏览器的重要标头信息。此信息经常用于网络编程 -

编号 标题和描述
1

接受

该标头指定浏览器或其他客户端可以处理的MIME类型。image/pngimage/jpeg的值是两种最常见的可能性。

2

接受字符集

该标头指定浏览器可用于显示信息的字符集。例如,ISO-8859-1

3

接受编码

该标头指定浏览器知道如何处理的编码类型。gzipcompress的值是两种最常见的可能性。

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
联系 活着
缓存控制 无缓存

您可以尝试以类似的方式处理所有方法。