1.操作请求体
1.1获得请求参数
法名
- String getParameter(String name)
获得指定参数名对应的值。如果没有则返回null,
如果有多个获得第一个。 例 如:username=jack - String[] getParameterValues(String name)
获得指定参数名对应的所有的值。此方法专业为复选框提供的。 例如:hobby=抽烟&hobby=喝酒&hobby=敲代码 - Map<String,String[]> getParameterMap()
获得所有的请求参数。key为参数名,value为key对应的所有的值。 key:username value: zhangsan
2.页面代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="request03" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
爱好:
<input type="checkbox" name="hobby" value="basketball"/>篮球
<input type="checkbox" name="hobby" value="football"/>足球
<input type="checkbox" name="hobby" value="film"/>看电影
<input type="checkbox" name="hobby" value="code"/>敲代码<br/>
<input type="submit" value="注册">
</form>
<!--表示表单中的数据以"post"方法传递。-->
<!--Form提供了两种数据传输的方式——get和post。虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响。虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一些差异,但是了解二者的差异在以后的编程也会很有帮助的。-->
<!--Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:-->
<!--1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。-->
<!--2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。-->
<!--3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。-->
<!--4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。-->
<!--5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。-->
<!--6、Get是Form的默认方法。-->
<!--使用Post传输的数据,可以通过设置编码的方式正确转化中文;而Get传输的数据却没有变化。-->
</body>
</html>
3.请求代码
package com.itheima.操作请求体;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
@WebServlet("/request03")
public class request03 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求体‘
// getParameter 只能获取到一个值。
//处理乱码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=UTF-8");
System.out.println(req.getParameter("username"));
System.out.println(req.getParameter("password"));
System.out.println(req.getParameter("hobby"));
//爱好有多个值,所以需要这么获取!
String[] hobbies = req.getParameterValues("hobby");
System.out.println("hobby="+ Arrays.toString(hobbies));
//=========================================================
System.out.println("===========获取所有的参数=============");
//key : 参数名字 , value :参数的值。
Map<String, String[]> parameterMap = req.getParameterMap();
for(String key: parameterMap.keySet()){
String[] values = parameterMap.get(key);
System.out.println(key + "=" + Arrays.toString(values));
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
4.页面图片
5.测试结果
6.小结
- 获得请求参数
- 获得一个值的情况 getParameter(String name);
- 获得多个值的情况 getParameterValues(String name);
- 获得所有key和值 getParameterMap();
- 乱码
- 为什么出现乱码?
编码和解码不一致, 浏览器传递数据采用utf-8 tomcat 解码数据iso8859-1 ,不支持中文 - 请求乱码解决
request.setCharacterEncoding(“utf-8”);
- 为什么出现乱码?
- 使用BeanUtils封装
- 如果请求参数有多个需要封装到JavaBean里面, 建议先获得Map, 再使用BeanUtils封装到JavaBean对象
注意: JavaBean属性需要和Map的key一致 说白了也就是JavaBean属性需要和表单的name一致
- 如果请求参数有多个需要封装到JavaBean里面, 建议先获得Map, 再使用BeanUtils封装到JavaBean对象