HttpServletRequest
HttpServletRequest是什么
HttpServletRequest是一个接口,其父接口是ServletRequest
HttpServletRequest是Tomcat将 请求报文 转换封装而来的对象 (即请求报文的信息)
,在Tomcat调用service方法时传入
HttpServletRequest 代表客户端发来的请求,所有请求中的信息都可以通过该对象获得
一、功能概述
在 Servlet 的 service
方法中,通过 HttpServletRequest
对象获取请求参数,支持单值参数、多值参数获取,以及遍历所有参数 。
1. 请求头 请求体
/*
URI 统一资源标识符 interface URI{} 资源定位的要求和规范
URL 统一资源定位符 class URL implements URI{} 一个具体的资源路径
* URI /demo03/a.html
* URL http://ip:port/demo03/a.html
*/
代码
@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//行信息相关 请求方式 get\post ,请求的url , 协议及版本 http/1.1System.out.println(req.getMethod()); //获取请求方式System.out.println(req.getScheme());//获取协议System.out.println(req.getProtocol());//获取协议及版本System.out.println(req.getRequestURI());//获取请求的URI 项目的资源路径System.out.println(req.getRequestURL()); //获取请求的URL 项目的资源的完成路径/*URI 统一资源标识符 interface URI{} 资源定位的要求和规范URL 统一资源定位符 class URL implements URI{} 一个具体的资源路径* URI /demo03/a.html* URL http://ip:port/demo03/a.html*/System.out.println(req.getLocalPort()); // 本应用容器的端口号 8080System.out.println(req.getServerPort()); // 客户端发请求时使用的端口号System.out.println(req.getRemotePort()); // 客户端软件的端口号// 请求头信息相关 key: value//获取所有请求头的名称Enumeration<String> headerNames = req.getHeaderNames();while (headerNames.hasMoreElements()) {String name = headerNames.nextElement();System.out.println(name+":"+req.getHeader(name));}
}
2.获取所有请求参数
(一)单值参数获取
// 根据参数名获取单个参数值,适用于像用户名、密码这类一般单个值的参数
String username = req.getParameter("username");
System.out.println(username);
String userPwd = req.getParameter("userPwd");
System.out.println(userPwd);
req.getParameter("参数名")
:从请求中根据参数名获取对应值,若参数不存在返回 null
,常用于获取文本框、单选框等单个值的表单数据
二)多值参数获取
// 根据参数名获取多个参数值,
String[] 数组名= req.getParameterValues("参数名");System.out.println(Arrays.toString(数组名));
req.getParameterValues("参数名")
:获取同名参数的多个值,返回字符串数组 。若参数不存在,返回null
;若只有一个值,数组长度为 1 ,适合处理复选框等多值表单元素 。
(三)遍历所有参数
// 获取所有参数名的枚举,遍历枚举来获取每个参数的名和值
Enumeration<String> pnames = req.getParameterNames();
while (pnames.hasMoreElements()) {String pname = pnames.nextElement();String[] values = req.getParameterValues(pname);if (values.length > 1) {System.out.println(pname + "=" + Arrays.toString(values));} else {System.out.println(pname + "=" + values[0]);}
}
req.getParameterNames()
:获取请求中所有参数名的枚举对象 。通过遍历枚举,结合getParameterValues
,可处理所有参数,根据值的数量(单值 / 多值)格式化输出 ,能全面了解请求携带的参数情况 。
// 返回所有参数的map集合 key = 参数名 value = 参数值
Map<String, String[]> parameterMap = req.getParameterMap();
Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
for (Map.Entry<String, String[]> entry : entries) {String pname = entry.getKey();String[] value = entry.getValue();if(value.length>1){System.out.println(pname+"="+Arrays.toString(value));}else{System.out.println(pname+"="+value[0]);}}