admin管理员组

文章数量:1033071

JavaWeb后端入门7—Request对象

1. Request概述

开发的软件都是B/S结构软件,从浏览器向服务器提交一些数据,将这些内容进行封装就封装成了一个请求对象(Request对象)。

2. Request对象的API

2.1 获得客户机信息

代码语言:javascript代码运行次数:0运行复制
**getMethod()获得请求的方式
getQueryString()获得请求路径后的提交参数的字符串
getRequestURI 获得请求路径的URI
getRequestURL 获得请求路径的URL

**getRemoteAddr()获得客户端的IP地址(并非真实地址)

代码演示

代码语言:javascript代码运行次数:0运行复制
**getMethod()获得请求的方式
代码语言:javascript代码运行次数:0运行复制
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("请求方式:"+request.getMethod());
	}
代码语言:javascript代码运行次数:0运行复制
getQueryString()获得请求路径后的提交参数的字符串
代码语言:javascript代码运行次数:0运行复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("客户机IP地址参数的字符串:"+request.getQueryString());
}
代码语言:javascript代码运行次数:0运行复制
getRequestURL 获得请求路径的URL和URI
代码语言:javascript代码运行次数:0运行复制
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("请求路径的URL:"+request.getRequestURL());
		System.out.println("请求路径的URI:"+request.getRequestURI());
	}

运行结果
请求路径的URL:http://218.197.198.80:8080/web01/RequestDemo1
请求路径的URI:/web01/RequestDemo1
代码语言:javascript代码运行次数:0运行复制
**getRemoteAddr()获得客户端的IP地址(并非真实地址)
代码语言:javascript代码运行次数:0运行复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("客户机IP地址:"+request.getRemoteAddr());
}

获取地址的另外一种方法(对小飞机无效):通过header中的x-forwarded-for

代码语言:javascript代码运行次数:0运行复制
System.out.println("客户机IP地址:"+request.getHeader("x-forwarded-for"));

2.2 获得请求头

代码语言:javascript代码运行次数:0运行复制
getHeader()获得一个key对应一个value的请求头

getHeaders()获得一个key对应多个value的请求头

代码演示

代码语言:javascript代码运行次数:0运行复制
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("客户机IP地址:"+request.getHeader("x-forwarded-for"));
		System.out.println("获得客户机浏览器类型:"+request.getHeader("user-agent"));
	}

2.3 获得请求参数

代码语言:javascript代码运行次数:0运行复制
**getParameter()获得提交的参数(一个name对应一个value)
**getParameterNames()获得提交的参数(一个name对应多个value)
**getParameterMap() 接受所有的值(不管一对一还是一对多),将提交的参数的名称和值存入到一个map集合中

首先创建一个html文件

代码语言:javascript代码运行次数:0运行复制
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>request接收表单参数</h1>
<form action="/web01/RequestDemo2" method="get">
	用户名:
	<input type="text" name="username"> <br>
	密码:
	<input type="password" name="password"> <br>
	性别:
	<input type="radio" name="sex" value="男">男
	<input type="radio" name="sex" value="女">女 <br>
	籍贯:
	<select name="city">
			<option value="北京市">北京市</option>
			<option value="上海市">上海市</option>
			<option value="深圳市">深圳市</option>
	</select> 
	<br>
	爱好:
	<input type="checkbox" name="hobby" value="篮球">篮球
	<input type="checkbox" name="hobby" value="足球">足球
	<input type="checkbox" name="hobby" value="排球">排球
	<br>
	自我介绍:
	<textarea rows="3" cols="8" name="info"></textarea>
	<input type="submit" value="提交">
</form>
</body>
</html>

代码演示:使用getParameter方法

代码语言:javascript代码运行次数:0运行复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接受用户名和密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println("用户名:"+username);
		System.out.println("密码:"+password);
		//接收性比和籍贯
		String sex = request.getParameter("sex");
		String city = request.getParameter("city");
		System.out.println("性别:"+sex);
		System.out.println("籍贯:"+city);
		//接受爱好
		String[] hobby = request.getParameterValues("hobby");
		System.out.println("爱好:"+Arrays.toString(hobby));
		//接收自我介绍
		String info = request.getParameter("info");
		System.out.println("自我介绍:"+info);
}

输出结果:
用户名:冰冰
密码:123
性别:男
籍贯:北京市
爱好:[篮球, 足球, 排球]
自我介绍:我是冰冰我是冰冰我是冰冰我是冰冰我是冰冰

代码演示:使用getParameterMap方法

代码语言:javascript代码运行次数:0运行复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
		 * 使用getParameterMap接收数据
		 * */
		Map<String, String[]> map = request.getParameterMap();
		for (String key:map.keySet()) {
			String[] value = map.get(key);
			System.out.println(key+"  "+Arrays.toString(value));
		}
}

