实现原理:我们把提交到服务器端的URL的地址在每次提交时都让它与上一次不同,大家就会想到时间,这样服务器每次都接收到不同的URL,就不会读取缓存了。
解决中文乱码通常的2种方法:
//1.页面端发出的数据做一次encodeURI,服务器端使用new String(name.getBytes("iso8859-1"),"UTF-8");
//2.页面段发出的数据作两次encodeURI,服务器端使用RLDecoder.decode(nameStr,"UTF-8");
<script type="text/javascript" src="js/jquery-1.4.js"></script>
<script type="text/javascript">
function testClick(){
var obj = $("#name");
var name = obj.val();
var url = "testServlet?name="+encodeURI(encodeURI(name)); //解决提交的数据乱码问题
url = convertURL(url);
//alert(url);
$.get(url,true,callback);
}
//给url地址增加时间戳,骗过浏览器,不读取缓存
function convertURL(url){
//获取时间戳
var timetamp = (new Date()).valueOf();
//将时间戳信息拼接到url地址上面去
//url = "testServlet";
if(url.indexOf("?")>=0){
url = url + "&t="+timetamp;
}else{
url = url + "?t="+timetamp;
}
return url;
}
function callback(data){
//alert("服务器的数据回来了!");
$("#msg").html(data);
}
</script>
<input id="name" ><input type="button" value="测试" οnclick="testClick()"/>
<br/><div id="msg"></div>
下面是服务器端:
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//定义变量,存储连续请求的次数
Integer inte = (Integer)request.getSession().getAttribute("total");
int temp =0;
if(inte==null){
temp = 1;
}else{
temp = inte.intValue()+1;
}
request.getSession().setAttribute("total", temp);
String nameStr = request.getParameter("name");
//String name = new String(nameStr.getBytes("iso8859-1"),"UTF-8");
String name = URLDecoder.decode(nameStr,"UTF-8");
PrintWriter out = response.getWriter();
if(name==null || name.length()==0){
out.print("用户名为空"+temp);
}else{
if(name.equals("peter")){
out.print("用户名"+name+"正确"+temp);
}else{
out.print("用户名"+name+"错误"+temp);
}
}
out.flush();
out.close();