[转帖]解决在weblogic上报java.net.ProtocolException: Didn't meet stated Content-Length,_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 6342 | 回复: 0   主题: [转帖]解决在weblogic上报java.net.ProtocolException: Didn't meet stated Content-Length,        下一篇 
smile
注册用户
等级:少校
经验:889
发帖:70
精华:2
注册:2013-4-22
状态:离线
发送短消息息给smile 加好友    发送短消息息给smile 发消息
发表于: IP:您无权察看 2013-4-28 9:03:49 | [全部帖] [楼主帖] 楼主

今天在查看weblogic服务器日志时后台报出了大量的错误,如下:

java.net.ProtocolException: Didn't meet stated Content-Length, wrote: '146592' bytes instead of stated: '462285' bytes.
at weblogic.servlet.internal.ServletOutputStreamImpl.ensureContentLength(ServletOutputStreamImpl.java:470)
at weblogic.servlet.internal.ServletResponseImpl.ensureContentLength(ServletResponseImpl.java:1176)
at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImpl.java:1188)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2590)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)


经过多次测试后找到解决办法,主要是因为在图片下载时,

bis = new BufferedInputStream(rs.getBinaryStream(img));
response.setContentLength(rs.getInt(2));
response.setBufferSize(1024);
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "filename=" + InfoVariable.converu2a("img"));
ServletOutputStream op = response.getOutputStream();
byte[] b= new byte[1024];
int size=0;
while ((size = bis.read(b)) != -1)
op.write(b, 0, size);


导入到response中的字节数没有设定,可以通过增加如下设置解决此问题,

//其中rs.getInt(2)为在数据库中blob字段的大小,可以通过dbms_lob.getlength(img)函数取得
response.setContentLength(rs.getInt(2)); //注意cotentlength的大小为图片的大小


如果要是图片打不开,或者显示为乱码可以用response.resetBuffer();刷新一下缓存.




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论