输出结果:
username  [冰冰]
password  [123]
sex  [男]
city  [北京市]
hobby  [篮球, 足球, 排球]
info  [我是冰冰我是冰冰我是冰冰我是冰冰我是冰冰]

**借用工具类commons-beanutils-1.8.3.jarcommons-logging-1.1.1.jar-使用getParameterMap方法


代码语言:javascript代码运行次数:0运行复制
		//1.接受数据
		request.setCharacterEncoding("UTF-8");
		Map<String, String[]> map = request.getParameterMap();	
		//2.封装数据
		Product product = new Product();
		try {
			BeanUtils.populate(product, map);
		} catch (IllegalAccessException | InvocationTargetException e) {
			e.printStackTrace();
		}

注意:使用这种方法时,实体名称和表单中要提交的的name需要相同

2.4 Request作为域对象存取数据

代码语言:javascript代码运行次数:0运行复制
**setAttribute()向request域中存储数据
**getAttribute()从request域中获取数据
**removeAttribute()从request域中移除数据

注:标注**的为极其重要的API

3. 接收表单的中文乱码处理

3.1 POST方式

产生乱码原因:POST方式提交的数据是在请求中,request对象接收到数据之后,放入到request的缓冲区中。缓冲区的默认编码为ISO-8859-1,其不支持中文。

解决方法:将request的缓冲的编码修改为UTF-8

很重要!!!

代码语言:javascript代码运行次数:0运行复制
request.setCharacterEncoding("UTF-8");

3.1 GET方式

注:截止2021.4.19,TOMCAT8.0以后,WIN10系统下使用Chrome、EDGE、Firefox、IE测试均不会产生乱码,不需要进行以下处理。

产生乱码原因 :GET方式提交的数据在请求行的URL后面,在地址栏上已经就进行了一次URL编码

解决方法:将存入到request缓冲区的值以ISO-8859-1的方式获取,再以UTF-8的方式进行解码。

代码语言:javascript代码运行次数:0运行复制
String value = new String(name.getBytes("ISO-8859-1"),"UTF-8");
其中value的值就是经过ISO解码,并用UTF-8编码后的中文
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2021-04-19 ,如有侵权请联系 cloudcommunity@tencent 删除对象后端入门数据request

JavaWeb后端入门7—Request对象

1. Request概述

开发的软件都是B/S结构软件,从浏览器向服务器提交一些数据,将这些内容进行封装就封装成了一个请求对象(Request对象)。

2. Request对象的API

2.1 获得客户机信息

代码语言:javascript代码运行次数:0运行复制
**getMethod()获得请求的方式
getQueryString()获得请求路径后的提交参数的字符串
getRequestURI 获得请求路径的URI
getRequestURL 获得请求路径的URL

**getRemoteAddr()获得客户端的IP地址(并非真实地址)

代码演示

代码语言:javascript代码运行次数:0运行复制
**getMethod()获得请求的方式
代码语言:javascript代码运行次数:0运行复制
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("请求方式:"+request.getMethod());
	}
代码语言:javascript代码运行次数:0运行复制
getQueryString()获得请求路径后的提交参数的字符串
代码语言:javascript代码运行次数:0运行复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("客户机IP地址参数的字符串:"+request.getQueryString());
}
代码语言:javascript代码运行次数:0运行复制
getRequestURL 获得请求路径的URL和URI
代码语言:javascript代码运行次数:0运行复制
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("请求路径的URL:"+request.getRequestURL());
		System.out.println("请求路径的URI:"+request.getRequestURI());
	}

运行结果
请求路径的URL:http://218.197.198.80:8080/web01/RequestDemo1
请求路径的URI:/web01/RequestDemo1
代码语言:javascript代码运行次数:0运行复制
**getRemoteAddr()获得客户端的IP地址(并非真实地址)
代码语言:javascript代码运行次数:0运行复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("客户机IP地址:"+request.getRemoteAddr());
}

获取地址的另外一种方法(对小飞机无效):通过header中的x-forwarded-for

代码语言:javascript代码运行次数:0运行复制
System.out.println("客户机IP地址:"+request.getHeader("x-forwarded-for"));

2.2 获得请求头

代码语言:javascript代码运行次数:0运行复制
getHeader()获得一个key对应一个value的请求头

getHeaders()获得一个key对应多个value的请求头

代码演示

代码语言:javascript代码运行次数:0运行复制
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("客户机IP地址:"+request.getHeader("x-forwarded-for"));
		System.out.println("获得客户机浏览器类型:"+request.getHeader("user-agent"));
	}

2.3 获得请求参数

