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 头部请求示例

以下示例使用 HttpServletRequestgetHeaderNames() 方法读取 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

您可以尝试以类似的方式使用所有方法。

广告