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
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
方法
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
方法
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.jar
和commons-logging-1.1.1.jar
-使用getParameterMap
方法
//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发布者:admin,转转请注明出处:http://www.yc00.com/web/1748000431a4717332.html
评论列表(0条)