- Servlet 教程
- Servlet - 主页
- Servlet - 概述
- Servlet - 环境设置
- Servlet - 生命周期
- Servlet - 示例
- Servlet - 表单数据
- Servlet - 客户端请求
- Servlet - 服务器响应
- Servlet - Http 代码
- Servlet - 编写过滤器
- Servlet - 例外
- Servlet - Cookie 处理
- Servlet - 会话跟踪
- Servlet - 数据库访问
- Servlet - 文件上传
- Servlet - 处理日期
- Servlet - 页面重定向
- Servlet - 点击计数器
- Servlet - 自动刷新
- Servlet - 发送电子邮件
- Servlet - 包装
- Servlet - 调试
- Servlet - 国际化
- Servlet - 注释
- Servlet 有用资源
- Servlet - 问题与解答
- Servlet - 快速指南
- Servlet - 有用的资源
- Servlet - 讨论
Servlet - 客户端 HTTP 请求
当浏览器请求网页时,它会向 Web 服务器发送大量无法直接读取的信息,因为这些信息作为 HTTP 请求标头的一部分传输。您可以检查HTTP 协议以获取更多信息。
以下是来自浏览器端的重要标头信息,您在 Web 编程中会经常使用 -
先生。 | 标题和描述 |
---|---|
1 | 接受 该标头指定浏览器或其他客户端可以处理的 MIME 类型。image/png或image/jpeg的值是两种最常见的可能性。 |
2 | 接受字符集 该标头指定浏览器可用于显示信息的字符集。例如 ISO-8859-1。 |
3 | 接受编码 该标头指定浏览器知道如何处理的编码类型。gzip或compress的值是两种最常见的可能性。 |
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 将包含在 Referrer 标头中。 |
13 | 用户代理 此标头标识发出请求的浏览器或其他客户端,并可用于向不同类型的浏览器返回不同的内容。 |
读取 HTTP 标头的方法
有以下方法可用于读取 servlet 程序中的 HTTP 标头。这些方法可用于HttpServletRequest对象
先生。 | 方法及说明 |
---|---|
1 | Cookie[] getCookies() 返回一个数组,其中包含客户端通过此请求发送的所有 Cookie 对象。 |
2 | 枚举 getAttributeNames() 返回一个枚举,其中包含可用于此请求的属性的名称。 |
3 | 枚举 getHeaderNames() 返回此请求包含的所有标头名称的枚举。 |
4 | 枚举 getParameterNames() 返回包含此请求中包含的参数名称的字符串对象的枚举 |
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()方法来获取每个参数名称
// 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 content type response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "HTTP Header Request Example"; 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 将生成以下结果 -
HTTP Header Request Example
Header Name Header Value(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