方式一
var vm=new Vue({
el:"#app",
data:{
id:"",
name:"",
age:"",
},
methods:{
getStudentInf(){
axios.post(
"servelt02.do",//处理路径
{
id:"a0022",
name:"李思思"
}//传递的参数,这是官方推荐的格式
).then(result=>{
result = result.data;
this.id = result.id;
this.name = result.name;
this.age = result.age;
})
},
},
})
结果:
servelt接收参数情况:
采用:req.getParameter()接收
查看请求头:
结论:
可见,发送的数据格式是Request Payload,并非我们常用的Form Data格式,所以参数必须要以键值对形式传递,不能以json形式传参。
方式二:
var vm=new Vue({
el:"#app",
data:{
id:"",
name:"",
age:"",
},
methods:{
getStudentInf(){
axios.post(
"servelt02.do",//处理路径
"id=a0022&name=李思思"//传递的参数,直接用字符串格式
).then(result=>{
result = result.data;
this.id = result.id;
this.name = result.name;
this.age = result.age;
})
},
},
})
结果:servelt接收参数情况:
采用:req.getParameter()接收
查看请求头:
结论:
此时传递参数的格式是FormData,但对应servelt接收到的汉字数据却乱码,可能是由于Content-Type中不是charset=utf-8
方式三:
var vm=new Vue({
el:"#app",
data:{
id:"",
name:"",
age:"",
},
methods:{
getStudentInf(){
let params = new URLSearchParams();
params.append('id', "a0022");
params.append('name', "李思思");
axios.post(
"servelt02.do",//处理路径
params//传递的参数,使用URLSearchParams预先对请求参数进行格式处理
).then(result=>{
result = result.data;
this.id = result.id;
this.name = result.name;
this.age = result.age;
})
},
},
})
结果:成功
采用:req.getParameter()接收
查看请求头:
方式四:
经过查阅资料,我发现浏览器在以get和post两种请求方式发送请求的时候,分别在http请求协议包中请求头和请求体中携带的参数在以二进制的形式到达HTTP服务器的时候,在Servelt接口实现类中解释的时候会有所不同。
get方式:由http服务器(eg:Tomcat)来解析,在tomcat9.0版本默认以utf-8的字符集来解释。
post方式:由请求对象request 来解析,默认以【ISO-8859-1】来解释,一个东欧系字符集,如果此时传递的有中文,就会出现乱码。
解决方式:
在对应servelt的dopost()方法里面添加
req.setCharacterEncoding("utf-8");
注意:是在请求获得参数的前面。