JSP客户端请求

JSP客户端请求

在本章中,我们将在JSP中讨论和学习客户端请求。当浏览器请求网页时,它会向Web服务器发送大量信息。这些信息不能直接读取,因为这些信息作为HTTP请求标头的一部分。可以通过HTTP协议以了解更多信息。

下表列出了浏览器中的重要HTTP请求头信息。这些信息经常在Web编程中使用 -

编号 请求头 描述
1 Accept 此请求头指定浏览器或其他客户端可以处理的MIME类型。 image/pngimage/jpeg是两种最常见的值。
2 Accept-Charset 此请求头指定浏览器可用于显示信息的字符集。 例如:ISO-8859-1UTF-8GB2312等。
3 Accept-Encoding 此请求头指定浏览器知道如何处理的编码类型。gzipcompress是两种最常见的值。
4 Accept-Language 此请求头指定客户端的首选语言,以防servlet可以使用多种语言生成结果。例如:enen-usru
5 Authorization 访问受密码保护的网页时,客户端使用此请求头来标识自己。
6 Connection 此请求头指示客户端是否可以处理持久的HTTP连接。 持久连接允许客户端或其他浏览器通过单个请求检索多个文件。如果是Keep-Alive值表示使用持久连接。
7 Content-Length 此请求头仅适用于POST请求,并以字节为单位给出POST数据的大小。
8 Cookie 此请求头将返回给先前发送到服务器的cookie到浏览器。
9 Host 此请求头指定原始URL中给出的主机和端口。
10 If-Modified-Since 此请求头表示客户端仅在指定日期之后更改页面。 服务器发送代码304,表示如果没有较新的结果可用,则不修改标题。
11 If-Unmodified-Since 该请求头与If-Modified-Since相反; 它指定只有当文档比指定日期更早时,动作才能成功。
12 Referer 此请求头指示引荐网页的URL。 例如,如果位于网页A并单击链接到网页B,则当浏览器请求网页B时,网页A的URL包含在Referer标头中。

HttpServletRequest对象

request对象是javax.servlet.http.HttpServletRequest对象的一个实例。 每当客户端请求页面时,JSP引擎将创建一个新对象来表示该请求。

请求对象提供了获取包括表单数据,Cookie,HTTP方法等HTTP头信息的方法。

下表列出了可用于在JSP程序中读取HTTP头的重要方法。 HttpServletRequest对象可以使用这些方法,该对象代表Web服务器的客户端请求。

编号 方法 描述
1 Cookie[] getCookies() 返回一个数组,其中包含客户端使用此请求发送的所有Cookie对象。
2 Enumeration getAttributeNames() 返回枚举,其中包含此请求可用属性的名称。
3 Enumeration getHeaderNames() 返回此请求包含的所有头名称的枚举。
4 Enumeration getParameterNames() 返回此请求中包含的参数名称的String对象的枚举。
5 HttpSession getSession() 返回与此请求相关联的当前会话,或者如果请求没有会话,则自动创建一个会话。
6 HttpSession getSession(boolean create) 返回与此请求相关联的当前HttpSession,或者如果没有当前会话,并且createtrue,则返回创建一个新会话。
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方法的名称,例如:GETPOSTPUT
16 String getParameter(String name) String形式返回请求参数的值,如果该参数不存在,则返回null
17 String getPathInfo() 返回与客户端发出此请求时发送的URL相关联的任何额外的路径信息。
18 String getProtocol() 返回请求使用的协议的名称和版本。
19 String getQueryString() 返回路径后请求URL中包含的查询字符串。
20 String getRemoteAddr() 返回发送请求的客户端的Internet协议(IP)地址。
21 String getRemoteHost() 返回发送请求的客户端的完全限定名称。
22 String getRemoteUser() 如果用户已通过身份验证,则返回进行此请求的用户的登录名,如果用户未通过身份验证,则返回null
23 String getRequestURI() 将该请求URL的一部分从协议名称返回到HTTP请求的第一行中的查询字符串。
24 String getRequestedSessionId() 返回客户端指定的会话ID。
25 String getServletPath() 返回调用JSP的请求的URL部分。
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()方法来获取每个参数名称的名称。

首先打开Eclipse,创建一个动态Web项目:ClientRequest,其项目结构如下所示 -

创建一个JSP文件:index.jsp,其代码如下所示 -

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>客户端请求参数数据</title>
</head>
<body>
    <div style="margin: auto; width: 80%;">
        <h2>客户端请求头参数数据示例</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>
    </div>
</body>
</html>

执行上面示例代码,打开浏览器访问URL: http://localhost:8080/ClientRequest/index.jsp ,得到以下结果 -