HttpServletRequest详解:获取HTTP请求消息
本节将针对常用的获取请求行和请求消息头的相关方法进行讲解,下节《Java servlet获取form表单数据(参数)》继续讲解如何通过 HttpServletRequest 接口获取用户提交的 form 表单数据。
获取请求行信息的相关方法当访问 Servlet 时,所有请求消息将被封装到 HttpServletRequest 对象中,请求消息的请求行中包含请求方法、请求资源名、请求路径等信息,为了获取这些信息,HttpServletRequest 接口定义了一系列方法,如表 1 所示。
该方法用于获取请求 URL 中属于 Web 应用程序的路径,这个路径以 / 开头,表示相对于整个 Web 站点的根目录,路径结尾不含 /。如果请求 URL 属于 Web 站点的根目录,那么返回结果为空字符串( )
该方法用于获取请求客户端的完整主机名,其格式类似于 pcl.mengma.com。需要注意的是,如果无法解析出客户机的完整主机名,那么该方法将会返回客户端的 IP 地址
该方法用于获取当前请求所连接的服务器端口号,即 HTTP 请求消息中 Host 头字段所对应的端口号部分
该方法用于获取客户端发出请求时的完整 URL,包括协议、服务器名、端口号、 资源路径等信息,但不包括后面的査询参数部分。注意,getRequcstURL() 方法返冋的结果是 StringBuffer 类型,而不是 String 类型,这样更便于对结果进行修改
表 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 对象可以很方便地获取请求行的相关信息。
![运行结果](http://ytso-blog-oss-img.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2021/07/20/20210720_60f63ec2aec45.png)
图 1 运行结果 获取请求消息头的相关方法
当浏览器发送 Servlet 请求时,需要通过请求消息头向服务器传递附加信息,例如,客户端可以接收的数据类型、压缩方式、语言等。为此,在 HttpServletRequest 接口中定义了一系列用于获取 HTTP 请求头字段的方法,如表 2 所示。
该方法用于获取一个指定头字段的值,如果请求消息中没有包含指定的头字段,则 getHeader() 方法返回 null;如果请求消息中包含多个指定名称的头字段,则 getHeader() 方法返回其中第一个头字段的值
该方法返回一个 Enumeration 集合对象,该集合对象由请求消息中出现的某个指定名称的所有头字段值组成。在多数情况下,一个头字段名在请求消息中只出现一次,但有时可能会出现多次
该方法用于获取指定名称的头字段,并且将其值转为 int 类型。需要注意的是,如果指定名称的头字段不存在,则返回值为 -1;如果获取到的头字段的值不能转为 int 类型,则将发生 NumberFormatException 异常
该方法用于获取指定头字段的值,并将其按 GMT 时间格式转换为一个代表日期/时间的长整数,该长整数是自 1970 年 1 月 1 日 0 时 0 分 0 秒算起的以毫秒为单位的时间值
该方法用于返回请求消息的实体部分的字符集编码,通常是从 Content-Type 头字段中进行提取,结果为 String 类型
表 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 所示。
![运行结果](http://ytso-blog-oss-img.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2021/07/20/20210720_60f63ec2bc045.png)
图 2 运行结果 下节内容:Java servlet获取form表单数据(参数)
22454.html
htmljavaServletSTLWeb相关文章
- VC++消息钩子编程「建议收藏」
- Go HTTP 编程 | 01 - 使用 http 包创建 Web 服务器
- HTTP默认端口_http协议使用的端口号
- 在线客服系统实现消息声音提醒效果 - 在线客服系统源码
- AI智慧安监EasyCVR平台告警列表支持按时间查询告警消息
- android 底部标签栏CommonTabLayout搭建项目底部菜单(带消息提醒)
- 简述消息队列在电商系统使用场景以及工作模式
- 关于 SAP UI5 MessageProcessor 消息创建的问题
- WordPress 教程:使用 WP_Http 在 WordPress 中发起 HTTP Request
- js封装好的模仿qq消息弹窗代码详解编程语言
- 服务Linux 下监控HTTP服务的方法(linux监控http)
- 规则先行,加速推动5G消息高质量发展
- 消息称iPhone 13或升级25W快充
- 消息称第三方开发的桌面小工具最终会重新被Win11支持
- Linux下抓取HTTP包的技术实现(linux抓http包)
- 每日安全资讯:法国政府发布它开发的端对端加密消息应用
- HTTP 消息结构
- HTTP 消息结构
- SQL Server实现高效传递消息(sqlserver发消息)
- Redis队列:极大提高消息处理效率(redis队列使用)
- Linux拦截HTTP的安全防护(Linux拦截http)
- 一步之遥从HTTP访问Oracle数据库(http访问oracle)
- Redis重复推送消息如何有效规避(redis重复推送消息)