HttpServletRequest详解:获取HTTP请求消息

Http Servlet Request 接口继承自 ServletRequest 接口,其主要作用是封装 HTTP 请求消息。由于 HTTP 请求消息分为请求行、请求消息头和请求消息体三部分。因此,在 HttpServletRequest 接口中定义了获取请求行、请求头和请求消息体的相关方法。
本节将针对常用的获取请求行和请求消息头的相关方法进行讲解,下节《 Java servlet获取form表单数据(参数) 》继续讲解如何通过 HttpServletRequest 接口获取用户提交的 form 表单数据。
获取请求行信息的相关方法 当访问 Servlet 时,所有请求消息将被封装到 HttpServletRequest 对象中,请求消息的请求行中包含请求方法、请求资源名、请求路径等信息,为了获取这些信息,HttpServletRequest 接口定义了一系列方法,如表 1 所示。
表 1 获取请求行信息的常用方法 表 1 列出了一系列用于获取请求消息行信息的方法,为了使读者更好地理解这些方法,下面通过案例演示这些方法的使用。
在 MyEclipse 中创建一个名称为 servletDemo02 的项目,在 src 下新建一个名称为 com.mengma.request 的包,在包中创建一个名为 RequestLineServlet 的 Servlet 类,在该类中编写用于获取请求行中相关信息的方法,如下所示。 package com.mengma.request; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class RequestLineServlet extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); // 获取请求行的相关信息 out.println("getMethod : " + request.getMethod()); out.println("getRequestURI:" + request.getRequestURL()); out.println("getQueryString:" + request.getQueryString()); out.println("getContextPath:" + request.getContextPath()); out.println("getServletPath:" + request.getServletPath()); out.println("getRemoteAddr : " + request.getRemoteAddr()); out.println("getRemoteHost : " + request.getRemoteHost()); out.println("getRemotePort : " + request.getRemotePort()); out.println("getLocalAddr : " + request.getLocalAddr()); out.println("getLocalName : " + request.getLocalName()); out.println("getLocalPort : " + request.getLocalPort()); out.println("getServerName : " + request.getServerName()); out.println("getServerPort : " + request.getServerPort()); out.println("getRequestURL : " + request.getRequestURL()); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); 启动 Tomcat 服务器,在浏览器的地址栏中输入地址 http://localhost:8080/servletDemo02/RequestLineServlet 访问 RequestLineServlet,浏览器的显示结果如图 1 所示。
从图 1 中可以看出,浏览器显示出了请求 RequestLineServlet 时发送的请求行信息。由此可见,通过 HttpServletRequest 对象可以很方便地获取请求行的相关信息。
图 1  运行结果
获取请求消息头的相关方法 当浏览器发送 Servlet 请求时,需要通过请求消息头向服务器传递附加信息,例如,客户端可以接收的数据类型、压缩方式、语言等。为此,在 HttpServletRequest 接口中定义了一系列用于获取 HTTP 请求头字段的方法,如表 2 所示。
表 2 获取请求消息头的方法 表 2 列出了一系列用于读取 HTTP 请求消息头字段的方法,为了更好地掌握这些方法,下面通过案例学习这些方法的使用。
在 com.mengma.request 包中创建一个名为 RequestHeadersServlet 的 Servlet 类,该类中使用 getHeaderNames() 方法获取请求消息头信息,如下所示。 package com.mengma.request; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.*; import javax.servlet.http.*; public class RequestHeadersServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); // 获取请求消息中的所有头字段 Enumeration headerNames = request.getHeaderNames(); //用循环遍历所有请求头,并通过 getHeader() 方法获取一个指定名称的头字段 while (headerNames.hasMoreElements()) { String headerName = (String) headerNames.nextElement(); out.print(headerName + ":" + request.getHeader(headerName) + "<br />"); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); 启动 Tomcat 服务器,在浏览器的地址栏中输入 http://localhost:8080/servletDemo02/RequestHeadersServlet 访问 RequestHeadersServlet,浏览器的显示结果如图 2 所示。
图 2  运行结果 下节内容: Java servlet获取form表单数据(参数)

关注公众号「 站长严长生 」,在手机上阅读所有教程,随时随地都能学习。内含一款搜索神器,免费下载全网书籍和视频。

微信扫码关注公众号
  • 一套完整的嵌入式开发学习路线(高薪就业版)
  • 一套课程卖1万,TMD太贵了!
  • 跑了3000公里,见了一位大佬
  • 程序员结识新朋友的10个理由
  • 面向对象究竟是什么鬼?该如何理解?
  • Java到底能干什么?实事求是地说一下
  • 科普一下大厂的工资结构
  • 5分钟了解汽车操作系统(科普篇)
  • 自动化测试快速入门教程(30分钟)
  • RT-Thread是什么?
  •