`
hiskyrisa
  • 浏览: 36172 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Exception:文件导入的异常

 
阅读更多

负责排查一个导入功能的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 onload="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());

分享到:
评论

相关推荐

    java 解决异常 2 字节的 UTF-8 序列的字节2 无效的问题

    主要介绍了java 解决异常 2 字节的 UTF-8 序列的字节 2 无效的问题的相关资料,需要的朋友可以参考下

    php导入模块文件分享

    代码很简单,大家注意看注释就可以了。... * @return Exception 如果导入成功则返回true,否则返回异常对象  *  * @example  * importModule(‘gapi.Account’) =&gt; include_once(‘modules/gapi/Account.class.p

    中国移动ONENET平台测试项目-基于Springboot+源代码+文档说明

    src/main/java/**/exception:平台定义异常 src/main/java/**/interceptor:拦截器 src/main/java/**/service:服务层,封装各个业务的处理 src/main/java/**/util:工具类 src/main/resources/application....

    angular-logs2server

    这个新的 angular 模块可以将 Angular 或您自己的 JavaScript 代码抛出的所有客户端异常发送到您的服务器。 如何使用它 ? 首先,您必须在 HTML 中导入主 JS 文件 &lt; script type = "text/javascript" src = ...

    Jsp文件上传下载(工具类源码)

    } catch (FileUploadException e) {// 处理文件尺寸过大异常 if (e instanceof SizeLimitExceededException) { out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节&lt;p /&gt;"); out .println("返回&lt;/a&gt;"); ...

    公共方法类库dll,转换文件格式,处理字符串,处理图片,处理文件等

    4.ErrorLog.cs 专门用户对系统的一些异常进行记录,默认写于Exception文件夹的ErrorLog.txt里。 5.FileDeal.cs 专门用于对文件的重命名、大小、格式等操作。 6.IExport.cs 专门用于数据的导入导出,目前此类不能使用...

    eio:在类型级别跟踪具有异常的IO

    用法示例由于这是一个识字的haskell文件,因此我们需要指定所有语言扩展名并预先导入。 {-# LANGUAGE QualifiedDo #-}{-# LANGUAGE DataKinds #-}{-# LANGUAGE DerivingStrategies #-}{-# LANGUAGE DeriveAnyClass #...

    Programming C#(第4版)(中文版)part1

    Exception对象 274 自定义异常 278 重新抛出异常 280 第12章 委托与事件 286 委托 287 多重委托 298 事件 302 使用匿名方法 315 从多重委托获取值 316 第2部分 C#编程 325 第13章 创建Windows应用程序 327 创建一个...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    4.17.1 导入样式表 154 4.17.2 包含样式表 155 4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出...

    Programming C#(第4版)(中文版)part3

    Exception对象 274 自定义异常 278 重新抛出异常 280 第12章 委托与事件 286 委托 287 多重委托 298 事件 302 使用匿名方法 315 从多重委托获取值 316 第2部分 C#编程 325 第13章 创建Windows应用程序 327 创建一个...

    Programming C#(第4版)(中文版)part2

    Exception对象 274 自定义异常 278 重新抛出异常 280 第12章 委托与事件 286 委托 287 多重委托 298 事件 302 使用匿名方法 315 从多重委托获取值 316 第2部分 C#编程 325 第13章 创建Windows应用程序 327 创建一个...

    NC(UFIDA)错误帮助文档加强版

    NC开发初学者必备神器一份企业内部开发文档,绝对值得拥有,一本在手,走遍天下都不怕 第二章 NC系统 第一节 重要的类 流程平台客户端工具类nc.ui.pub.pf....导入数据字典正确,但是在制作单据模板时,不能显示表名.

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    4.17.1 导入样式表 154 4.17.2 包含样式表 155 4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    4.17.1 导入样式表 154 4.17.2 包含样式表 155 4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    4.17.1 导入样式表 154 4.17.2 包含样式表 155 4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出...

    c# 加密和解密相关代码

    文件的加密与解密 第 章 加密与解密技术 第19章 加密与解密技术 829 19.1 数据的加密与解密 实例571 异或算法对数字进行加密与解密 光盘位置:光盘\MR\19\571 中级 趣味指数: 实 例说明 在实现本实例之前先来简要...

    上机实验-2 (1).doc

    //导入 public class Test1 extends JFrame {//继承JFrame private final JPanel contentPane;//私有类,其他类不能享用 private final JTextPane numberField;//容器类 private final JTextField sumyun;//...

    Oracle 10g 开发与管理

    3.在Exception中对异常做处理 67 (三) 用户自定义异常 68 3.处理异常 68 Exception 68 (四)异常传播 68 1.自定义异常的传播 68 2.声明中的异常 68 (五)使用SQLCODE和SQLERRM 68 第八讲 过程、函数和程序包 72 8.1...

    java初学者必看

    17.6.7 exception对象 17.6.8 config对象 17.7 计数器 17.8 本章习题 第18章 KTV管理系统 18.1 数据存储设计 18.2 管理界面 18.2.1 添加歌曲界面 18.2.2 歌曲查找界面 18.2.3 歌曲修改界面 18.2.4 删除...

    ollydumpX插件, 显示xmm寄存器等

    3.X64系统启动exe时出现异常EXCEPTION_SINGLE_STEP 4.自动对mswsock.dll文件的WSP系列函数命名添加标签 5.CPU信息,监视,日志窗体添加代码支持快捷复制Ctrl+C, Ctrl+A 6.CPU_DUMP添加菜单可以复制字符串

Global site tag (gtag.js) - Google Analytics