Servlet-客户端请求

本文深入解析HTTP标头信息,涵盖重要标头如Accept、Authorization、Connection等的功能与用途,同时介绍如何利用HttpServletRequest对象读取这些标头,为网络编程提供实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


当浏览器请求网页时,它会将大量信息发送到Web服务器,该信息无法直接读取,因为该信息作为HTTP请求标头的一部分传播。
以下是来自浏览器端的重要标头信息,您将在网络编程中经常使用:

序号标头和说明
1Accept:此标头指定浏览器或其他客户端可以处理的MIME类型。值一般为image/pngimage/jpeg两种情况。
2Accept-Charset:此标头指定浏览器可用于显示信息的字符集。例如UTF-8。
3Accept-Encoding:此标头指定浏览器知道如何处理的编码类型。值一般为gzipcompress两种情况。
4Accept-Language:如果servlet可以使用多种语言生成结果,则此标头指定客户机的首选语言。例如en,en-us,ru等
5Authorization:客户端使用此标头在访问受密码保护的网页时标识自己。
6Connection:此标头指示客户端是否可以处理持久HTTP连接。持久连接允许客户端或其他浏览器通过单个请求检索多个文件。保持活动的值表示应使用持久连接。
7Content-Length:此标头仅适用于POST请求,并以字节为单位给出POST数据的大小。
8Cookie:此标头将cookie返回到先前已将其发送到浏览器的服务器。
9Host:此标头指定原始URL中给定的主机和端口。
10If-Modified-Since:此标头表示仅在指定日期之后更改页面,客户端才需要该页面。服务器发送代码304,如果没有可用的新结果,则表示未修改的标头。
11If-Unmodified-Since:此标头与If-Modified-Since相反;它指定仅当文档早于指定日期时,操作才能成功。
12Referer:此标头指示引荐网页的URL。例如,如果您在Web页1上并单击指向Web页2的链接,则当浏览器请求Web页2时,Referrer标头中将包含Web页1的URL。
13User-Agent:该标头标识了发出请求的浏览器或其他客户端,可用于将不同的内容返回给不同类型的浏览器。

读取HTTP标头的方法

有以下方法可用于读取servlet程序中的HTTP标头。这些方法可用于HttpServletRequest对象

序号方法与说明
1Cookie[] getCookies():返回一个数组,其中包含客户端与此请求一起发送的所有Cookie对象。
2Enumeration getAttributeNames():返回一个枚举,其中包含可用于此请求的属性的名称。
3Enumeration getHeaderNames():返回此请求包含的所有标头名称的枚举。
4Enumeration getParameterNames():返回一个String对象的枚举,其中包含此请求中包含的参数的名称
5HttpSession getSession():返回与此请求关联的当前的session,或者如果该请求没有session,则创建一个session。
6HttpSession getSession(boolean create):返回与此请求关联的当前的HttpSession;如果没有当前的session且create的值为true,则返回一个新的session。
7Locale getLocale():根据Accept-Language标头返回客户端将在其中接受内容的首选语言环境。
8Object getAttribute(String name):将命名属性的值作为Object返回;如果不存在给定名称的属性,则返回null。
9ServletInputStream getInputStream():使用ServletInputStream以二进制数据的形式检索请求的主体。
10String getAuthType():返回用于保护servlet的认证方案的名称,例如“ BASIC”或“ SSL”;如果未保护JSP,则返回null。
11String getCharacterEncoding():返回此请求正文中使用的字符编码的名称。
12String getContentType():返回请求正文的MIME类型;如果类型未知,则返回null。
13String getContextPath():返回请求URI中指示请求上下文的部分。
14String getHeader(String name):以字符串形式返回指定请求标头的值。
15String getMethod():返回发出此请求的HTTP方法的名称,例如GET,POST或PUT。
16String getParameter(String name):以字符串形式返回请求参数的值,如果参数不存在,则返回null。
17String getPathInfo():返回与客户端发出此请求时发送的URL相关的任何其他路径信息
18String getProtocol():返回请求的协议的名称和版本。
19String getQueryString():返回路径后面的请求URL中包含的查询字符串。
20String getRemoteAddr():返回发送请求的客户端的Internet协议(IP)地址。
21String getRemoteHost():返回发送请求的客户端的标准名称
22String getRemoteUser():如果用户已通过身份验证,则返回发出此请求的用户的登录名;如果用户未通过身份验证,则返回null。
23String getRequestURI():返回此请求的URL的一部分,从协议名称到HTTP请求第一行中的查询字符串。
24String getRequestedSessionId():返回客户端指定的会话ID。
25String getServletPath():返回此请求的URL中调用JSP的部分。
26String[] getParameterValues(String name):返回一个String对象数组,其中包含给定请求参数具有的所有值;如果该参数不存在,则返回null。
27boolean isSecure():返回一个布尔值,该布尔值指示是否使用安全通道(例如HTTPS)发出此请求。
28int getContentLength():返回请求主体的长度(以字节为单位),并由输入流提供;如果未知,则返回-1。
29int getIntHeader(String name):以int形式返回指定请求标头的值。
30int getServerPort():返回接收到该请求的端口号

HTTP标头请求示例

以下是使用HttpServletRequest的getHeaderNames()方法读取HTTP标头信息的示例。此方法返回一个Enumeration,其中包含与当前HTTP请求关联的标头信息。

一旦有了枚举,就可以使用hasMoreElements()方法确定何时停止并使用nextElement()方法获取每个参数名称,以标准方式循环枚举。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response Header
      response.setHeader("contentType","text/html;charset=UTF-8");
      response.setContentType("text/html");
      response.setCharacterEncoding("UTF-8");
 
      PrintWriter out = response.getWriter();
      String title = "HTTP标头请求示例";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
         "<th>Header Name</th><th>Header Value(s)</th>\n"+
         "</tr>\n"
      );
 
      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");
      }
      out.println("</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

在这里插入图片描述
上一篇:Servlet-表单数据
下一篇:Servlet-Http状态代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值