JSP 客户端请求

  • 客户端请求

    在本章中,我们将讨论JSP中的客户端请求。当浏览器请求网页时,它会将大量信息发送到Web服务器。无法直接读取此信息,因为此信息作为HTTP请求标头的一部分传播。下表列出了来自浏览器的重要标头信息。此信息在Web编程中经常使用-
    请求头 描述
    Accept 此标头指定浏览器或其他客户端可以处理的MIME类型。 image/png或image/jpeg的值是两种最常见的可能性。
    Accept-Charset 此标头指定浏览器可用来显示信息的字符集。例如,ISO-8859-1或者UTF-8。
    Accept-Encoding 此标头指定浏览器知道如何处理的编码类型。 gzip或compress的值是两种最常见的可能性。
    Accept-Language 如果servlet可以使用多种语言生成结果,则此标头指定客户机的首选语言。例如en,en-us,ru等。
    Authorization 客户端使用此标头在访问受密码保护的网页时标识自己。
    Connection 此标头指示客户端是否可以处理持久性HTTP连接。持久连接允许客户端或其他浏览器通过单个请求检索多个文件。保持活动的值表示应使用持久连接。
    Content-Length 此标头仅适用于POST请求,并以字节为单位给出POST数据的大小。
    Cookie 此标头将cookie返回到先前已将cookie发送到浏览器的服务器。
    Host 此标头指定原始URL中给定的主机和端口。
    10If-Modified-Since 此标头指示客户仅在指定日期之后更改页面时才需要该页面。服务器发送代码304,如果没有可用的新结果,则表示未修改的标头。
    11If-Unmodified-Since 此标头与If-Modified-Since相反;它指定仅当文档早于指定日期时,操作才能成功。
    12Referer 该标题指示引荐网页的URL。例如,如果您在网页1上,然后单击指向网页2的链接,则当浏览器请求网页2时,Referer标头中将包含网页1的URL。
    13User-Agent 该标头标识了发出请求的浏览器或其他客户端,可用于将不同的内容返回给不同类型的浏览器
  • HttpServletRequest 对象

    HttpServletRequest对象是javax.servlet.http.HttpServletRequest对象的实例。每次客户请求页面时,JSP引擎都会创建一个新对象来表示该请求。request对象提供获取HTTP标头信息的方法,包括表单数据,cookie,HTTP方法等。下表列出了可用于读取JSP程序中的HTTP标头的重要方法。这些方法可用于HttpServletRequest对象,该对象表示对Web服务器的客户端请求。
    方法 描述
    Cookie[] getCookies() 返回一个包含客户端与此请求发送的所有Cookie对象的数组。
    Enumeration getAttributeNames() 返回一个枚举,其中包含可用于此请求的属性的名称。
    Enumeration getHeaderNames() 返回此请求包含的所有标头名称的枚举。
    Enumeration getParameterNames() 返回String对象的枚举,其中包含此请求中包含的参数的名称。
    HttpSession getSession() 返回与此请求关联的当前会话,或者如果该请求没有会话,则创建一个。
    HttpSession getSession(boolean create) 返回与此请求关联的当前HttpSession;如果没有当前会话并且create为true,则返回一个新会话。
    Locale getLocale() 根据Accept-Language标头返回客户端将在其中接受内容的首选Locale。
    Object getAttribute(String name) 将命名属性的值作为Object返回;如果不存在给定名称的属性,则返回null。
    ServletInputStream getInputStream() 使用ServletInputStream检索请求的主体作为二进制数据。
    String getAuthType() 返回用于保护servlet的身份验证方案的名称,例如“ BASIC”或“ SSL”;如果未保护JSP,则返回null。
    String getCharacterEncoding() 返回此请求正文中使用的字符编码的名称。
    String getContentType() 返回请求正文的MIME类型;如果类型未知,则返回null。
    String getContextPath() 返回请求URI中指示请求上下文的部分。
    String getHeader(String name) 以字符串形式返回指定请求标头的值。
    String getMethod() 返回发出此请求的HTTP方法的名称,例如GET,POST或PUT。
    String getParameter(String name) 以字符串形式返回请求参数的值,如果参数不存在,则返回null。
    String getPathInfo() 返回与客户端发出此请求时发送的URL关联的所有其他路径信息。
    String getProtocol() 返回请求使用的协议的名称和版本。
    String getQueryString() 返回路径后面的请求URL中包含的查询字符串。
    String getRemoteAddr() 返回发送请求的客户端的Internet协议(IP)地址。
    String getRemoteHost() 返返回发送请求的客户端的标准名称。
    String getRemoteUser() 如果用户已通过身份验证,则返回发出此请求的用户的登录名;如果用户未通过身份验证,则返回null。
    String getRequestURI() 返回此请求的URL的一部分,从协议名称到HTTP请求第一行中的查询字符串。
    String getRequestedSessionId() 返回客户端指定的会话ID。
    String getServletPath() 返回此请求的URL中调用JSP的部分。
    String[] getParameterValues(String name) 返回一个String对象数组,其中包含给定请求参数具有的所有值;如果该参数不存在,则返回null。
    boolean isSecure() 返回一个布尔值,指示此请求是否使用安全通道(例如HTTPS)发出。
    int getContentLength() 返回请求主体的长度(以字节为单位),并由输入流提供;如果长度未知,则返回-1。
    int getIntHeader(String name) 以int形式返回指定请求标头的值。
    int getServerPort() 返回接收到此请求的端口号
  • HTTP标头请求示例

    以下是使用HttpServletRequestgetHeaderNames()方法读取HTTP标头信息的示例。此方法返回一个Enumeration,其中包含与当前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>
    
    尝试一下
    您可以尝试以类似方式处理所有方法。