关于java.net.SocketException: Connection reset by peer: socket write error的问题请教!
大家好,本人在开发首页的地图导航显示数据时,遇到一些关于
Exception Processing ErrorPage[errorCode=404, location=/building.jsp]
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error的问题。
本功能大概是:在鼠标移动到某个城市时,将显示一个从数据库读取的城市生产总额和项目数等信息。
本人用了AJAX进行异步交互读取数据来显示。虽然能成功显示,但是在ECLIPSE的窗口总是会出现错误如上所示,经上网查后发现是可能自己在客户端做测试时用鼠标移动到下个城市太快的缘故吧,导致客户端不停刷新,造成无用的进程,虽然数据能正常显示,但我想请教各位高手有什么好的解决方案使后台不会有Connection reset by peer: socket write error提示出现,谢谢!
以下是我写的一些代码:
index.jsp:
//执行请求发送
function send_request(url,strsearchoose) {
if (url != " ") {
// 获取一个XMLHttpRequest实例
var req = newXMLHttpRequest();
//alert(req);
// 设置用来 从请求对象 接收回调通知 的句柄函数
var handlerFunction = processRequest(req,strsearchoose);
req.onreadystatechange = handlerFunction;
// 打开一个联接到XXXservlet的HTTP POST联接
// 第三个参数表示请求是异步的
req.open( "GET ", url, true);
// 指示请求体包含form数据
req.setRequestHeader( "Content-Type ", "application/x-www-form-urlencoded ");
req.send(null);
} else {
alert( " ");
}
}
/*初始化对象并发出XMLHttpRequest请求*/
function newXMLHttpRequest() {
var xmlreq = false;
if (window.XMLHttpRequest) {
// 在非Microsoft浏览器中创建XMLHttpRequest对象
xmlreq = new XMLHttpRequest();
} else {
if (window.ActiveXObject) {
//通过MS ActiveX创建XMLHttpRequest
try {
// 尝试按新版InternetExplorer方法创建
xmlreq = new ActiveXObject( "Msxml2.XMLHTTP ");
}
catch (e1) {
// 创建请求的ActiveX对象失败
try {
// 尝试按老版InternetExplorer方法创建
xmlreq = new ActiveXObject( "Microsoft.XMLHTTP ");
}
catch (e2) {
// 不能通过ActiveX创建XMLHttpRequest
}
}
}
}
return xmlreq;
}
function processRequest(req,strsearchoose) {
return function () {
// 如果请求的状态是“完成”
if (req.readyState == 4) {
// 检查是否成功接收了服务器响应
if (req.status == 200) {
// 将载有响应信息的XML传递到处理函数
//responseXmlHandler(req.responseXML);
//将传回的信息当字符串使用
if(strsearchoose== "0 "){
document.getElementById( "report ").innerHTML = req.responseText;
//alert(req);
}else{
document.getElementById( "projectlist ").innerHTML = req.responseText;
}
} else {
// 有HTTP问题发生
alert( " " + req.status);
return false;
}
}
};
}
function showreport(id,name){//使用此方法来调用AJAX框架进行发送请求
var strid=id;
var strname=name;
var stryear=document.getElementById( "year ").value;
var strmonth=document.getElementById( "month ").value;
var strsearchoose=0;
//alert(strid+ "-- "+name+ "-- "+stryear+ "-- "+strmonth);
var url= "ajaxsearch.jsp?searchoose= "+strsearchoose+ "&statareaid= "+strid+ "&statareaname= "+escape(encodeURI(strname))+ "&year= "+stryear+ "&month= "+strmonth;
//alert(url);
send_request(url,strsearchoose);//调用上面的请求方法
}
ajaxsearch.jsp:
<%
String strReportHtml = " "; //生成的数据显示内容
String strsearchoose=request.getParameter( "searchoose ");
if(strsearchoose.equals( "0 ")){
//列如:省id:001001001001 : 广东省 城市id:001001001001001 : 广州市
String strOrganiseNo = request.getParameter( "statareaid ");
if (strOrganiseNo == null || (strOrganiseNo + "A ").equals( "A ")) {
//判断传递过来的统计地区编号是否存在
out.println( "index.jsp文件的参数传递错误! statareaid ,请与管理员联系! ");
return;
}
//列如:地名:广州市 地区名:天河区
String strOrganiseName = request.getParameter( "statareaname "); //统计的地区名称
strOrganiseName = (strOrganiseName == null) ? " ": strOrganiseName;
try {
if (!strOrganiseName.equals( " ")) {
strOrganiseName = JavaScriptEncode.unescape(strOrganiseName);
//解决中文乱码问题
strOrganiseName = new String(strOrganiseName
.getBytes( "ISO-8859-1 "), "UTF-8 ");
}
} catch (Exception e) {
e.printStackTrace();
}
//列如:时间:获取首页的时间
String strYear = request.getParameter( "year ");
String strMonth = request.getParameter( "month ");
String strDate=strYear+ "年 1~ "+strMonth+ "月 ";
//组合成查询条件for rstrCondition
String strCondition = " "; //统计条件
if(strMonth== "12 "){
strCondition = "where 1=1 and organiseno like ' "+strOrganiseNo+ "% ' and printdate> =to_date( ' "+strYear+ "-01-01 ', 'yyyy-mm-dd ') and printdate <=to_date( ' "+strYear+ "-12-30 ', 'yyyy-mm-dd ') ";
}else{
strCondition = "where 1=1 and organiseno like ' "+strOrganiseNo+ "% ' and printdate> =to_date( ' "+strYear+ "-01-01 ', 'yyyy-mm-dd ') and printdate <=to_date( ' "+strYear+ "- "+strMonth+ "-30 ', 'yyyy-mm-dd ') ";
}
String strStatisType = "0 ";//0:表示按原始备案统计
strCondition = strCondition + " and RecordSign = ' "+ strStatisType + " ' "; //是按原始备案统计还是按变更后统计
ReportConf rc = new ReportConf();
strReportHtml = rc.getReportajax(strCondition, strOrganiseNo, strOrganiseName,strDate);
/* getReportajax方法把条件进行组合成SQL语句,调用executeQuery方法进行查询返回组合成HTML的数据表格(里面包括了城市的生产总额和项目数等信息)
*/
out.println(strReportHtml);
}%>
[解决办法]
new一个全局的xmlHttp对象,用这个全局的对象去做操作。仅做参考,呵呵