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
*/
代码
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//行信息相关 请求方式 get\post ,请求的url , 协议及版本 http/1.1
System.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()); // 本应用容器的端口号 8080
System.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]);
}
}