web网页和服务器的数据传输问题(jsp和servlet)
学生一枚如有不对请指出,感谢海涵。
在网页中数据的传输方式有get和post方法,所以对应的servlet的doGet和doPost就是响应前端的方法。
所以明白get和post就好了
-
get的传输方式的例子。
1. <a href='...'>锚点标签</a> 2. js: window.location.href="...." 3. ajax 的get方式的数据传输方式。 4. <form method="get">
-
post的传输方式的例子。
1. <form method="post"> 2. ajax 的post方式的数据传输方式。
首先按我的个人了解,post方式的速度可能比get方式慢但是get方式的传输的数据大小是有限制的,但是post方式可以支持较大的数据传输量,并且post方式的安全性是高于get方式的。
js的原生ajax的数据传输
function sendMsg(mubiao,Msg,method){
var jsAjax;
if (window.XMLHttpRequest)
{// 非ie(网上有解释)
jsAjax=new XMLHttpRequest();
}
else
{// ie(网上有解释)
jsAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
jsAjax.open(method,mubiao,false);
jsAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
jsAjax.send(Msg);
}
//mubiao -- 表示传输的目的地
//Msg --表示传输的信息
//method --表示get或者post的传输方式
注意:出于我也不知道的原因,js原生ajax的数据传输到servlet可以触发doGet或者doPost的方法并且可以通过(------ request.getParameter("…") ------)取得数据但是不能由此而调用对应的网页转跳方法如
1. request.getRequestDispatcher("...").forward(request, response);
2. response.sendRedirect("...");
以上的两种网跳转方式是不能因为ajax的触发而触发转跳的。
在遇到这些问题时的替补方案是:
function sendMsg(mubiao,Msg,method){
var jsAjax;
if (window.XMLHttpRequest)
{// 非ie
jsAjax=new XMLHttpRequest();
}
else
{// ie
jsAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
jsAjax.open(method,mubiao,false);
jsAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
jsAjax.send(Msg);
}
var temp = document.createElement("form");
temp.action="...";
temp.method="post";
temp.style.disply="none";
document.appendChild(temp);
temp.submit();//由form表单进行doPost跳转的触发
//mubiao -- 表示传输的目的地
//Msg --表示传输的信息
//method --表示get或者post的传输方式
注意:需要js的ajax的数据传输但同时需要通过form触发跳转的,你不能让ajax的传输形式是异步的,所以jsAjax.open(method,mubiao,false);的第三参数是false表示不能进行异步传输数据,这样就可以等ajax传完数据后才触发网页的条转了。(虽然觉得这样的办法还是有缺陷但是我还没有发现更好的替代方法)
通过对form表表单的理解我们还可以通过form表单传输数据
var temp = document.createElement("form");
temp.action="ChangeMsg";
temp.method="post";
temp.style.display="none";
var ids=document.createElement("input");
ids.value=objArr[1].innerText; //数据来源自己造
ids.name="stuId"; //name是必要的,因为request.getParameter("name")通过name名称获取数据。
temp.appendChild(ids);
var names=document.createElement("input");
names.value=objArr[3].innerText;
names.name="stuName";
temp.appendChild(names);
var pwds=document.createElement("input");
pwds.value=objArr[5].innerText;
pwds.name="stuPwd";
temp.appendChild(pwds);
document.getElementById("...").appendChild(temp);
temp.submit();
如果觉得有必要还可以封装form成一个‘智能‘的方法来传数据。
LYL