负责排查一个导入功能的bug,debug找到的信息如下:
页面点击导入后,将上传的文件提到到一个controller
public ModelAndView importCSV( HttpServletRequest request, HttpServletResponse response ) throws Exception
{
s_logger.debug("importCSV: importing csv file ");
long startTime = System.currentTimeMillis();
String responseText = ImportContacts.getIFrameResponse(request);
response.setContentType("text/html");
response.setContentLength(responseText.length());
response.getWriter().write(responseText);
response.getWriter().flush();
response.getWriter().close();
long stopTime = System.currentTimeMillis();
s_logger.stats((stopTime - startTime), Logger.OPERATION_CSV_IMPORT);
return null;
}
此处将文件中的内容解析为json格式,并放到一个html页面往回输出。responseText的内容为:
<html>
<head>
</head>
<body οnlοad="parent.Jebber.Upload.iFrameLoaded()">
<div id='up_iframecontent'>
[{"dt":{"0A-01-0-0":"Tang","08-01-0-0":"Eva"},"dg":5,"rt":33620224},
{"dt":{"0e-04-0-0":"667193","0e-09-0-0":"861E+12","0A-01-0-0":"JIANG","08-01-0-0":"GARY"},"dg":4,"rt":33620224},
{"dt":{"0A-01-0-0":"Guo","0e-02-0-0":"861E+12","08-01-0-0":"Hao"},"dg":6,"rt":33620224},
{"dt":{"0e-04-0-0":"46703676086","08-01-0-0":"KATJA"},"dg":10,"rt":33620224},
{"dt":{"0e-04-0-0":"13910775963","0A-01-0-0":"Du","08-01-0-0":"Peng
Bo"},"dg":7,"rt":33620224},{"dt":{"0A-01-0-0":"Li","08-01-0-0":"Wen"},"dg":9,"rt":33620224},
{"dt":{"0A-01-0-0":"wei","08-01-0-0":"melissa."},"dg":3,"rt":33620224},
{"dt":{"0e-04-0-0":"13910621276","08-01-0-0":"孙永平"},"dg":11,"rt":33620224},
{"dt":{"0e-04-0-0":"18605351512","0A-01-0-0":"张老师"},"dg":1,"rt":33620224},
{"dt":{"0e-04-0-0":"13826924038","08-01-0-0":"海光"},"dg":8,"rt":33620224},
{"dt":{"0e-04-0-0":"13810006938","08-01-0-0":"海晓东"},"dg":12,"rt":33620224},
{"dt":{"0e-04-0-0":"861E+12","08-01-0-0":"陶徐"},"dg":2,"rt":33620224}]
</div>
</body>
</html>
因为html页面onload调用一个js函数,但在函数中获取div里的内容出现了问题。
Jebber.Upload = {
doneLoadingFunction: null,
frameName: "hiddenUploadResponse",
divId: "up_iframecontent",
submitFileForm: function(submitForm, newCallback)
{
Jebber.Debug.print("submitFileForm");
Jebber.Debug.assert(newCallback != null, "Upload.submitFileForm(): newCallback must not be null.");
this.doneLoadingFunction = newCallback;
submitForm.target = this.frameName;
submitForm.submit();
},
iFrameLoaded: function()
{
Jebber.Debug.print("Upload.iFrameLoaded called. Things are working.");
Jebber.Debug.print("frame content div undefined?: " + ($J("#" + this.divId).length == 0));
Jebber.Debug.print("frame content div undefined in the frame?: " + (frames[this.frameName].document.getElementById(this.divId) == null));
var hiddenIframeContents = frames[this.frameName].document.getElementById(this.divId).innerHTML;
Jebber.Debug.assert(hiddenIframeContents != "", "Upload.iFrameLoaded: The file was empty. This error should be handled.");
this.doneLoadingFunction(hiddenIframeContents);
},
hiddenIframeContents 的值总是缺少最后的两个括号。
[{"dt":{"0A-01-0-0":"Tang","08-01-0-0":"Eva"},"dg":5,"rt":33620224}, {"dt":{"0e-04-0-0":"667193","0e-09-0-0":"861E+12","0A-01-0-0":"JIANG","08-01-0-0":"GARY"},"dg":4,"rt":33620224}, {"dt":{"0A-01-0-0":"Guo","0e-02-0-0":"861E+12","08-01-0-0":"Hao"},"dg":6,"rt":33620224}, {"dt":{"0e-04-0-0":"46703676086","08-01-0-0":"KATJA"},"dg":10,"rt":33620224}, {"dt":{"0e-04-0-0":"13910775963","0A-01-0-0":"Du","08-01-0-0":"Peng Bo"},"dg":7,"rt":33620224}, {"dt":{"0A-01-0-0":"Li","08-01-0-0":"Wen"},"dg":9,"rt":33620224}, {"dt":{"0A-01-0-0":"wei","08-01-0-0":"melissa."},"dg":3,"rt":33620224}, {"dt":{"0e-04-0-0":"13910621276","08-01-0-0":"孙永平"},"dg":11,"rt":33620224}, {"dt":{"0e-04-0-0":"18605351512","0A-01-0-0":"张老师"},"dg":1,"rt":33620224}, {"dt":{"0e-04-0-0":"13826924038","08-01-0-0":"海光"},"dg":8,"rt":33620224}, {"dt":{"0e-04-0-0":"13810006938","08-01-0-0":"海晓东"},"dg":12,"rt":33620224}, {"dt":{"0e-04-0-0":"861E+12","08-01-0-0":"陶徐"},"dg":2,"rt":33620224
在这一步出现问题后,就没办法往下走了。请问大家如何解决呀?
已解决:
/**
*若是英文,则没有问题,但如果是中文,string.length()表示字符的个数,例如: 我爱bj,length=4.
*但stream里write 的时候,实际length=8,一个中文字符=3个byte。
*应该取字节的长度。
*/
response.setContentLength(responseText.getBytes("UTF-8").length());