代码语言:javascript代码运行次数:0运行复制
**getParameter()获得提交的参数(一个name对应一个value)
**getParameterNames()获得提交的参数(一个name对应多个value)
**getParameterMap() 接受所有的值(不管一对一还是一对多),将提交的参数的名称和值存入到一个map集合中

首先创建一个html文件

代码语言:javascript代码运行次数:0运行复制
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>request接收表单参数</h1>
<form action="/web01/RequestDemo2" method="get">
	用户名:
	<input type="text" name="username"> <br>
	密码:
	<input type="password" name="password"> <br>
	性别:
	<input type="radio" name="sex" value="男">男
	<input type="radio" name="sex" value="女">女 <br>
	籍贯:
	<select name="city">
			<option value="北京市">北京市</option>
			<option value="上海市">上海市</option>
			<option value="深圳市">深圳市</option>
	</select> 
	<br>
	爱好:
	<input type="checkbox" name="hobby" value="篮球">篮球
	<input type="checkbox" name="hobby" value="足球">足球
	<input type="checkbox" name="hobby" value="排球">排球
	<br>
	自我介绍:
	<textarea rows="3" cols="8" name="info"></textarea>
	<input type="submit" value="提交">
</form>
</body>
</html>

代码演示:使用getParameter方法

代码语言:javascript代码运行次数:0运行复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接受用户名和密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println("用户名:"+username);
		System.out.println("密码:"+password);
		//接收性比和籍贯
		String sex = request.getParameter("sex");
		String city = request.getParameter("city");
		System.out.println("性别:"+sex);
		System.out.println("籍贯:"+city);
		//接受爱好
		String[] hobby = request.getParameterValues("hobby");
		System.out.println("爱好:"+Arrays.toString(hobby));
		//接收自我介绍
		String info = request.getParameter("info");
		System.out.println("自我介绍:"+info);
}

输出结果:
用户名:冰冰
密码:123
性别:男
籍贯:北京市
爱好:[篮球, 足球, 排球]
自我介绍:我是冰冰我是冰冰我是冰冰我是冰冰我是冰冰

代码演示:使用getParameterMap方法

代码语言:javascript代码运行次数:0运行复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
		 * 使用getParameterMap接收数据
		 * */
		Map<String, String[]> map = request.getParameterMap();
		for (String key:map.keySet()) {
			String[] value = map.get(key);
			System.out.println(key+"  "+Arrays.toString(value));
		}
}

输出结果:
username  [冰冰]
password  [123]
sex  [男]
city  [北京市]
hobby  [篮球, 足球, 排球]
info  [我是冰冰我是冰冰我是冰冰我是冰冰我是冰冰]

**借用工具类commons-beanutils-1.8.3.jarcommons-logging-1.1.1.jar-使用getParameterMap方法


代码语言:javascript代码运行次数:0运行复制
		//1.接受数据
		request.setCharacterEncoding("UTF-8");
		Map<String, String[]> map = request.getParameterMap();	
		//2.封装数据
		Product product = new Product();
		try {
			BeanUtils.populate(product, map);
		} catch (IllegalAccessException | InvocationTargetException e) {
			e.printStackTrace();
		}

注意:使用这种方法时,实体名称和表单中要提交的的name需要相同

2.4 Request作为域对象存取数据

代码语言:javascript代码运行次数:0运行复制
**setAttribute()向request域中存储数据
**getAttribute()从request域中获取数据
**removeAttribute()从request域中移除数据

注:标注**的为极其重要的API

3. 接收表单的中文乱码处理

3.1 POST方式

产生乱码原因:POST方式提交的数据是在请求中,request对象接收到数据之后,放入到request的缓冲区中。缓冲区的默认编码为ISO-8859-1,其不支持中文。

解决方法:将request的缓冲的编码修改为UTF-8

很重要!!!

代码语言:javascript代码运行次数:0运行复制
request.setCharacterEncoding("UTF-8");

3.1 GET方式

注:截止2021.4.19,TOMCAT8.0以后,WIN10系统下使用Chrome、EDGE、Firefox、IE测试均不会产生乱码,不需要进行以下处理。

产生乱码原因 :GET方式提交的数据在请求行的URL后面,在地址栏上已经就进行了一次URL编码

解决方法:将存入到request缓冲区的值以ISO-8859-1的方式获取,再以UTF-8的方式进行解码。

代码语言:javascript代码运行次数:0运行复制
String value = new String(name.getBytes("ISO-8859-1"),"UTF-8");
其中value的值就是经过ISO解码,并用UTF-8编码后的中文
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2021-04-19 ,如有侵权请联系 cloudcommunity@tencent 删除对象后端入门数据request

本文标签: JavaWeb后端入门7Request对象