当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

weblogic下Content-Length设置有误引起java.net.ProtocolException

发表于: 2011-03-06   作者:bsr1983   来源:转载   浏览次数:
摘要:      问题描述:         公司平台中的附件组件,部署在Tomcat下上传、下载均没有问题,等到将代码部署到weblogic中时,下载附件时有时候会出现java.net.ProtocolException,有时候附件可正常下载。        问题分析: 在异常

     问题描述:

        公司平台中的附件组件,部署在Tomcat下上传、下载均没有问题,等到将代码部署到weblogic中时,下载附件时有时候会出现java.net.ProtocolException,有时候附件可正常下载。

       问题分析:

在异常信息中提示响应头中的Content-Length 与实际传输的字节长度不一致。但有的附件却可以正常下载,因此,问题应该出在响应输出流的字节数与Content-Length中设置的大小不一致。但有的附件却可以正常下载,也就是说有一些附件的实际输出字节数与Content-Length中的一致。

        相同的问题曾经出现在我编写的MD5工具中,即我自己编写的工具根据文件生成的MD5值与其他工具生成的不一致,造成原因是我更新MD5时没有根据实际读入的字节数组长度,而是以缓存的字节数组固定长度进行更新的,因此问题就出现在了缓存数组的大小与实际读入(写出)的字节长度不一致,下面用代码进行说明:

    错误代码:

 

				
                              byte bufferArray[]=new byte[10240];
				if(fis!=null)
				{
					while(fis.read(bufferArray)!=-1)
					{
						fos.write(bufferArray);
					}
				}

 

   上面的代码没有根据实际读入的大小进行输出,因此在输出时,由于读入的文件大小不是缓存数据大小的整数倍,就会造成实际输出的字节长度大于文件的实际长度,与相应头中设置的Content-Length不一致,下载报错。

    但如果附件的长度恰恰是缓存数组长度的整数倍,则实际输出长度与Content-Length一致,下载不会报错。

    至于Tomcat下没有问题而Weblogic下有问题,应该是weblogic对相应的校验比Tomcat严格所致。

      问题解决:

       在输出时按照实际读入的字节数组长度进行输出,问题解决。

       具体代码:

       

				byte bufferArray[]=new byte[10240];
				if(fis!=null)
				{
					int byteLength=fis.read(bufferArray);
					while(byteLength!=-1)
					{
						fos.write(bufferArray,0,byteLength);
						byteLength=fis.read(bufferArray);
					}
				}
 

weblogic下Content-Length设置有误引起java.net.ProtocolException

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
如题,上网搜了一通,找到几个类似的问题帖子,未找到答案。 http://www.iteye.com/problems/24400
1.首先在weblogic目录中加入mysql的jar包:mysql-connector-java-5.1.7-bin.jar放入到weblogic目录
<script type="text/javascript"></script> <!--<a accesskey="2" href="javascr
转载:http://yunzhongxia.iteye.com/blog/790619 项目开发中消息服务器用的是ActiveMQ,但是项目上
项目开发中消息服务器用的是ActiveMQ,但是项目上线后要用Weblogic自带的JMS消息服务,看了网上一些
使用StringBuilder在weblogic8.1下面运行居然报了以下错误 只好将StringBuilder改为StringBuffer了,
1,启 动 Eclipse,选择“Window -> Preferences”菜单,打开首选项对话框。展开 MyEclipse 下的
公司项目最近需要将http访问改为https,在网上找了些资料配置成功,自己总结下。 一、进入jdk安装目
Weblogic新建domain:至WEBLOGIC安装目录下comm/bin文件夹下的config.sh文件. 1. 运行./config.sh 后,
同一weblogic下配置多个domain 我用的是weblogic9.2、myeclipse6.5、mysql5.5,现在我要将A系统分别
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号